diff options
| author | Anghelo Carvajal <angheloalf95@gmail.com> | 2023-07-29 12:52:32 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-29 12:52:32 -0400 |
| commit | 632ff4b2abec60e91be7b71e0cf40043bed75f32 (patch) | |
| tree | c8e53f50d0c681afc2a6542a11cbf442174751f3 | |
| parent | 40cc48fb7a956f94cfd4c0e90a60ee15eefc4f8e (diff) | |
Build a compressed ROM (#16)
* git subrepo clone (merge) --branch=5da3132606e4fd427a8d72b8428e4f921cd6e56f git@github.com:z64tools/z64compress.git tools/z64compress
subrepo:
subdir: "tools/z64compress"
merged: "5da3132"
upstream:
origin: "git@github.com:z64tools/z64compress.git"
branch: "5da3132606e4fd427a8d72b8428e4f921cd6e56f"
commit: "5da3132"
git-subrepo:
version: "0.4.3"
origin: "https://github.com/ingydotnet/git-subrepo.git"
commit: "2f68596"
* z64compress_wrapper.py
* fixes
* dmadata.c
* readme
* git subrepo pull tools/splat
subrepo:
subdir: "tools/splat"
merged: "01ac556"
upstream:
origin: "git@github.com:ethteck/splat.git"
branch: "master"
commit: "01ac556"
git-subrepo:
version: "0.4.3"
origin: "https://github.com/ingydotnet/git-subrepo.git"
commit: "2f68596"
* segment_end_before_align: True
* Add compressed step to jenkinsfile
* TODO
* format
* remove from boot_variables.h
* simplify
* Change makefile to match MM
96 files changed, 37891 insertions, 29 deletions
diff --git a/Jenkinsfile b/Jenkinsfile index 8f7ce46..0450f39 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -45,6 +45,11 @@ pipeline { sh 'bash -c "make -j uncompressed"' } } + stage('Build compressed') { + steps { + sh 'bash -c "make -j compressed"' + } + } stage('Upload to Frogress') { when { branch 'main' @@ -20,6 +20,8 @@ RUN_CC_CHECK ?= 1 CC_CHECK_COMP ?= gcc # Dump build object files OBJDUMP_BUILD ?= 0 +# Number of threads to compress with +N_THREADS ?= $(shell nproc) # Set prefix to mips binutils binaries (mips-linux-gnu-ld => 'mips-linux-gnu-') - Change at your own risk! # In nearly all cases, not having 'mips-linux-gnu-*' binaries on the PATH is indicative of missing dependencies @@ -155,6 +157,11 @@ else OBJCOPY_BIN = @: endif +# rom compression flags +COMPFLAGS := --threads $(N_THREADS) +ifeq ($(NON_MATCHING),0) + COMPFLAGS += --matching +endif #### Files #### @@ -190,7 +197,7 @@ build/src/%.o: CC := $(ASM_PROC) $(ASM_PROC_FLAGS) $(CC) -- $(AS) $(ASFLAGS) -- #### Main Targets ### -all: uncompressed +all: uncompressed compressed uncompressed: $(ROM) ifneq ($(COMPARE),0) @@ -198,12 +205,11 @@ ifneq ($(COMPARE),0) @md5sum -c $(TARGET)_uncompressed.$(VERSION).md5 endif -# TODO -# compressed: $(ROMC) -# ifneq ($(COMPARE),0) -# @md5sum $(ROMC) -# @md5sum -c $(TARGET).$(VERSION).md5 -# endif +compressed: $(ROMC) +ifneq ($(COMPARE),0) + @md5sum $(ROMC) + @md5sum -c $(TARGET).$(VERSION).md5 +endif clean: $(RM) -r $(BUILD_DIR)/asm $(BUILD_DIR)/bin $(BUILD_DIR)/src $(ROM) $(ROMC) $(ELF) @@ -238,7 +244,7 @@ init: $(MAKE) diff-init .PHONY: all compressed uncompressed clean distclean setup extract diff-init init -.DEFAULT_GOAL := all +.DEFAULT_GOAL := uncompressed # Prevent removing intermediate files .SECONDARY: @@ -246,7 +252,11 @@ init: #### Various Recipes #### $(ROM): $(ELF) - $(OBJCOPY) -O binary --pad-to=0x1914000 --gap-fill=0xFF $< $@ + $(OBJCOPY) -O binary --pad-to=0x1914000 --gap-fill=0x00 $< $@ +# TODO: update rom header checksum + +$(ROMC): $(ROM) + python3 tools/z64compress_wrapper.py $(COMPFLAGS) $< $@ $(ELF) $(SPLAT_YAML) # TODO: avoid using auto/undefined $(ELF): $(O_FILES) $(LD_SCRIPT) $(BUILD_DIR)/linker_scripts/$(VERSION)/hardware_regs.ld $(BUILD_DIR)/linker_scripts/$(VERSION)/undefined_syms.ld $(BUILD_DIR)/linker_scripts/common_undef_syms.ld $(BUILD_DIR)/linker_scripts/libultra_syms.ld @@ -78,3 +78,4 @@ The licensing of this repository does not cover subrepos, namely: * `tools/fado` * `tools/splat` * `lib/ultralib` +* `tools/z64compress` diff --git a/include/boot_variables.h b/include/boot_variables.h index 60aa33f..cfd8557 100644 --- a/include/boot_variables.h +++ b/include/boot_variables.h @@ -286,7 +286,6 @@ // extern UNK_TYPE B_80041A00_jp; // extern UNK_TYPE B_80044684_jp; -// extern UNK_TYPE D_80044690_jp; #endif diff --git a/include/other_types.h b/include/other_types.h index f699ccb..69af3e7 100644 --- a/include/other_types.h +++ b/include/other_types.h @@ -5,7 +5,7 @@ // Header for files that are well known, but don't have a proper header home yet -typedef u32 romoffset_t; +typedef u32 RomOffset; typedef void* TexturePtr; #endif diff --git a/include/segment_symbols.h b/include/segment_symbols.h index e2950c0..e9e7c32 100644 --- a/include/segment_symbols.h +++ b/include/segment_symbols.h @@ -33,11 +33,11 @@ #define SEGMENT_VRAM_END(segment) (segment ## _VRAM_END) #define SEGMENT_VRAM_SIZE(segment) ((uintptr_t)SEGMENT_VRAM_END(segment) - (uintptr_t)SEGMENT_VRAM_START(segment)) -#define SEGMENT_ROM_START(segment) ((romoffset_t)segment ## _ROM_START) -#define SEGMENT_ROM_END(segment) ((romoffset_t)segment ## _ROM_END) +#define SEGMENT_ROM_START(segment) ((RomOffset)segment ## _ROM_START) +#define SEGMENT_ROM_END(segment) ((RomOffset)segment ## _ROM_END) #define SEGMENT_ROM_SIZE(segment) (SEGMENT_ROM_END(segment) - SEGMENT_ROM_START(segment)) -#define SEGMENT_DATA_SIZE_CONST(segment) ((romoffset_t)segment ## _DATA_SIZE) +#define SEGMENT_DATA_SIZE_CONST(segment) ((RomOffset)segment ## _DATA_SIZE) #define SEGMENT_BSS_START(segment) (segment ## _BSS_START) #define SEGMENT_BSS_END(segment) (segment ## _BSS_END) diff --git a/include/tables/dmadata_table.h b/include/tables/dmadata_table.h new file mode 100644 index 0000000..748b262 --- /dev/null +++ b/include/tables/dmadata_table.h @@ -0,0 +1,5 @@ +/** + * Select dmadata table for version + */ + +#include "dmatables/dmadata_table_jp.h" diff --git a/include/tables/dmatables/dmadata_table_jp.h b/include/tables/dmatables/dmadata_table_jp.h new file mode 100644 index 0000000..c5c0a7e --- /dev/null +++ b/include/tables/dmatables/dmadata_table_jp.h @@ -0,0 +1,3382 @@ +/** + * Matching dmadata layout for JP + * + * DEFINE_DMA_ENTRY should be used for all dmadata entries + * - Argument 1: Name of the segment + * - Argument 2: String matching the original name of the segment + */ +DEFINE_DMA_ENTRY(makerom, "makerom") +DEFINE_DMA_ENTRY(boot, "boot") +DEFINE_DMA_ENTRY(dmadata, "dmadata") +DEFINE_DMA_ENTRY(segment_027130, "segment_027130") +DEFINE_DMA_ENTRY(segment_0E4D10, "segment_0E4D10") +DEFINE_DMA_ENTRY(segment_13D9A0, "segment_13D9A0") +DEFINE_DMA_ENTRY(code, "code") +DEFINE_DMA_ENTRY(ovl_0073F4D0, "ovl_0073F4D0") +DEFINE_DMA_ENTRY(ovl_0073F4D0_reloc, "ovl_0073F4D0_reloc") +DEFINE_DMA_ENTRY(ovl_00741EA0, "ovl_00741EA0") +DEFINE_DMA_ENTRY(ovl_00741EA0_reloc, "ovl_00741EA0_reloc") +DEFINE_DMA_ENTRY(ovl_00741FB0, "ovl_00741FB0") +DEFINE_DMA_ENTRY(ovl_00741FB0_reloc, "ovl_00741FB0_reloc") +DEFINE_DMA_ENTRY(ovl_00743B70, "ovl_00743B70") +DEFINE_DMA_ENTRY(ovl_00743B70_reloc, "ovl_00743B70_reloc") +DEFINE_DMA_ENTRY(ovl_00743CD0, "ovl_00743CD0") +DEFINE_DMA_ENTRY(ovl_00743CD0_reloc, "ovl_00743CD0_reloc") +DEFINE_DMA_ENTRY(ovl_00744020, "ovl_00744020") +DEFINE_DMA_ENTRY(ovl_00744020_reloc, "ovl_00744020_reloc") +DEFINE_DMA_ENTRY(ovl_00747AA0, "ovl_00747AA0") +DEFINE_DMA_ENTRY(ovl_00747AA0_reloc, "ovl_00747AA0_reloc") +DEFINE_DMA_ENTRY(ovl_007486E0, "ovl_007486E0") +DEFINE_DMA_ENTRY(ovl_007486E0_reloc, "ovl_007486E0_reloc") +DEFINE_DMA_ENTRY(ovl_007492E0, "ovl_007492E0") +DEFINE_DMA_ENTRY(ovl_007492E0_reloc, "ovl_007492E0_reloc") +DEFINE_DMA_ENTRY(ovl_007745B0, "ovl_007745B0") +DEFINE_DMA_ENTRY(ovl_007745B0_reloc, "ovl_007745B0_reloc") +DEFINE_DMA_ENTRY(ovl_submenu, "ovl_submenu") +DEFINE_DMA_ENTRY(ovl_submenu_reloc, "ovl_submenu_reloc") +DEFINE_DMA_ENTRY(ovl_00777AE0, "ovl_00777AE0") +DEFINE_DMA_ENTRY(ovl_00777AE0_reloc, "ovl_00777AE0_reloc") +DEFINE_DMA_ENTRY(ovl_007829E0, "ovl_007829E0") +DEFINE_DMA_ENTRY(ovl_007829E0_reloc, "ovl_007829E0_reloc") +DEFINE_DMA_ENTRY(ovl_00784FC0, "ovl_00784FC0") +DEFINE_DMA_ENTRY(ovl_00784FC0_reloc, "ovl_00784FC0_reloc") +DEFINE_DMA_ENTRY(ovl_00785700, "ovl_00785700") +DEFINE_DMA_ENTRY(ovl_00785700_reloc, "ovl_00785700_reloc") +DEFINE_DMA_ENTRY(ovl_00789B60, "ovl_00789B60") +DEFINE_DMA_ENTRY(ovl_00789B60_reloc, "ovl_00789B60_reloc") +DEFINE_DMA_ENTRY(ovl_0078A560, "ovl_0078A560") +DEFINE_DMA_ENTRY(ovl_0078A560_reloc, "ovl_0078A560_reloc") +DEFINE_DMA_ENTRY(ovl_0078AE30, "ovl_0078AE30") +DEFINE_DMA_ENTRY(ovl_0078AE30_reloc, "ovl_0078AE30_reloc") +DEFINE_DMA_ENTRY(ovl_0078BFB0, "ovl_0078BFB0") +DEFINE_DMA_ENTRY(ovl_0078BFB0_reloc, "ovl_0078BFB0_reloc") +DEFINE_DMA_ENTRY(ovl_0078CB80, "ovl_0078CB80") +DEFINE_DMA_ENTRY(ovl_0078CB80_reloc, "ovl_0078CB80_reloc") +DEFINE_DMA_ENTRY(ovl_007908A0, "ovl_007908A0") +DEFINE_DMA_ENTRY(ovl_007908A0_reloc, "ovl_007908A0_reloc") +DEFINE_DMA_ENTRY(ovl_00792700, "ovl_00792700") +DEFINE_DMA_ENTRY(ovl_00792700_reloc, "ovl_00792700_reloc") +DEFINE_DMA_ENTRY(ovl_00794380, "ovl_00794380") +DEFINE_DMA_ENTRY(ovl_00794380_reloc, "ovl_00794380_reloc") +DEFINE_DMA_ENTRY(ovl_00795350, "ovl_00795350") +DEFINE_DMA_ENTRY(ovl_00795350_reloc, "ovl_00795350_reloc") +DEFINE_DMA_ENTRY(ovl_00797A50, "ovl_00797A50") +DEFINE_DMA_ENTRY(ovl_00797A50_reloc, "ovl_00797A50_reloc") +DEFINE_DMA_ENTRY(ovl_00799580, "ovl_00799580") +DEFINE_DMA_ENTRY(ovl_00799580_reloc, "ovl_00799580_reloc") +DEFINE_DMA_ENTRY(ovl_0079A290, "ovl_0079A290") +DEFINE_DMA_ENTRY(ovl_0079A290_reloc, "ovl_0079A290_reloc") +DEFINE_DMA_ENTRY(ovl_0079B120, "ovl_0079B120") +DEFINE_DMA_ENTRY(ovl_0079B120_reloc, "ovl_0079B120_reloc") +DEFINE_DMA_ENTRY(ovl_0079C020, "ovl_0079C020") +DEFINE_DMA_ENTRY(ovl_0079C020_reloc, "ovl_0079C020_reloc") +DEFINE_DMA_ENTRY(ovl_0079DA50, "ovl_0079DA50") +DEFINE_DMA_ENTRY(ovl_0079DA50_reloc, "ovl_0079DA50_reloc") +DEFINE_DMA_ENTRY(ovl_0079E430, "ovl_0079E430") +DEFINE_DMA_ENTRY(ovl_0079E430_reloc, "ovl_0079E430_reloc") +DEFINE_DMA_ENTRY(ovl_0079F810, "ovl_0079F810") +DEFINE_DMA_ENTRY(ovl_0079F810_reloc, "ovl_0079F810_reloc") +DEFINE_DMA_ENTRY(ovl_007A10E0, "ovl_007A10E0") +DEFINE_DMA_ENTRY(ovl_007A10E0_reloc, "ovl_007A10E0_reloc") +DEFINE_DMA_ENTRY(ovl_007A28F0, "ovl_007A28F0") +DEFINE_DMA_ENTRY(ovl_007A28F0_reloc, "ovl_007A28F0_reloc") +DEFINE_DMA_ENTRY(ovl_player_actor, "ovl_player_actor") +DEFINE_DMA_ENTRY(ovl_player_actor_reloc, "ovl_player_actor_reloc") +DEFINE_DMA_ENTRY(ovl_007DE050, "ovl_007DE050") +DEFINE_DMA_ENTRY(ovl_007DE050_reloc, "ovl_007DE050_reloc") +DEFINE_DMA_ENTRY(ovl_007DF180, "ovl_007DF180") +DEFINE_DMA_ENTRY(ovl_007DF180_reloc, "ovl_007DF180_reloc") +DEFINE_DMA_ENTRY(ovl_007E08D0, "ovl_007E08D0") +DEFINE_DMA_ENTRY(ovl_007E08D0_reloc, "ovl_007E08D0_reloc") +DEFINE_DMA_ENTRY(ovl_007E18F0, "ovl_007E18F0") +DEFINE_DMA_ENTRY(ovl_007E18F0_reloc, "ovl_007E18F0_reloc") +DEFINE_DMA_ENTRY(ovl_007E2440, "ovl_007E2440") +DEFINE_DMA_ENTRY(ovl_007E2440_reloc, "ovl_007E2440_reloc") +DEFINE_DMA_ENTRY(ovl_007E3170, "ovl_007E3170") +DEFINE_DMA_ENTRY(ovl_007E3170_reloc, "ovl_007E3170_reloc") +DEFINE_DMA_ENTRY(ovl_007E3990, "ovl_007E3990") +DEFINE_DMA_ENTRY(ovl_007E3990_reloc, "ovl_007E3990_reloc") +DEFINE_DMA_ENTRY(ovl_007E4130, "ovl_007E4130") +DEFINE_DMA_ENTRY(ovl_007E4130_reloc, "ovl_007E4130_reloc") +DEFINE_DMA_ENTRY(ovl_007E4DF0, "ovl_007E4DF0") +DEFINE_DMA_ENTRY(ovl_007E4DF0_reloc, "ovl_007E4DF0_reloc") +DEFINE_DMA_ENTRY(ovl_007E5640, "ovl_007E5640") +DEFINE_DMA_ENTRY(ovl_007E5640_reloc, "ovl_007E5640_reloc") +DEFINE_DMA_ENTRY(ovl_007E5880, "ovl_007E5880") +DEFINE_DMA_ENTRY(ovl_007E5880_reloc, "ovl_007E5880_reloc") +DEFINE_DMA_ENTRY(ovl_007F0350, "ovl_007F0350") +DEFINE_DMA_ENTRY(ovl_007F0350_reloc, "ovl_007F0350_reloc") +DEFINE_DMA_ENTRY(ovl_007FAEB0, "ovl_007FAEB0") +DEFINE_DMA_ENTRY(ovl_007FAEB0_reloc, "ovl_007FAEB0_reloc") +DEFINE_DMA_ENTRY(ovl_00805E30, "ovl_00805E30") +DEFINE_DMA_ENTRY(ovl_00805E30_reloc, "ovl_00805E30_reloc") +DEFINE_DMA_ENTRY(ovl_008108C0, "ovl_008108C0") +DEFINE_DMA_ENTRY(ovl_008108C0_reloc, "ovl_008108C0_reloc") +DEFINE_DMA_ENTRY(ovl_00814FA0, "ovl_00814FA0") +DEFINE_DMA_ENTRY(ovl_00814FA0_reloc, "ovl_00814FA0_reloc") +DEFINE_DMA_ENTRY(ovl_00815B70, "ovl_00815B70") +DEFINE_DMA_ENTRY(ovl_00815B70_reloc, "ovl_00815B70_reloc") +DEFINE_DMA_ENTRY(ovl_0081AA60, "ovl_0081AA60") +DEFINE_DMA_ENTRY(ovl_0081AA60_reloc, "ovl_0081AA60_reloc") +DEFINE_DMA_ENTRY(ovl_0081D9D0, "ovl_0081D9D0") +DEFINE_DMA_ENTRY(ovl_0081D9D0_reloc, "ovl_0081D9D0_reloc") +DEFINE_DMA_ENTRY(ovl_00821B40, "ovl_00821B40") +DEFINE_DMA_ENTRY(ovl_00821B40_reloc, "ovl_00821B40_reloc") +DEFINE_DMA_ENTRY(ovl_00824500, "ovl_00824500") +DEFINE_DMA_ENTRY(ovl_00824500_reloc, "ovl_00824500_reloc") +DEFINE_DMA_ENTRY(ovl_008253C0, "ovl_008253C0") +DEFINE_DMA_ENTRY(ovl_008253C0_reloc, "ovl_008253C0_reloc") +DEFINE_DMA_ENTRY(ovl_00827DE0, "ovl_00827DE0") +DEFINE_DMA_ENTRY(ovl_00827DE0_reloc, "ovl_00827DE0_reloc") +DEFINE_DMA_ENTRY(ovl_00828C50, "ovl_00828C50") +DEFINE_DMA_ENTRY(ovl_00828C50_reloc, "ovl_00828C50_reloc") +DEFINE_DMA_ENTRY(ovl_0082B3C0, "ovl_0082B3C0") +DEFINE_DMA_ENTRY(ovl_0082B3C0_reloc, "ovl_0082B3C0_reloc") +DEFINE_DMA_ENTRY(ovl_0082BB80, "ovl_0082BB80") +DEFINE_DMA_ENTRY(ovl_0082BB80_reloc, "ovl_0082BB80_reloc") +DEFINE_DMA_ENTRY(ovl_0082BC20, "ovl_0082BC20") +DEFINE_DMA_ENTRY(ovl_0082BC20_reloc, "ovl_0082BC20_reloc") +DEFINE_DMA_ENTRY(ovl_0082CED0, "ovl_0082CED0") +DEFINE_DMA_ENTRY(ovl_0082CED0_reloc, "ovl_0082CED0_reloc") +DEFINE_DMA_ENTRY(ovl_0082D7F0, "ovl_0082D7F0") +DEFINE_DMA_ENTRY(ovl_0082D7F0_reloc, "ovl_0082D7F0_reloc") +DEFINE_DMA_ENTRY(ovl_00845C40, "ovl_00845C40") +DEFINE_DMA_ENTRY(ovl_00845C40_reloc, "ovl_00845C40_reloc") +DEFINE_DMA_ENTRY(ovl_00846430, "ovl_00846430") +DEFINE_DMA_ENTRY(ovl_00846430_reloc, "ovl_00846430_reloc") +DEFINE_DMA_ENTRY(ovl_008464D0, "ovl_008464D0") +DEFINE_DMA_ENTRY(ovl_008464D0_reloc, "ovl_008464D0_reloc") +DEFINE_DMA_ENTRY(ovl_00846860, "ovl_00846860") +DEFINE_DMA_ENTRY(ovl_00846860_reloc, "ovl_00846860_reloc") +DEFINE_DMA_ENTRY(ovl_008477A0, "ovl_008477A0") +DEFINE_DMA_ENTRY(ovl_008477A0_reloc, "ovl_008477A0_reloc") +DEFINE_DMA_ENTRY(ovl_00848600, "ovl_00848600") +DEFINE_DMA_ENTRY(ovl_00848600_reloc, "ovl_00848600_reloc") +DEFINE_DMA_ENTRY(ovl_00848BF0, "ovl_00848BF0") +DEFINE_DMA_ENTRY(ovl_00848BF0_reloc, "ovl_00848BF0_reloc") +DEFINE_DMA_ENTRY(ovl_00849B50, "ovl_00849B50") +DEFINE_DMA_ENTRY(ovl_00849B50_reloc, "ovl_00849B50_reloc") +DEFINE_DMA_ENTRY(ovl_0084CBC0, "ovl_0084CBC0") +DEFINE_DMA_ENTRY(ovl_0084CBC0_reloc, "ovl_0084CBC0_reloc") +DEFINE_DMA_ENTRY(ovl_0084D180, "ovl_0084D180") +DEFINE_DMA_ENTRY(ovl_0084D180_reloc, "ovl_0084D180_reloc") +DEFINE_DMA_ENTRY(ovl_0084E080, "ovl_0084E080") +DEFINE_DMA_ENTRY(ovl_0084E080_reloc, "ovl_0084E080_reloc") +DEFINE_DMA_ENTRY(ovl_0084F180, "ovl_0084F180") +DEFINE_DMA_ENTRY(ovl_0084F180_reloc, "ovl_0084F180_reloc") +DEFINE_DMA_ENTRY(ovl_00850680, "ovl_00850680") +DEFINE_DMA_ENTRY(ovl_00850680_reloc, "ovl_00850680_reloc") +DEFINE_DMA_ENTRY(ovl_008576C0, "ovl_008576C0") +DEFINE_DMA_ENTRY(ovl_008576C0_reloc, "ovl_008576C0_reloc") +DEFINE_DMA_ENTRY(ovl_00858A50, "ovl_00858A50") +DEFINE_DMA_ENTRY(ovl_00858A50_reloc, "ovl_00858A50_reloc") +DEFINE_DMA_ENTRY(ovl_0085A400, "ovl_0085A400") +DEFINE_DMA_ENTRY(ovl_0085A400_reloc, "ovl_0085A400_reloc") +DEFINE_DMA_ENTRY(ovl_0085A8E0, "ovl_0085A8E0") +DEFINE_DMA_ENTRY(ovl_0085A8E0_reloc, "ovl_0085A8E0_reloc") +DEFINE_DMA_ENTRY(ovl_0085B170, "ovl_0085B170") +DEFINE_DMA_ENTRY(ovl_0085B170_reloc, "ovl_0085B170_reloc") +DEFINE_DMA_ENTRY(ovl_0085B960, "ovl_0085B960") +DEFINE_DMA_ENTRY(ovl_0085B960_reloc, "ovl_0085B960_reloc") +DEFINE_DMA_ENTRY(ovl_0085C200, "ovl_0085C200") +DEFINE_DMA_ENTRY(ovl_0085C200_reloc, "ovl_0085C200_reloc") +DEFINE_DMA_ENTRY(ovl_0085C570, "ovl_0085C570") +DEFINE_DMA_ENTRY(ovl_0085C570_reloc, "ovl_0085C570_reloc") +DEFINE_DMA_ENTRY(ovl_0085D660, "ovl_0085D660") +DEFINE_DMA_ENTRY(ovl_0085D660_reloc, "ovl_0085D660_reloc") +DEFINE_DMA_ENTRY(ovl_0085F7D0, "ovl_0085F7D0") +DEFINE_DMA_ENTRY(ovl_0085F7D0_reloc, "ovl_0085F7D0_reloc") +DEFINE_DMA_ENTRY(ovl_00861420, "ovl_00861420") +DEFINE_DMA_ENTRY(ovl_00861420_reloc, "ovl_00861420_reloc") +DEFINE_DMA_ENTRY(ovl_008623E0, "ovl_008623E0") +DEFINE_DMA_ENTRY(ovl_008623E0_reloc, "ovl_008623E0_reloc") +DEFINE_DMA_ENTRY(ovl_00862870, "ovl_00862870") +DEFINE_DMA_ENTRY(ovl_00862870_reloc, "ovl_00862870_reloc") +DEFINE_DMA_ENTRY(ovl_00866ED0, "ovl_00866ED0") +DEFINE_DMA_ENTRY(ovl_00866ED0_reloc, "ovl_00866ED0_reloc") +DEFINE_DMA_ENTRY(ovl_00867620, "ovl_00867620") +DEFINE_DMA_ENTRY(ovl_00867620_reloc, "ovl_00867620_reloc") +DEFINE_DMA_ENTRY(ovl_008678C0, "ovl_008678C0") +DEFINE_DMA_ENTRY(ovl_008678C0_reloc, "ovl_008678C0_reloc") +DEFINE_DMA_ENTRY(ovl_00867C60, "ovl_00867C60") +DEFINE_DMA_ENTRY(ovl_00867C60_reloc, "ovl_00867C60_reloc") +DEFINE_DMA_ENTRY(ovl_00867D00, "ovl_00867D00") +DEFINE_DMA_ENTRY(ovl_00867D00_reloc, "ovl_00867D00_reloc") +DEFINE_DMA_ENTRY(ovl_00867DA0, "ovl_00867DA0") +DEFINE_DMA_ENTRY(ovl_00867DA0_reloc, "ovl_00867DA0_reloc") +DEFINE_DMA_ENTRY(ovl_008681F0, "ovl_008681F0") +DEFINE_DMA_ENTRY(ovl_008681F0_reloc, "ovl_008681F0_reloc") +DEFINE_DMA_ENTRY(ovl_008798C0, "ovl_008798C0") +DEFINE_DMA_ENTRY(ovl_008798C0_reloc, "ovl_008798C0_reloc") +DEFINE_DMA_ENTRY(ovl_00887F90, "ovl_00887F90") +DEFINE_DMA_ENTRY(ovl_00887F90_reloc, "ovl_00887F90_reloc") +DEFINE_DMA_ENTRY(ovl_00889270, "ovl_00889270") +DEFINE_DMA_ENTRY(ovl_00889270_reloc, "ovl_00889270_reloc") +DEFINE_DMA_ENTRY(ovl_00889440, "ovl_00889440") +DEFINE_DMA_ENTRY(ovl_00889440_reloc, "ovl_00889440_reloc") +DEFINE_DMA_ENTRY(ovl_0088DD00, "ovl_0088DD00") +DEFINE_DMA_ENTRY(ovl_0088DD00_reloc, "ovl_0088DD00_reloc") +DEFINE_DMA_ENTRY(ovl_00892600, "ovl_00892600") +DEFINE_DMA_ENTRY(ovl_00892600_reloc, "ovl_00892600_reloc") +DEFINE_DMA_ENTRY(ovl_00892810, "ovl_00892810") +DEFINE_DMA_ENTRY(ovl_00892810_reloc, "ovl_00892810_reloc") +DEFINE_DMA_ENTRY(ovl_00894A70, "ovl_00894A70") +DEFINE_DMA_ENTRY(ovl_00894A70_reloc, "ovl_00894A70_reloc") +DEFINE_DMA_ENTRY(ovl_00896A30, "ovl_00896A30") +DEFINE_DMA_ENTRY(ovl_00896A30_reloc, "ovl_00896A30_reloc") +DEFINE_DMA_ENTRY(ovl_00897450, "ovl_00897450") +DEFINE_DMA_ENTRY(ovl_00897450_reloc, "ovl_00897450_reloc") +DEFINE_DMA_ENTRY(ovl_00898220, "ovl_00898220") +DEFINE_DMA_ENTRY(ovl_00898220_reloc, "ovl_00898220_reloc") +DEFINE_DMA_ENTRY(ovl_008991B0, "ovl_008991B0") +DEFINE_DMA_ENTRY(ovl_008991B0_reloc, "ovl_008991B0_reloc") +DEFINE_DMA_ENTRY(ovl_0089A1B0, "ovl_0089A1B0") +DEFINE_DMA_ENTRY(ovl_0089A1B0_reloc, "ovl_0089A1B0_reloc") +DEFINE_DMA_ENTRY(ovl_008A1160, "ovl_008A1160") +DEFINE_DMA_ENTRY(ovl_008A1160_reloc, "ovl_008A1160_reloc") +DEFINE_DMA_ENTRY(ovl_008A1F10, "ovl_008A1F10") +DEFINE_DMA_ENTRY(ovl_008A1F10_reloc, "ovl_008A1F10_reloc") +DEFINE_DMA_ENTRY(ovl_008A4940, "ovl_008A4940") +DEFINE_DMA_ENTRY(ovl_008A4940_reloc, "ovl_008A4940_reloc") +DEFINE_DMA_ENTRY(ovl_008A5760, "ovl_008A5760") +DEFINE_DMA_ENTRY(ovl_008A5760_reloc, "ovl_008A5760_reloc") +DEFINE_DMA_ENTRY(ovl_008A6C10, "ovl_008A6C10") +DEFINE_DMA_ENTRY(ovl_008A6C10_reloc, "ovl_008A6C10_reloc") +DEFINE_DMA_ENTRY(ovl_008A8C80, "ovl_008A8C80") +DEFINE_DMA_ENTRY(ovl_008A8C80_reloc, "ovl_008A8C80_reloc") +DEFINE_DMA_ENTRY(ovl_008AA370, "ovl_008AA370") +DEFINE_DMA_ENTRY(ovl_008AA370_reloc, "ovl_008AA370_reloc") +DEFINE_DMA_ENTRY(ovl_008AB7E0, "ovl_008AB7E0") +DEFINE_DMA_ENTRY(ovl_008AB7E0_reloc, "ovl_008AB7E0_reloc") +DEFINE_DMA_ENTRY(ovl_008ADF40, "ovl_008ADF40") +DEFINE_DMA_ENTRY(ovl_008ADF40_reloc, "ovl_008ADF40_reloc") +DEFINE_DMA_ENTRY(ovl_008B26B0, "ovl_008B26B0") +DEFINE_DMA_ENTRY(ovl_008B26B0_reloc, "ovl_008B26B0_reloc") +DEFINE_DMA_ENTRY(ovl_008B2CE0, "ovl_008B2CE0") +DEFINE_DMA_ENTRY(ovl_008B2CE0_reloc, "ovl_008B2CE0_reloc") +DEFINE_DMA_ENTRY(ovl_008B79B0, "ovl_008B79B0") +DEFINE_DMA_ENTRY(ovl_008B79B0_reloc, "ovl_008B79B0_reloc") +DEFINE_DMA_ENTRY(ovl_008B8FC0, "ovl_008B8FC0") +DEFINE_DMA_ENTRY(ovl_008B8FC0_reloc, "ovl_008B8FC0_reloc") +DEFINE_DMA_ENTRY(ovl_008BA3B0, "ovl_008BA3B0") +DEFINE_DMA_ENTRY(ovl_008BA3B0_reloc, "ovl_008BA3B0_reloc") +DEFINE_DMA_ENTRY(ovl_008BAE60, "ovl_008BAE60") +DEFINE_DMA_ENTRY(ovl_008BAE60_reloc, "ovl_008BAE60_reloc") +DEFINE_DMA_ENTRY(ovl_008BBAA0, "ovl_008BBAA0") +DEFINE_DMA_ENTRY(ovl_008BBAA0_reloc, "ovl_008BBAA0_reloc") +DEFINE_DMA_ENTRY(ovl_008BD480, "ovl_008BD480") +DEFINE_DMA_ENTRY(ovl_008BD480_reloc, "ovl_008BD480_reloc") +DEFINE_DMA_ENTRY(ovl_008BE690, "ovl_008BE690") +DEFINE_DMA_ENTRY(ovl_008BE690_reloc, "ovl_008BE690_reloc") +DEFINE_DMA_ENTRY(ovl_008BFC40, "ovl_008BFC40") +DEFINE_DMA_ENTRY(ovl_008BFC40_reloc, "ovl_008BFC40_reloc") +DEFINE_DMA_ENTRY(ovl_008C03E0, "ovl_008C03E0") +DEFINE_DMA_ENTRY(ovl_008C03E0_reloc, "ovl_008C03E0_reloc") +DEFINE_DMA_ENTRY(ovl_008C1040, "ovl_008C1040") +DEFINE_DMA_ENTRY(ovl_008C1040_reloc, "ovl_008C1040_reloc") +DEFINE_DMA_ENTRY(ovl_008C1B30, "ovl_008C1B30") +DEFINE_DMA_ENTRY(ovl_008C1B30_reloc, "ovl_008C1B30_reloc") +DEFINE_DMA_ENTRY(ovl_008C2480, "ovl_008C2480") +DEFINE_DMA_ENTRY(ovl_008C2480_reloc, "ovl_008C2480_reloc") +DEFINE_DMA_ENTRY(ovl_008C2F70, "ovl_008C2F70") +DEFINE_DMA_ENTRY(ovl_008C2F70_reloc, "ovl_008C2F70_reloc") +DEFINE_DMA_ENTRY(ovl_008C3210, "ovl_008C3210") +DEFINE_DMA_ENTRY(ovl_008C3210_reloc, "ovl_008C3210_reloc") +DEFINE_DMA_ENTRY(ovl_008C3A00, "ovl_008C3A00") +DEFINE_DMA_ENTRY(ovl_008C3A00_reloc, "ovl_008C3A00_reloc") +DEFINE_DMA_ENTRY(ovl_008C4300, "ovl_008C4300") +DEFINE_DMA_ENTRY(ovl_008C4300_reloc, "ovl_008C4300_reloc") +DEFINE_DMA_ENTRY(ovl_008C4F70, "ovl_008C4F70") +DEFINE_DMA_ENTRY(ovl_008C4F70_reloc, "ovl_008C4F70_reloc") +DEFINE_DMA_ENTRY(ovl_008C6390, "ovl_008C6390") +DEFINE_DMA_ENTRY(ovl_008C6390_reloc, "ovl_008C6390_reloc") +DEFINE_DMA_ENTRY(ovl_008C6D80, "ovl_008C6D80") +DEFINE_DMA_ENTRY(ovl_008C6D80_reloc, "ovl_008C6D80_reloc") +DEFINE_DMA_ENTRY(ovl_008C81F0, "ovl_008C81F0") +DEFINE_DMA_ENTRY(ovl_008C81F0_reloc, "ovl_008C81F0_reloc") +DEFINE_DMA_ENTRY(ovl_008C8F10, "ovl_008C8F10") +DEFINE_DMA_ENTRY(ovl_008C8F10_reloc, "ovl_008C8F10_reloc") +DEFINE_DMA_ENTRY(ovl_008C9BB0, "ovl_008C9BB0") +DEFINE_DMA_ENTRY(ovl_008C9BB0_reloc, "ovl_008C9BB0_reloc") +DEFINE_DMA_ENTRY(ovl_008CA950, "ovl_008CA950") +DEFINE_DMA_ENTRY(ovl_008CA950_reloc, "ovl_008CA950_reloc") +DEFINE_DMA_ENTRY(ovl_008CB690, "ovl_008CB690") +DEFINE_DMA_ENTRY(ovl_008CB690_reloc, "ovl_008CB690_reloc") +DEFINE_DMA_ENTRY(ovl_008CD550, "ovl_008CD550") +DEFINE_DMA_ENTRY(ovl_008CD550_reloc, "ovl_008CD550_reloc") +DEFINE_DMA_ENTRY(ovl_008CE890, "ovl_008CE890") +DEFINE_DMA_ENTRY(ovl_008CE890_reloc, "ovl_008CE890_reloc") +DEFINE_DMA_ENTRY(ovl_008CFBA0, "ovl_008CFBA0") +DEFINE_DMA_ENTRY(ovl_008CFBA0_reloc, "ovl_008CFBA0_reloc") +DEFINE_DMA_ENTRY(ovl_008D0D20, "ovl_008D0D20") +DEFINE_DMA_ENTRY(ovl_008D0D20_reloc, "ovl_008D0D20_reloc") +DEFINE_DMA_ENTRY(ovl_008D1F00, "ovl_008D1F00") +DEFINE_DMA_ENTRY(ovl_008D1F00_reloc, "ovl_008D1F00_reloc") +DEFINE_DMA_ENTRY(ovl_008D2170, "ovl_008D2170") +DEFINE_DMA_ENTRY(ovl_008D2170_reloc, "ovl_008D2170_reloc") +DEFINE_DMA_ENTRY(ovl_008D2440, "ovl_008D2440") +DEFINE_DMA_ENTRY(ovl_008D2440_reloc, "ovl_008D2440_reloc") +DEFINE_DMA_ENTRY(ovl_008D3D00, "ovl_008D3D00") +DEFINE_DMA_ENTRY(ovl_008D3D00_reloc, "ovl_008D3D00_reloc") +DEFINE_DMA_ENTRY(ovl_008D4A20, "ovl_008D4A20") +DEFINE_DMA_ENTRY(ovl_008D4A20_reloc, "ovl_008D4A20_reloc") +DEFINE_DMA_ENTRY(ovl_008D6550, "ovl_008D6550") +DEFINE_DMA_ENTRY(ovl_008D6550_reloc, "ovl_008D6550_reloc") +DEFINE_DMA_ENTRY(ovl_008D6FC0, "ovl_008D6FC0") +DEFINE_DMA_ENTRY(ovl_008D6FC0_reloc, "ovl_008D6FC0_reloc") +DEFINE_DMA_ENTRY(ovl_008D8000, "ovl_008D8000") +DEFINE_DMA_ENTRY(ovl_008D8000_reloc, "ovl_008D8000_reloc") +DEFINE_DMA_ENTRY(ovl_008D8510, "ovl_008D8510") +DEFINE_DMA_ENTRY(ovl_008D8510_reloc, "ovl_008D8510_reloc") +DEFINE_DMA_ENTRY(ovl_008D8EC0, "ovl_008D8EC0") +DEFINE_DMA_ENTRY(ovl_008D8EC0_reloc, "ovl_008D8EC0_reloc") +DEFINE_DMA_ENTRY(ovl_008DA0C0, "ovl_008DA0C0") +DEFINE_DMA_ENTRY(ovl_008DA0C0_reloc, "ovl_008DA0C0_reloc") +DEFINE_DMA_ENTRY(ovl_008DB2A0, "ovl_008DB2A0") +DEFINE_DMA_ENTRY(ovl_008DB2A0_reloc, "ovl_008DB2A0_reloc") +DEFINE_DMA_ENTRY(ovl_008DBF00, "ovl_008DBF00") +DEFINE_DMA_ENTRY(ovl_008DBF00_reloc, "ovl_008DBF00_reloc") +DEFINE_DMA_ENTRY(ovl_008DC7D0, "ovl_008DC7D0") +DEFINE_DMA_ENTRY(ovl_008DC7D0_reloc, "ovl_008DC7D0_reloc") +DEFINE_DMA_ENTRY(ovl_008DD910, "ovl_008DD910") +DEFINE_DMA_ENTRY(ovl_008DD910_reloc, "ovl_008DD910_reloc") +DEFINE_DMA_ENTRY(ovl_008DEEC0, "ovl_008DEEC0") +DEFINE_DMA_ENTRY(ovl_008DEEC0_reloc, "ovl_008DEEC0_reloc") +DEFINE_DMA_ENTRY(ovl_008E0A30, "ovl_008E0A30") +DEFINE_DMA_ENTRY(ovl_008E0A30_reloc, "ovl_008E0A30_reloc") +DEFINE_DMA_ENTRY(ovl_008E46A0, "ovl_008E46A0") +DEFINE_DMA_ENTRY(ovl_008E46A0_reloc, "ovl_008E46A0_reloc") +DEFINE_DMA_ENTRY(ovl_008E6770, "ovl_008E6770") +DEFINE_DMA_ENTRY(ovl_008E6770_reloc, "ovl_008E6770_reloc") +DEFINE_DMA_ENTRY(ovl_008E6FD0, "ovl_008E6FD0") +DEFINE_DMA_ENTRY(ovl_008E6FD0_reloc, "ovl_008E6FD0_reloc") +DEFINE_DMA_ENTRY(ovl_008E7560, "ovl_008E7560") +DEFINE_DMA_ENTRY(ovl_008E7560_reloc, "ovl_008E7560_reloc") +DEFINE_DMA_ENTRY(ovl_008E78A0, "ovl_008E78A0") +DEFINE_DMA_ENTRY(ovl_008E78A0_reloc, "ovl_008E78A0_reloc") +DEFINE_DMA_ENTRY(ovl_008E7BF0, "ovl_008E7BF0") +DEFINE_DMA_ENTRY(ovl_008E7BF0_reloc, "ovl_008E7BF0_reloc") +DEFINE_DMA_ENTRY(ovl_008E7F30, "ovl_008E7F30") +DEFINE_DMA_ENTRY(ovl_008E7F30_reloc, "ovl_008E7F30_reloc") +DEFINE_DMA_ENTRY(ovl_008E8270, "ovl_008E8270") +DEFINE_DMA_ENTRY(ovl_008E8270_reloc, "ovl_008E8270_reloc") +DEFINE_DMA_ENTRY(ovl_008E8720, "ovl_008E8720") +DEFINE_DMA_ENTRY(ovl_008E8720_reloc, "ovl_008E8720_reloc") +DEFINE_DMA_ENTRY(ovl_008E8A60, "ovl_008E8A60") +DEFINE_DMA_ENTRY(ovl_008E8A60_reloc, "ovl_008E8A60_reloc") +DEFINE_DMA_ENTRY(ovl_008E8E20, "ovl_008E8E20") +DEFINE_DMA_ENTRY(ovl_008E8E20_reloc, "ovl_008E8E20_reloc") +DEFINE_DMA_ENTRY(ovl_008E9130, "ovl_008E9130") +DEFINE_DMA_ENTRY(ovl_008E9130_reloc, "ovl_008E9130_reloc") +DEFINE_DMA_ENTRY(ovl_008EA970, "ovl_008EA970") +DEFINE_DMA_ENTRY(ovl_008EA970_reloc, "ovl_008EA970_reloc") +DEFINE_DMA_ENTRY(ovl_008ED290, "ovl_008ED290") +DEFINE_DMA_ENTRY(ovl_008ED290_reloc, "ovl_008ED290_reloc") +DEFINE_DMA_ENTRY(ovl_008ED5C0, "ovl_008ED5C0") +DEFINE_DMA_ENTRY(ovl_008ED5C0_reloc, "ovl_008ED5C0_reloc") +DEFINE_DMA_ENTRY(ovl_008EDB70, "ovl_008EDB70") +DEFINE_DMA_ENTRY(ovl_008EDB70_reloc, "ovl_008EDB70_reloc") +DEFINE_DMA_ENTRY(ovl_008EDDB0, "ovl_008EDDB0") +DEFINE_DMA_ENTRY(ovl_008EDDB0_reloc, "ovl_008EDDB0_reloc") +DEFINE_DMA_ENTRY(ovl_008EE310, "ovl_008EE310") +DEFINE_DMA_ENTRY(ovl_008EE310_reloc, "ovl_008EE310_reloc") +DEFINE_DMA_ENTRY(ovl_008EED90, "ovl_008EED90") +DEFINE_DMA_ENTRY(ovl_008EED90_reloc, "ovl_008EED90_reloc") +DEFINE_DMA_ENTRY(ovl_008EF480, "ovl_008EF480") +DEFINE_DMA_ENTRY(ovl_008EF480_reloc, "ovl_008EF480_reloc") +DEFINE_DMA_ENTRY(ovl_008EFF50, "ovl_008EFF50") +DEFINE_DMA_ENTRY(ovl_008EFF50_reloc, "ovl_008EFF50_reloc") +DEFINE_DMA_ENTRY(ovl_008F0730, "ovl_008F0730") +DEFINE_DMA_ENTRY(ovl_008F0730_reloc, "ovl_008F0730_reloc") +DEFINE_DMA_ENTRY(ovl_008F0A80, "ovl_008F0A80") +DEFINE_DMA_ENTRY(ovl_008F0A80_reloc, "ovl_008F0A80_reloc") +DEFINE_DMA_ENTRY(ovl_008F1010, "ovl_008F1010") +DEFINE_DMA_ENTRY(ovl_008F1010_reloc, "ovl_008F1010_reloc") +DEFINE_DMA_ENTRY(ovl_008F1470, "ovl_008F1470") +DEFINE_DMA_ENTRY(ovl_008F1470_reloc, "ovl_008F1470_reloc") +DEFINE_DMA_ENTRY(ovl_008F17C0, "ovl_008F17C0") +DEFINE_DMA_ENTRY(ovl_008F17C0_reloc, "ovl_008F17C0_reloc") +DEFINE_DMA_ENTRY(ovl_008F1950, "ovl_008F1950") +DEFINE_DMA_ENTRY(ovl_008F1950_reloc, "ovl_008F1950_reloc") +DEFINE_DMA_ENTRY(ovl_008F1BF0, "ovl_008F1BF0") +DEFINE_DMA_ENTRY(ovl_008F1BF0_reloc, "ovl_008F1BF0_reloc") +DEFINE_DMA_ENTRY(ovl_008F2020, "ovl_008F2020") +DEFINE_DMA_ENTRY(ovl_008F2020_reloc, "ovl_008F2020_reloc") +DEFINE_DMA_ENTRY(ovl_008F2430, "ovl_008F2430") +DEFINE_DMA_ENTRY(ovl_008F2430_reloc, "ovl_008F2430_reloc") +DEFINE_DMA_ENTRY(ovl_008F26B0, "ovl_008F26B0") +DEFINE_DMA_ENTRY(ovl_008F26B0_reloc, "ovl_008F26B0_reloc") +DEFINE_DMA_ENTRY(ovl_008F2A50, "ovl_008F2A50") +DEFINE_DMA_ENTRY(ovl_008F2A50_reloc, "ovl_008F2A50_reloc") +DEFINE_DMA_ENTRY(ovl_008F2E40, "ovl_008F2E40") +DEFINE_DMA_ENTRY(ovl_008F2E40_reloc, "ovl_008F2E40_reloc") +DEFINE_DMA_ENTRY(ovl_008F3280, "ovl_008F3280") +DEFINE_DMA_ENTRY(ovl_008F3280_reloc, "ovl_008F3280_reloc") +DEFINE_DMA_ENTRY(ovl_008F3780, "ovl_008F3780") +DEFINE_DMA_ENTRY(ovl_008F3780_reloc, "ovl_008F3780_reloc") +DEFINE_DMA_ENTRY(ovl_008F3EC0, "ovl_008F3EC0") +DEFINE_DMA_ENTRY(ovl_008F3EC0_reloc, "ovl_008F3EC0_reloc") +DEFINE_DMA_ENTRY(ovl_008F42E0, "ovl_008F42E0") +DEFINE_DMA_ENTRY(ovl_008F42E0_reloc, "ovl_008F42E0_reloc") +DEFINE_DMA_ENTRY(ovl_008F44F0, "ovl_008F44F0") +DEFINE_DMA_ENTRY(ovl_008F44F0_reloc, "ovl_008F44F0_reloc") +DEFINE_DMA_ENTRY(ovl_008F4890, "ovl_008F4890") +DEFINE_DMA_ENTRY(ovl_008F4890_reloc, "ovl_008F4890_reloc") +DEFINE_DMA_ENTRY(ovl_008F4DC0, "ovl_008F4DC0") +DEFINE_DMA_ENTRY(ovl_008F4DC0_reloc, "ovl_008F4DC0_reloc") +DEFINE_DMA_ENTRY(ovl_008F4F90, "ovl_008F4F90") +DEFINE_DMA_ENTRY(ovl_008F4F90_reloc, "ovl_008F4F90_reloc") +DEFINE_DMA_ENTRY(ovl_008F5270, "ovl_008F5270") +DEFINE_DMA_ENTRY(ovl_008F5270_reloc, "ovl_008F5270_reloc") +DEFINE_DMA_ENTRY(ovl_008F56A0, "ovl_008F56A0") +DEFINE_DMA_ENTRY(ovl_008F56A0_reloc, "ovl_008F56A0_reloc") +DEFINE_DMA_ENTRY(ovl_008F5A80, "ovl_008F5A80") +DEFINE_DMA_ENTRY(ovl_008F5A80_reloc, "ovl_008F5A80_reloc") +DEFINE_DMA_ENTRY(ovl_008F5CD0, "ovl_008F5CD0") +DEFINE_DMA_ENTRY(ovl_008F5CD0_reloc, "ovl_008F5CD0_reloc") +DEFINE_DMA_ENTRY(ovl_008F5F70, "ovl_008F5F70") +DEFINE_DMA_ENTRY(ovl_008F5F70_reloc, "ovl_008F5F70_reloc") +DEFINE_DMA_ENTRY(ovl_008F6320, "ovl_008F6320") +DEFINE_DMA_ENTRY(ovl_008F6320_reloc, "ovl_008F6320_reloc") +DEFINE_DMA_ENTRY(ovl_008F6600, "ovl_008F6600") +DEFINE_DMA_ENTRY(ovl_008F6600_reloc, "ovl_008F6600_reloc") +DEFINE_DMA_ENTRY(ovl_008F6BE0, "ovl_008F6BE0") +DEFINE_DMA_ENTRY(ovl_008F6BE0_reloc, "ovl_008F6BE0_reloc") +DEFINE_DMA_ENTRY(ovl_008F6ED0, "ovl_008F6ED0") +DEFINE_DMA_ENTRY(ovl_008F6ED0_reloc, "ovl_008F6ED0_reloc") +DEFINE_DMA_ENTRY(ovl_008F73B0, "ovl_008F73B0") +DEFINE_DMA_ENTRY(ovl_008F73B0_reloc, "ovl_008F73B0_reloc") +DEFINE_DMA_ENTRY(ovl_008F7770, "ovl_008F7770") +DEFINE_DMA_ENTRY(ovl_008F7770_reloc, "ovl_008F7770_reloc") +DEFINE_DMA_ENTRY(ovl_008F8140, "ovl_008F8140") +DEFINE_DMA_ENTRY(ovl_008F8140_reloc, "ovl_008F8140_reloc") +DEFINE_DMA_ENTRY(ovl_008F8690, "ovl_008F8690") +DEFINE_DMA_ENTRY(ovl_008F8690_reloc, "ovl_008F8690_reloc") +DEFINE_DMA_ENTRY(ovl_008F8A80, "ovl_008F8A80") +DEFINE_DMA_ENTRY(ovl_008F8A80_reloc, "ovl_008F8A80_reloc") +DEFINE_DMA_ENTRY(ovl_008F8FE0, "ovl_008F8FE0") +DEFINE_DMA_ENTRY(ovl_008F8FE0_reloc, "ovl_008F8FE0_reloc") +DEFINE_DMA_ENTRY(ovl_008F9650, "ovl_008F9650") +DEFINE_DMA_ENTRY(ovl_008F9650_reloc, "ovl_008F9650_reloc") +DEFINE_DMA_ENTRY(ovl_008F98E0, "ovl_008F98E0") +DEFINE_DMA_ENTRY(ovl_008F98E0_reloc, "ovl_008F98E0_reloc") +DEFINE_DMA_ENTRY(ovl_008F9D20, "ovl_008F9D20") +DEFINE_DMA_ENTRY(ovl_008F9D20_reloc, "ovl_008F9D20_reloc") +DEFINE_DMA_ENTRY(ovl_008F9F00, "ovl_008F9F00") +DEFINE_DMA_ENTRY(ovl_008F9F00_reloc, "ovl_008F9F00_reloc") +DEFINE_DMA_ENTRY(ovl_008FA340, "ovl_008FA340") +DEFINE_DMA_ENTRY(ovl_008FA340_reloc, "ovl_008FA340_reloc") +DEFINE_DMA_ENTRY(ovl_008FA5E0, "ovl_008FA5E0") +DEFINE_DMA_ENTRY(ovl_008FA5E0_reloc, "ovl_008FA5E0_reloc") +DEFINE_DMA_ENTRY(ovl_008FAC50, "ovl_008FAC50") +DEFINE_DMA_ENTRY(ovl_008FAC50_reloc, "ovl_008FAC50_reloc") +DEFINE_DMA_ENTRY(ovl_008FAED0, "ovl_008FAED0") +DEFINE_DMA_ENTRY(ovl_008FAED0_reloc, "ovl_008FAED0_reloc") +DEFINE_DMA_ENTRY(ovl_008FB460, "ovl_008FB460") +DEFINE_DMA_ENTRY(ovl_008FB460_reloc, "ovl_008FB460_reloc") +DEFINE_DMA_ENTRY(ovl_008FB710, "ovl_008FB710") +DEFINE_DMA_ENTRY(ovl_008FB710_reloc, "ovl_008FB710_reloc") +DEFINE_DMA_ENTRY(ovl_008FBB90, "ovl_008FBB90") +DEFINE_DMA_ENTRY(ovl_008FBB90_reloc, "ovl_008FBB90_reloc") +DEFINE_DMA_ENTRY(ovl_008FBF70, "ovl_008FBF70") +DEFINE_DMA_ENTRY(ovl_008FBF70_reloc, "ovl_008FBF70_reloc") +DEFINE_DMA_ENTRY(ovl_008FC210, "ovl_008FC210") +DEFINE_DMA_ENTRY(ovl_008FC210_reloc, "ovl_008FC210_reloc") +DEFINE_DMA_ENTRY(ovl_008FC7E0, "ovl_008FC7E0") +DEFINE_DMA_ENTRY(ovl_008FC7E0_reloc, "ovl_008FC7E0_reloc") +DEFINE_DMA_ENTRY(ovl_008FCA20, "ovl_008FCA20") +DEFINE_DMA_ENTRY(ovl_008FCA20_reloc, "ovl_008FCA20_reloc") +DEFINE_DMA_ENTRY(ovl_008FD520, "ovl_008FD520") +DEFINE_DMA_ENTRY(ovl_008FD520_reloc, "ovl_008FD520_reloc") +DEFINE_DMA_ENTRY(ovl_008FDE10, "ovl_008FDE10") +DEFINE_DMA_ENTRY(ovl_008FDE10_reloc, "ovl_008FDE10_reloc") +DEFINE_DMA_ENTRY(ovl_008FDF90, "ovl_008FDF90") +DEFINE_DMA_ENTRY(ovl_008FDF90_reloc, "ovl_008FDF90_reloc") +DEFINE_DMA_ENTRY(ovl_008FE3E0, "ovl_008FE3E0") +DEFINE_DMA_ENTRY(ovl_008FE3E0_reloc, "ovl_008FE3E0_reloc") +DEFINE_DMA_ENTRY(ovl_008FEB60, "ovl_008FEB60") +DEFINE_DMA_ENTRY(ovl_008FEB60_reloc, "ovl_008FEB60_reloc") +DEFINE_DMA_ENTRY(ovl_008FEE80, "ovl_008FEE80") +DEFINE_DMA_ENTRY(ovl_008FEE80_reloc, "ovl_008FEE80_reloc") +DEFINE_DMA_ENTRY(ovl_008FF170, "ovl_008FF170") +DEFINE_DMA_ENTRY(ovl_008FF170_reloc, "ovl_008FF170_reloc") +DEFINE_DMA_ENTRY(ovl_008FF7C0, "ovl_008FF7C0") +DEFINE_DMA_ENTRY(ovl_008FF7C0_reloc, "ovl_008FF7C0_reloc") +DEFINE_DMA_ENTRY(ovl_008FFC90, "ovl_008FFC90") +DEFINE_DMA_ENTRY(ovl_008FFC90_reloc, "ovl_008FFC90_reloc") +DEFINE_DMA_ENTRY(ovl_00900530, "ovl_00900530") +DEFINE_DMA_ENTRY(ovl_00900530_reloc, "ovl_00900530_reloc") +DEFINE_DMA_ENTRY(ovl_00900CD0, "ovl_00900CD0") +DEFINE_DMA_ENTRY(ovl_00900CD0_reloc, "ovl_00900CD0_reloc") +DEFINE_DMA_ENTRY(ovl_009015C0, "ovl_009015C0") +DEFINE_DMA_ENTRY(ovl_009015C0_reloc, "ovl_009015C0_reloc") +DEFINE_DMA_ENTRY(ovl_00901D60, "ovl_00901D60") +DEFINE_DMA_ENTRY(ovl_00901D60_reloc, "ovl_00901D60_reloc") +DEFINE_DMA_ENTRY(ovl_00902120, "ovl_00902120") +DEFINE_DMA_ENTRY(ovl_00902120_reloc, "ovl_00902120_reloc") +DEFINE_DMA_ENTRY(ovl_00902810, "ovl_00902810") +DEFINE_DMA_ENTRY(ovl_00902810_reloc, "ovl_00902810_reloc") +DEFINE_DMA_ENTRY(ovl_00902C40, "ovl_00902C40") +DEFINE_DMA_ENTRY(ovl_00902C40_reloc, "ovl_00902C40_reloc") +DEFINE_DMA_ENTRY(ovl_009031F0, "ovl_009031F0") +DEFINE_DMA_ENTRY(ovl_009031F0_reloc, "ovl_009031F0_reloc") +DEFINE_DMA_ENTRY(ovl_00903460, "ovl_00903460") +DEFINE_DMA_ENTRY(ovl_00903460_reloc, "ovl_00903460_reloc") +DEFINE_DMA_ENTRY(ovl_00903B90, "ovl_00903B90") +DEFINE_DMA_ENTRY(ovl_00903B90_reloc, "ovl_00903B90_reloc") +DEFINE_DMA_ENTRY(ovl_00903BD0, "ovl_00903BD0") +DEFINE_DMA_ENTRY(ovl_00903BD0_reloc, "ovl_00903BD0_reloc") +DEFINE_DMA_ENTRY(ovl_00904330, "ovl_00904330") +DEFINE_DMA_ENTRY(ovl_00904330_reloc, "ovl_00904330_reloc") +DEFINE_DMA_ENTRY(ovl_00904AB0, "ovl_00904AB0") +DEFINE_DMA_ENTRY(ovl_00904AB0_reloc, "ovl_00904AB0_reloc") +DEFINE_DMA_ENTRY(ovl_00905280, "ovl_00905280") +DEFINE_DMA_ENTRY(ovl_00905280_reloc, "ovl_00905280_reloc") +DEFINE_DMA_ENTRY(ovl_00905A30, "ovl_00905A30") +DEFINE_DMA_ENTRY(ovl_00905A30_reloc, "ovl_00905A30_reloc") +DEFINE_DMA_ENTRY(ovl_00906060, "ovl_00906060") +DEFINE_DMA_ENTRY(ovl_00906060_reloc, "ovl_00906060_reloc") +DEFINE_DMA_ENTRY(ovl_00906220, "ovl_00906220") +DEFINE_DMA_ENTRY(ovl_00906220_reloc, "ovl_00906220_reloc") +DEFINE_DMA_ENTRY(ovl_00906290, "ovl_00906290") +DEFINE_DMA_ENTRY(ovl_00906290_reloc, "ovl_00906290_reloc") +DEFINE_DMA_ENTRY(ovl_00906300, "ovl_00906300") +DEFINE_DMA_ENTRY(ovl_00906300_reloc, "ovl_00906300_reloc") +DEFINE_DMA_ENTRY(ovl_00906370, "ovl_00906370") +DEFINE_DMA_ENTRY(ovl_00906370_reloc, "ovl_00906370_reloc") +DEFINE_DMA_ENTRY(ovl_009063E0, "ovl_009063E0") +DEFINE_DMA_ENTRY(ovl_009063E0_reloc, "ovl_009063E0_reloc") +DEFINE_DMA_ENTRY(ovl_00906450, "ovl_00906450") +DEFINE_DMA_ENTRY(ovl_00906450_reloc, "ovl_00906450_reloc") +DEFINE_DMA_ENTRY(ovl_009064C0, "ovl_009064C0") +DEFINE_DMA_ENTRY(ovl_009064C0_reloc, "ovl_009064C0_reloc") +DEFINE_DMA_ENTRY(ovl_00906530, "ovl_00906530") +DEFINE_DMA_ENTRY(ovl_00906530_reloc, "ovl_00906530_reloc") +DEFINE_DMA_ENTRY(ovl_009065A0, "ovl_009065A0") +DEFINE_DMA_ENTRY(ovl_009065A0_reloc, "ovl_009065A0_reloc") +DEFINE_DMA_ENTRY(ovl_00906610, "ovl_00906610") +DEFINE_DMA_ENTRY(ovl_00906610_reloc, "ovl_00906610_reloc") +DEFINE_DMA_ENTRY(ovl_00906680, "ovl_00906680") +DEFINE_DMA_ENTRY(ovl_00906680_reloc, "ovl_00906680_reloc") +DEFINE_DMA_ENTRY(ovl_009066F0, "ovl_009066F0") +DEFINE_DMA_ENTRY(ovl_009066F0_reloc, "ovl_009066F0_reloc") +DEFINE_DMA_ENTRY(ovl_00906B80, "ovl_00906B80") +DEFINE_DMA_ENTRY(ovl_00906B80_reloc, "ovl_00906B80_reloc") +DEFINE_DMA_ENTRY(ovl_00906F10, "ovl_00906F10") +DEFINE_DMA_ENTRY(ovl_00906F10_reloc, "ovl_00906F10_reloc") +DEFINE_DMA_ENTRY(ovl_00906F80, "ovl_00906F80") +DEFINE_DMA_ENTRY(ovl_00906F80_reloc, "ovl_00906F80_reloc") +DEFINE_DMA_ENTRY(ovl_00906FF0, "ovl_00906FF0") +DEFINE_DMA_ENTRY(ovl_00906FF0_reloc, "ovl_00906FF0_reloc") +DEFINE_DMA_ENTRY(ovl_00907060, "ovl_00907060") +DEFINE_DMA_ENTRY(ovl_00907060_reloc, "ovl_00907060_reloc") +DEFINE_DMA_ENTRY(ovl_009070D0, "ovl_009070D0") +DEFINE_DMA_ENTRY(ovl_009070D0_reloc, "ovl_009070D0_reloc") +DEFINE_DMA_ENTRY(ovl_00907140, "ovl_00907140") +DEFINE_DMA_ENTRY(ovl_00907140_reloc, "ovl_00907140_reloc") +DEFINE_DMA_ENTRY(ovl_009071B0, "ovl_009071B0") +DEFINE_DMA_ENTRY(ovl_009071B0_reloc, "ovl_009071B0_reloc") +DEFINE_DMA_ENTRY(ovl_00907640, "ovl_00907640") +DEFINE_DMA_ENTRY(ovl_00907640_reloc, "ovl_00907640_reloc") +DEFINE_DMA_ENTRY(ovl_009076B0, "ovl_009076B0") +DEFINE_DMA_ENTRY(ovl_009076B0_reloc, "ovl_009076B0_reloc") +DEFINE_DMA_ENTRY(ovl_00907720, "ovl_00907720") +DEFINE_DMA_ENTRY(ovl_00907720_reloc, "ovl_00907720_reloc") +DEFINE_DMA_ENTRY(ovl_00907790, "ovl_00907790") +DEFINE_DMA_ENTRY(ovl_00907790_reloc, "ovl_00907790_reloc") +DEFINE_DMA_ENTRY(ovl_00907B20, "ovl_00907B20") +DEFINE_DMA_ENTRY(ovl_00907B20_reloc, "ovl_00907B20_reloc") +DEFINE_DMA_ENTRY(ovl_00907B90, "ovl_00907B90") +DEFINE_DMA_ENTRY(ovl_00907B90_reloc, "ovl_00907B90_reloc") +DEFINE_DMA_ENTRY(ovl_00907C00, "ovl_00907C00") +DEFINE_DMA_ENTRY(ovl_00907C00_reloc, "ovl_00907C00_reloc") +DEFINE_DMA_ENTRY(ovl_00907C70, "ovl_00907C70") +DEFINE_DMA_ENTRY(ovl_00907C70_reloc, "ovl_00907C70_reloc") +DEFINE_DMA_ENTRY(ovl_00907CE0, "ovl_00907CE0") +DEFINE_DMA_ENTRY(ovl_00907CE0_reloc, "ovl_00907CE0_reloc") +DEFINE_DMA_ENTRY(ovl_00907D50, "ovl_00907D50") +DEFINE_DMA_ENTRY(ovl_00907D50_reloc, "ovl_00907D50_reloc") +DEFINE_DMA_ENTRY(ovl_00907DC0, "ovl_00907DC0") +DEFINE_DMA_ENTRY(ovl_00907DC0_reloc, "ovl_00907DC0_reloc") +DEFINE_DMA_ENTRY(ovl_00907E30, "ovl_00907E30") +DEFINE_DMA_ENTRY(ovl_00907E30_reloc, "ovl_00907E30_reloc") +DEFINE_DMA_ENTRY(ovl_00907EA0, "ovl_00907EA0") +DEFINE_DMA_ENTRY(ovl_00907EA0_reloc, "ovl_00907EA0_reloc") +DEFINE_DMA_ENTRY(ovl_00907F10, "ovl_00907F10") +DEFINE_DMA_ENTRY(ovl_00907F10_reloc, "ovl_00907F10_reloc") +DEFINE_DMA_ENTRY(ovl_00908020, "ovl_00908020") +DEFINE_DMA_ENTRY(ovl_00908020_reloc, "ovl_00908020_reloc") +DEFINE_DMA_ENTRY(ovl_00908130, "ovl_00908130") +DEFINE_DMA_ENTRY(ovl_00908130_reloc, "ovl_00908130_reloc") +DEFINE_DMA_ENTRY(ovl_00908240, "ovl_00908240") +DEFINE_DMA_ENTRY(ovl_00908240_reloc, "ovl_00908240_reloc") +DEFINE_DMA_ENTRY(ovl_00908350, "ovl_00908350") +DEFINE_DMA_ENTRY(ovl_00908350_reloc, "ovl_00908350_reloc") +DEFINE_DMA_ENTRY(ovl_009083C0, "ovl_009083C0") +DEFINE_DMA_ENTRY(ovl_009083C0_reloc, "ovl_009083C0_reloc") +DEFINE_DMA_ENTRY(ovl_00908430, "ovl_00908430") +DEFINE_DMA_ENTRY(ovl_00908430_reloc, "ovl_00908430_reloc") +DEFINE_DMA_ENTRY(ovl_009084A0, "ovl_009084A0") +DEFINE_DMA_ENTRY(ovl_009084A0_reloc, "ovl_009084A0_reloc") +DEFINE_DMA_ENTRY(ovl_00908510, "ovl_00908510") +DEFINE_DMA_ENTRY(ovl_00908510_reloc, "ovl_00908510_reloc") +DEFINE_DMA_ENTRY(ovl_00908580, "ovl_00908580") +DEFINE_DMA_ENTRY(ovl_00908580_reloc, "ovl_00908580_reloc") +DEFINE_DMA_ENTRY(ovl_00908910, "ovl_00908910") +DEFINE_DMA_ENTRY(ovl_00908910_reloc, "ovl_00908910_reloc") +DEFINE_DMA_ENTRY(ovl_00908980, "ovl_00908980") +DEFINE_DMA_ENTRY(ovl_00908980_reloc, "ovl_00908980_reloc") +DEFINE_DMA_ENTRY(ovl_009089F0, "ovl_009089F0") +DEFINE_DMA_ENTRY(ovl_009089F0_reloc, "ovl_009089F0_reloc") +DEFINE_DMA_ENTRY(ovl_00908A60, "ovl_00908A60") +DEFINE_DMA_ENTRY(ovl_00908A60_reloc, "ovl_00908A60_reloc") +DEFINE_DMA_ENTRY(ovl_00908AD0, "ovl_00908AD0") +DEFINE_DMA_ENTRY(ovl_00908AD0_reloc, "ovl_00908AD0_reloc") +DEFINE_DMA_ENTRY(ovl_00908B40, "ovl_00908B40") +DEFINE_DMA_ENTRY(ovl_00908B40_reloc, "ovl_00908B40_reloc") +DEFINE_DMA_ENTRY(ovl_00908BB0, "ovl_00908BB0") +DEFINE_DMA_ENTRY(ovl_00908BB0_reloc, "ovl_00908BB0_reloc") +DEFINE_DMA_ENTRY(ovl_00908C20, "ovl_00908C20") +DEFINE_DMA_ENTRY(ovl_00908C20_reloc, "ovl_00908C20_reloc") +DEFINE_DMA_ENTRY(ovl_00908C90, "ovl_00908C90") +DEFINE_DMA_ENTRY(ovl_00908C90_reloc, "ovl_00908C90_reloc") +DEFINE_DMA_ENTRY(ovl_00908D00, "ovl_00908D00") +DEFINE_DMA_ENTRY(ovl_00908D00_reloc, "ovl_00908D00_reloc") +DEFINE_DMA_ENTRY(ovl_00908D70, "ovl_00908D70") +DEFINE_DMA_ENTRY(ovl_00908D70_reloc, "ovl_00908D70_reloc") +DEFINE_DMA_ENTRY(ovl_00908DE0, "ovl_00908DE0") +DEFINE_DMA_ENTRY(ovl_00908DE0_reloc, "ovl_00908DE0_reloc") +DEFINE_DMA_ENTRY(ovl_00908E50, "ovl_00908E50") +DEFINE_DMA_ENTRY(ovl_00908E50_reloc, "ovl_00908E50_reloc") +DEFINE_DMA_ENTRY(ovl_00908EC0, "ovl_00908EC0") +DEFINE_DMA_ENTRY(ovl_00908EC0_reloc, "ovl_00908EC0_reloc") +DEFINE_DMA_ENTRY(ovl_00908F30, "ovl_00908F30") +DEFINE_DMA_ENTRY(ovl_00908F30_reloc, "ovl_00908F30_reloc") +DEFINE_DMA_ENTRY(ovl_00909410, "ovl_00909410") +DEFINE_DMA_ENTRY(ovl_00909410_reloc, "ovl_00909410_reloc") +DEFINE_DMA_ENTRY(ovl_00909480, "ovl_00909480") +DEFINE_DMA_ENTRY(ovl_00909480_reloc, "ovl_00909480_reloc") +DEFINE_DMA_ENTRY(ovl_009094F0, "ovl_009094F0") +DEFINE_DMA_ENTRY(ovl_009094F0_reloc, "ovl_009094F0_reloc") +DEFINE_DMA_ENTRY(ovl_00909560, "ovl_00909560") +DEFINE_DMA_ENTRY(ovl_00909560_reloc, "ovl_00909560_reloc") +DEFINE_DMA_ENTRY(ovl_009095D0, "ovl_009095D0") +DEFINE_DMA_ENTRY(ovl_009095D0_reloc, "ovl_009095D0_reloc") +DEFINE_DMA_ENTRY(ovl_009096E0, "ovl_009096E0") +DEFINE_DMA_ENTRY(ovl_009096E0_reloc, "ovl_009096E0_reloc") +DEFINE_DMA_ENTRY(ovl_009097F0, "ovl_009097F0") +DEFINE_DMA_ENTRY(ovl_009097F0_reloc, "ovl_009097F0_reloc") +DEFINE_DMA_ENTRY(ovl_00909900, "ovl_00909900") +DEFINE_DMA_ENTRY(ovl_00909900_reloc, "ovl_00909900_reloc") +DEFINE_DMA_ENTRY(ovl_00909970, "ovl_00909970") +DEFINE_DMA_ENTRY(ovl_00909970_reloc, "ovl_00909970_reloc") +DEFINE_DMA_ENTRY(ovl_009099E0, "ovl_009099E0") +DEFINE_DMA_ENTRY(ovl_009099E0_reloc, "ovl_009099E0_reloc") +DEFINE_DMA_ENTRY(ovl_00909A50, "ovl_00909A50") +DEFINE_DMA_ENTRY(ovl_00909A50_reloc, "ovl_00909A50_reloc") +DEFINE_DMA_ENTRY(ovl_00909B60, "ovl_00909B60") +DEFINE_DMA_ENTRY(ovl_00909B60_reloc, "ovl_00909B60_reloc") +DEFINE_DMA_ENTRY(ovl_00909EF0, "ovl_00909EF0") +DEFINE_DMA_ENTRY(ovl_00909EF0_reloc, "ovl_00909EF0_reloc") +DEFINE_DMA_ENTRY(ovl_00909F60, "ovl_00909F60") +DEFINE_DMA_ENTRY(ovl_00909F60_reloc, "ovl_00909F60_reloc") +DEFINE_DMA_ENTRY(ovl_00909FD0, "ovl_00909FD0") +DEFINE_DMA_ENTRY(ovl_00909FD0_reloc, "ovl_00909FD0_reloc") +DEFINE_DMA_ENTRY(ovl_0090A040, "ovl_0090A040") +DEFINE_DMA_ENTRY(ovl_0090A040_reloc, "ovl_0090A040_reloc") +DEFINE_DMA_ENTRY(ovl_0090A3D0, "ovl_0090A3D0") +DEFINE_DMA_ENTRY(ovl_0090A3D0_reloc, "ovl_0090A3D0_reloc") +DEFINE_DMA_ENTRY(ovl_0090A440, "ovl_0090A440") +DEFINE_DMA_ENTRY(ovl_0090A440_reloc, "ovl_0090A440_reloc") +DEFINE_DMA_ENTRY(ovl_0090A4B0, "ovl_0090A4B0") +DEFINE_DMA_ENTRY(ovl_0090A4B0_reloc, "ovl_0090A4B0_reloc") +DEFINE_DMA_ENTRY(ovl_0090A520, "ovl_0090A520") +DEFINE_DMA_ENTRY(ovl_0090A520_reloc, "ovl_0090A520_reloc") +DEFINE_DMA_ENTRY(ovl_0090ADB0, "ovl_0090ADB0") +DEFINE_DMA_ENTRY(ovl_0090ADB0_reloc, "ovl_0090ADB0_reloc") +DEFINE_DMA_ENTRY(ovl_0090AE20, "ovl_0090AE20") +DEFINE_DMA_ENTRY(ovl_0090AE20_reloc, "ovl_0090AE20_reloc") +DEFINE_DMA_ENTRY(ovl_0090B1B0, "ovl_0090B1B0") +DEFINE_DMA_ENTRY(ovl_0090B1B0_reloc, "ovl_0090B1B0_reloc") +DEFINE_DMA_ENTRY(ovl_0090B220, "ovl_0090B220") +DEFINE_DMA_ENTRY(ovl_0090B220_reloc, "ovl_0090B220_reloc") +DEFINE_DMA_ENTRY(ovl_0090B290, "ovl_0090B290") +DEFINE_DMA_ENTRY(ovl_0090B290_reloc, "ovl_0090B290_reloc") +DEFINE_DMA_ENTRY(ovl_0090B300, "ovl_0090B300") +DEFINE_DMA_ENTRY(ovl_0090B300_reloc, "ovl_0090B300_reloc") +DEFINE_DMA_ENTRY(ovl_0090B370, "ovl_0090B370") +DEFINE_DMA_ENTRY(ovl_0090B370_reloc, "ovl_0090B370_reloc") +DEFINE_DMA_ENTRY(ovl_0090B3E0, "ovl_0090B3E0") +DEFINE_DMA_ENTRY(ovl_0090B3E0_reloc, "ovl_0090B3E0_reloc") +DEFINE_DMA_ENTRY(ovl_0090B450, "ovl_0090B450") +DEFINE_DMA_ENTRY(ovl_0090B450_reloc, "ovl_0090B450_reloc") +DEFINE_DMA_ENTRY(ovl_0090B4C0, "ovl_0090B4C0") +DEFINE_DMA_ENTRY(ovl_0090B4C0_reloc, "ovl_0090B4C0_reloc") +DEFINE_DMA_ENTRY(ovl_0090B530, "ovl_0090B530") +DEFINE_DMA_ENTRY(ovl_0090B530_reloc, "ovl_0090B530_reloc") +DEFINE_DMA_ENTRY(ovl_0090B5A0, "ovl_0090B5A0") +DEFINE_DMA_ENTRY(ovl_0090B5A0_reloc, "ovl_0090B5A0_reloc") +DEFINE_DMA_ENTRY(ovl_0090B610, "ovl_0090B610") +DEFINE_DMA_ENTRY(ovl_0090B610_reloc, "ovl_0090B610_reloc") +DEFINE_DMA_ENTRY(ovl_0090B9A0, "ovl_0090B9A0") +DEFINE_DMA_ENTRY(ovl_0090B9A0_reloc, "ovl_0090B9A0_reloc") +DEFINE_DMA_ENTRY(ovl_0090BA10, "ovl_0090BA10") +DEFINE_DMA_ENTRY(ovl_0090BA10_reloc, "ovl_0090BA10_reloc") +DEFINE_DMA_ENTRY(ovl_0090BA80, "ovl_0090BA80") +DEFINE_DMA_ENTRY(ovl_0090BA80_reloc, "ovl_0090BA80_reloc") +DEFINE_DMA_ENTRY(ovl_0090BAF0, "ovl_0090BAF0") +DEFINE_DMA_ENTRY(ovl_0090BAF0_reloc, "ovl_0090BAF0_reloc") +DEFINE_DMA_ENTRY(ovl_0090BB60, "ovl_0090BB60") +DEFINE_DMA_ENTRY(ovl_0090BB60_reloc, "ovl_0090BB60_reloc") +DEFINE_DMA_ENTRY(ovl_0090BC70, "ovl_0090BC70") +DEFINE_DMA_ENTRY(ovl_0090BC70_reloc, "ovl_0090BC70_reloc") +DEFINE_DMA_ENTRY(ovl_0090BCE0, "ovl_0090BCE0") +DEFINE_DMA_ENTRY(ovl_0090BCE0_reloc, "ovl_0090BCE0_reloc") +DEFINE_DMA_ENTRY(ovl_0090C070, "ovl_0090C070") +DEFINE_DMA_ENTRY(ovl_0090C070_reloc, "ovl_0090C070_reloc") +DEFINE_DMA_ENTRY(ovl_0090C0E0, "ovl_0090C0E0") +DEFINE_DMA_ENTRY(ovl_0090C0E0_reloc, "ovl_0090C0E0_reloc") +DEFINE_DMA_ENTRY(ovl_0090C280, "ovl_0090C280") +DEFINE_DMA_ENTRY(ovl_0090C280_reloc, "ovl_0090C280_reloc") +DEFINE_DMA_ENTRY(ovl_0090C360, "ovl_0090C360") +DEFINE_DMA_ENTRY(ovl_0090C360_reloc, "ovl_0090C360_reloc") +DEFINE_DMA_ENTRY(ovl_0090C470, "ovl_0090C470") +DEFINE_DMA_ENTRY(ovl_0090C470_reloc, "ovl_0090C470_reloc") +DEFINE_DMA_ENTRY(ovl_0090C580, "ovl_0090C580") +DEFINE_DMA_ENTRY(ovl_0090C580_reloc, "ovl_0090C580_reloc") +DEFINE_DMA_ENTRY(ovl_0090C690, "ovl_0090C690") +DEFINE_DMA_ENTRY(ovl_0090C690_reloc, "ovl_0090C690_reloc") +DEFINE_DMA_ENTRY(ovl_0090C700, "ovl_0090C700") +DEFINE_DMA_ENTRY(ovl_0090C700_reloc, "ovl_0090C700_reloc") +DEFINE_DMA_ENTRY(ovl_0090C770, "ovl_0090C770") +DEFINE_DMA_ENTRY(ovl_0090C770_reloc, "ovl_0090C770_reloc") +DEFINE_DMA_ENTRY(ovl_0090C7E0, "ovl_0090C7E0") +DEFINE_DMA_ENTRY(ovl_0090C7E0_reloc, "ovl_0090C7E0_reloc") +DEFINE_DMA_ENTRY(ovl_0090C850, "ovl_0090C850") +DEFINE_DMA_ENTRY(ovl_0090C850_reloc, "ovl_0090C850_reloc") +DEFINE_DMA_ENTRY(ovl_0090C960, "ovl_0090C960") +DEFINE_DMA_ENTRY(ovl_0090C960_reloc, "ovl_0090C960_reloc") +DEFINE_DMA_ENTRY(ovl_0090C9D0, "ovl_0090C9D0") +DEFINE_DMA_ENTRY(ovl_0090C9D0_reloc, "ovl_0090C9D0_reloc") +DEFINE_DMA_ENTRY(ovl_0090CAE0, "ovl_0090CAE0") +DEFINE_DMA_ENTRY(ovl_0090CAE0_reloc, "ovl_0090CAE0_reloc") +DEFINE_DMA_ENTRY(ovl_0090CEA0, "ovl_0090CEA0") +DEFINE_DMA_ENTRY(ovl_0090CEA0_reloc, "ovl_0090CEA0_reloc") +DEFINE_DMA_ENTRY(ovl_0090CFB0, "ovl_0090CFB0") +DEFINE_DMA_ENTRY(ovl_0090CFB0_reloc, "ovl_0090CFB0_reloc") +DEFINE_DMA_ENTRY(ovl_0090D480, "ovl_0090D480") +DEFINE_DMA_ENTRY(ovl_0090D480_reloc, "ovl_0090D480_reloc") +DEFINE_DMA_ENTRY(ovl_0090D4F0, "ovl_0090D4F0") +DEFINE_DMA_ENTRY(ovl_0090D4F0_reloc, "ovl_0090D4F0_reloc") +DEFINE_DMA_ENTRY(ovl_0090D560, "ovl_0090D560") +DEFINE_DMA_ENTRY(ovl_0090D560_reloc, "ovl_0090D560_reloc") +DEFINE_DMA_ENTRY(ovl_0090D5D0, "ovl_0090D5D0") +DEFINE_DMA_ENTRY(ovl_0090D5D0_reloc, "ovl_0090D5D0_reloc") +DEFINE_DMA_ENTRY(ovl_0090D640, "ovl_0090D640") +DEFINE_DMA_ENTRY(ovl_0090D640_reloc, "ovl_0090D640_reloc") +DEFINE_DMA_ENTRY(ovl_0090D6B0, "ovl_0090D6B0") +DEFINE_DMA_ENTRY(ovl_0090D6B0_reloc, "ovl_0090D6B0_reloc") +DEFINE_DMA_ENTRY(ovl_0090D720, "ovl_0090D720") +DEFINE_DMA_ENTRY(ovl_0090D720_reloc, "ovl_0090D720_reloc") +DEFINE_DMA_ENTRY(ovl_0090DBA0, "ovl_0090DBA0") +DEFINE_DMA_ENTRY(ovl_0090DBA0_reloc, "ovl_0090DBA0_reloc") +DEFINE_DMA_ENTRY(ovl_0090DC10, "ovl_0090DC10") +DEFINE_DMA_ENTRY(ovl_0090DC10_reloc, "ovl_0090DC10_reloc") +DEFINE_DMA_ENTRY(ovl_0090DC80, "ovl_0090DC80") +DEFINE_DMA_ENTRY(ovl_0090DC80_reloc, "ovl_0090DC80_reloc") +DEFINE_DMA_ENTRY(ovl_0090DCF0, "ovl_0090DCF0") +DEFINE_DMA_ENTRY(ovl_0090DCF0_reloc, "ovl_0090DCF0_reloc") +DEFINE_DMA_ENTRY(ovl_0090DD60, "ovl_0090DD60") +DEFINE_DMA_ENTRY(ovl_0090DD60_reloc, "ovl_0090DD60_reloc") +DEFINE_DMA_ENTRY(ovl_0090DDD0, "ovl_0090DDD0") +DEFINE_DMA_ENTRY(ovl_0090DDD0_reloc, "ovl_0090DDD0_reloc") +DEFINE_DMA_ENTRY(ovl_0090DE40, "ovl_0090DE40") +DEFINE_DMA_ENTRY(ovl_0090DE40_reloc, "ovl_0090DE40_reloc") +DEFINE_DMA_ENTRY(ovl_0090DEB0, "ovl_0090DEB0") +DEFINE_DMA_ENTRY(ovl_0090DEB0_reloc, "ovl_0090DEB0_reloc") +DEFINE_DMA_ENTRY(ovl_0090DF20, "ovl_0090DF20") +DEFINE_DMA_ENTRY(ovl_0090DF20_reloc, "ovl_0090DF20_reloc") +DEFINE_DMA_ENTRY(ovl_0090DF90, "ovl_0090DF90") +DEFINE_DMA_ENTRY(ovl_0090DF90_reloc, "ovl_0090DF90_reloc") +DEFINE_DMA_ENTRY(ovl_0090E000, "ovl_0090E000") +DEFINE_DMA_ENTRY(ovl_0090E000_reloc, "ovl_0090E000_reloc") +DEFINE_DMA_ENTRY(ovl_0090E070, "ovl_0090E070") +DEFINE_DMA_ENTRY(ovl_0090E070_reloc, "ovl_0090E070_reloc") +DEFINE_DMA_ENTRY(ovl_0090E0E0, "ovl_0090E0E0") +DEFINE_DMA_ENTRY(ovl_0090E0E0_reloc, "ovl_0090E0E0_reloc") +DEFINE_DMA_ENTRY(ovl_0090E150, "ovl_0090E150") +DEFINE_DMA_ENTRY(ovl_0090E150_reloc, "ovl_0090E150_reloc") +DEFINE_DMA_ENTRY(ovl_0090E1C0, "ovl_0090E1C0") +DEFINE_DMA_ENTRY(ovl_0090E1C0_reloc, "ovl_0090E1C0_reloc") +DEFINE_DMA_ENTRY(ovl_0090E230, "ovl_0090E230") +DEFINE_DMA_ENTRY(ovl_0090E230_reloc, "ovl_0090E230_reloc") +DEFINE_DMA_ENTRY(ovl_0090E2A0, "ovl_0090E2A0") +DEFINE_DMA_ENTRY(ovl_0090E2A0_reloc, "ovl_0090E2A0_reloc") +DEFINE_DMA_ENTRY(ovl_0090E310, "ovl_0090E310") +DEFINE_DMA_ENTRY(ovl_0090E310_reloc, "ovl_0090E310_reloc") +DEFINE_DMA_ENTRY(ovl_0090E380, "ovl_0090E380") +DEFINE_DMA_ENTRY(ovl_0090E380_reloc, "ovl_0090E380_reloc") +DEFINE_DMA_ENTRY(ovl_0090E3F0, "ovl_0090E3F0") +DEFINE_DMA_ENTRY(ovl_0090E3F0_reloc, "ovl_0090E3F0_reloc") +DEFINE_DMA_ENTRY(ovl_0090E460, "ovl_0090E460") +DEFINE_DMA_ENTRY(ovl_0090E460_reloc, "ovl_0090E460_reloc") +DEFINE_DMA_ENTRY(ovl_0090E880, "ovl_0090E880") +DEFINE_DMA_ENTRY(ovl_0090E880_reloc, "ovl_0090E880_reloc") +DEFINE_DMA_ENTRY(ovl_0090E8F0, "ovl_0090E8F0") +DEFINE_DMA_ENTRY(ovl_0090E8F0_reloc, "ovl_0090E8F0_reloc") +DEFINE_DMA_ENTRY(ovl_0090E960, "ovl_0090E960") +DEFINE_DMA_ENTRY(ovl_0090E960_reloc, "ovl_0090E960_reloc") +DEFINE_DMA_ENTRY(ovl_0090E9D0, "ovl_0090E9D0") +DEFINE_DMA_ENTRY(ovl_0090E9D0_reloc, "ovl_0090E9D0_reloc") +DEFINE_DMA_ENTRY(ovl_0090EA40, "ovl_0090EA40") +DEFINE_DMA_ENTRY(ovl_0090EA40_reloc, "ovl_0090EA40_reloc") +DEFINE_DMA_ENTRY(ovl_0090EAB0, "ovl_0090EAB0") +DEFINE_DMA_ENTRY(ovl_0090EAB0_reloc, "ovl_0090EAB0_reloc") +DEFINE_DMA_ENTRY(ovl_0090EB20, "ovl_0090EB20") +DEFINE_DMA_ENTRY(ovl_0090EB20_reloc, "ovl_0090EB20_reloc") +DEFINE_DMA_ENTRY(ovl_0090EB90, "ovl_0090EB90") +DEFINE_DMA_ENTRY(ovl_0090EB90_reloc, "ovl_0090EB90_reloc") +DEFINE_DMA_ENTRY(ovl_0090EC00, "ovl_0090EC00") +DEFINE_DMA_ENTRY(ovl_0090EC00_reloc, "ovl_0090EC00_reloc") +DEFINE_DMA_ENTRY(ovl_0090EC70, "ovl_0090EC70") +DEFINE_DMA_ENTRY(ovl_0090EC70_reloc, "ovl_0090EC70_reloc") +DEFINE_DMA_ENTRY(ovl_0090ECE0, "ovl_0090ECE0") +DEFINE_DMA_ENTRY(ovl_0090ECE0_reloc, "ovl_0090ECE0_reloc") +DEFINE_DMA_ENTRY(ovl_0090ED50, "ovl_0090ED50") +DEFINE_DMA_ENTRY(ovl_0090ED50_reloc, "ovl_0090ED50_reloc") +DEFINE_DMA_ENTRY(ovl_0090EDC0, "ovl_0090EDC0") +DEFINE_DMA_ENTRY(ovl_0090EDC0_reloc, "ovl_0090EDC0_reloc") +DEFINE_DMA_ENTRY(ovl_0090EE30, "ovl_0090EE30") +DEFINE_DMA_ENTRY(ovl_0090EE30_reloc, "ovl_0090EE30_reloc") +DEFINE_DMA_ENTRY(ovl_0090EEA0, "ovl_0090EEA0") +DEFINE_DMA_ENTRY(ovl_0090EEA0_reloc, "ovl_0090EEA0_reloc") +DEFINE_DMA_ENTRY(ovl_0090EF10, "ovl_0090EF10") +DEFINE_DMA_ENTRY(ovl_0090EF10_reloc, "ovl_0090EF10_reloc") +DEFINE_DMA_ENTRY(ovl_0090EF80, "ovl_0090EF80") +DEFINE_DMA_ENTRY(ovl_0090EF80_reloc, "ovl_0090EF80_reloc") +DEFINE_DMA_ENTRY(ovl_0090EFF0, "ovl_0090EFF0") +DEFINE_DMA_ENTRY(ovl_0090EFF0_reloc, "ovl_0090EFF0_reloc") +DEFINE_DMA_ENTRY(ovl_0090F060, "ovl_0090F060") +DEFINE_DMA_ENTRY(ovl_0090F060_reloc, "ovl_0090F060_reloc") +DEFINE_DMA_ENTRY(ovl_0090F0D0, "ovl_0090F0D0") +DEFINE_DMA_ENTRY(ovl_0090F0D0_reloc, "ovl_0090F0D0_reloc") +DEFINE_DMA_ENTRY(ovl_0090F140, "ovl_0090F140") +DEFINE_DMA_ENTRY(ovl_0090F140_reloc, "ovl_0090F140_reloc") +DEFINE_DMA_ENTRY(ovl_0090F1B0, "ovl_0090F1B0") +DEFINE_DMA_ENTRY(ovl_0090F1B0_reloc, "ovl_0090F1B0_reloc") +DEFINE_DMA_ENTRY(ovl_0090F220, "ovl_0090F220") +DEFINE_DMA_ENTRY(ovl_0090F220_reloc, "ovl_0090F220_reloc") +DEFINE_DMA_ENTRY(ovl_0090F300, "ovl_0090F300") +DEFINE_DMA_ENTRY(ovl_0090F300_reloc, "ovl_0090F300_reloc") +DEFINE_DMA_ENTRY(ovl_0090F370, "ovl_0090F370") +DEFINE_DMA_ENTRY(ovl_0090F370_reloc, "ovl_0090F370_reloc") +DEFINE_DMA_ENTRY(ovl_0090F3E0, "ovl_0090F3E0") +DEFINE_DMA_ENTRY(ovl_0090F3E0_reloc, "ovl_0090F3E0_reloc") +DEFINE_DMA_ENTRY(ovl_0090F450, "ovl_0090F450") +DEFINE_DMA_ENTRY(ovl_0090F450_reloc, "ovl_0090F450_reloc") +DEFINE_DMA_ENTRY(ovl_0090F4C0, "ovl_0090F4C0") +DEFINE_DMA_ENTRY(ovl_0090F4C0_reloc, "ovl_0090F4C0_reloc") +DEFINE_DMA_ENTRY(ovl_0090F530, "ovl_0090F530") +DEFINE_DMA_ENTRY(ovl_0090F530_reloc, "ovl_0090F530_reloc") +DEFINE_DMA_ENTRY(ovl_0090F5A0, "ovl_0090F5A0") +DEFINE_DMA_ENTRY(ovl_0090F5A0_reloc, "ovl_0090F5A0_reloc") +DEFINE_DMA_ENTRY(ovl_0090F610, "ovl_0090F610") +DEFINE_DMA_ENTRY(ovl_0090F610_reloc, "ovl_0090F610_reloc") +DEFINE_DMA_ENTRY(ovl_0090F680, "ovl_0090F680") +DEFINE_DMA_ENTRY(ovl_0090F680_reloc, "ovl_0090F680_reloc") +DEFINE_DMA_ENTRY(ovl_0090F6F0, "ovl_0090F6F0") +DEFINE_DMA_ENTRY(ovl_0090F6F0_reloc, "ovl_0090F6F0_reloc") +DEFINE_DMA_ENTRY(ovl_0090F760, "ovl_0090F760") +DEFINE_DMA_ENTRY(ovl_0090F760_reloc, "ovl_0090F760_reloc") +DEFINE_DMA_ENTRY(ovl_0090F7D0, "ovl_0090F7D0") +DEFINE_DMA_ENTRY(ovl_0090F7D0_reloc, "ovl_0090F7D0_reloc") +DEFINE_DMA_ENTRY(ovl_0090F840, "ovl_0090F840") +DEFINE_DMA_ENTRY(ovl_0090F840_reloc, "ovl_0090F840_reloc") +DEFINE_DMA_ENTRY(ovl_0090F8B0, "ovl_0090F8B0") +DEFINE_DMA_ENTRY(ovl_0090F8B0_reloc, "ovl_0090F8B0_reloc") +DEFINE_DMA_ENTRY(ovl_0090F920, "ovl_0090F920") +DEFINE_DMA_ENTRY(ovl_0090F920_reloc, "ovl_0090F920_reloc") +DEFINE_DMA_ENTRY(ovl_0090F990, "ovl_0090F990") +DEFINE_DMA_ENTRY(ovl_0090F990_reloc, "ovl_0090F990_reloc") +DEFINE_DMA_ENTRY(ovl_0090FA00, "ovl_0090FA00") +DEFINE_DMA_ENTRY(ovl_0090FA00_reloc, "ovl_0090FA00_reloc") +DEFINE_DMA_ENTRY(ovl_0090FA70, "ovl_0090FA70") +DEFINE_DMA_ENTRY(ovl_0090FA70_reloc, "ovl_0090FA70_reloc") +DEFINE_DMA_ENTRY(ovl_0090FAE0, "ovl_0090FAE0") +DEFINE_DMA_ENTRY(ovl_0090FAE0_reloc, "ovl_0090FAE0_reloc") +DEFINE_DMA_ENTRY(ovl_0090FB50, "ovl_0090FB50") +DEFINE_DMA_ENTRY(ovl_0090FB50_reloc, "ovl_0090FB50_reloc") +DEFINE_DMA_ENTRY(ovl_0090FBC0, "ovl_0090FBC0") +DEFINE_DMA_ENTRY(ovl_0090FBC0_reloc, "ovl_0090FBC0_reloc") +DEFINE_DMA_ENTRY(ovl_0090FC30, "ovl_0090FC30") +DEFINE_DMA_ENTRY(ovl_0090FC30_reloc, "ovl_0090FC30_reloc") +DEFINE_DMA_ENTRY(ovl_0090FCA0, "ovl_0090FCA0") +DEFINE_DMA_ENTRY(ovl_0090FCA0_reloc, "ovl_0090FCA0_reloc") +DEFINE_DMA_ENTRY(ovl_0090FD10, "ovl_0090FD10") +DEFINE_DMA_ENTRY(ovl_0090FD10_reloc, "ovl_0090FD10_reloc") +DEFINE_DMA_ENTRY(ovl_0090FD80, "ovl_0090FD80") +DEFINE_DMA_ENTRY(ovl_0090FD80_reloc, "ovl_0090FD80_reloc") +DEFINE_DMA_ENTRY(ovl_0090FDF0, "ovl_0090FDF0") +DEFINE_DMA_ENTRY(ovl_0090FDF0_reloc, "ovl_0090FDF0_reloc") +DEFINE_DMA_ENTRY(ovl_0090FE60, "ovl_0090FE60") +DEFINE_DMA_ENTRY(ovl_0090FE60_reloc, "ovl_0090FE60_reloc") +DEFINE_DMA_ENTRY(ovl_009102C0, "ovl_009102C0") +DEFINE_DMA_ENTRY(ovl_009102C0_reloc, "ovl_009102C0_reloc") +DEFINE_DMA_ENTRY(ovl_009103D0, "ovl_009103D0") +DEFINE_DMA_ENTRY(ovl_009103D0_reloc, "ovl_009103D0_reloc") +DEFINE_DMA_ENTRY(ovl_00910440, "ovl_00910440") +DEFINE_DMA_ENTRY(ovl_00910440_reloc, "ovl_00910440_reloc") +DEFINE_DMA_ENTRY(ovl_00910E50, "ovl_00910E50") +DEFINE_DMA_ENTRY(ovl_00910E50_reloc, "ovl_00910E50_reloc") +DEFINE_DMA_ENTRY(ovl_00911340, "ovl_00911340") +DEFINE_DMA_ENTRY(ovl_00911340_reloc, "ovl_00911340_reloc") +DEFINE_DMA_ENTRY(ovl_00911490, "ovl_00911490") +DEFINE_DMA_ENTRY(ovl_00911490_reloc, "ovl_00911490_reloc") +DEFINE_DMA_ENTRY(ovl_009118A0, "ovl_009118A0") +DEFINE_DMA_ENTRY(ovl_009118A0_reloc, "ovl_009118A0_reloc") +DEFINE_DMA_ENTRY(ovl_00911910, "ovl_00911910") +DEFINE_DMA_ENTRY(ovl_00911910_reloc, "ovl_00911910_reloc") +DEFINE_DMA_ENTRY(ovl_00911E60, "ovl_00911E60") +DEFINE_DMA_ENTRY(ovl_00911E60_reloc, "ovl_00911E60_reloc") +DEFINE_DMA_ENTRY(ovl_009120B0, "ovl_009120B0") +DEFINE_DMA_ENTRY(ovl_009120B0_reloc, "ovl_009120B0_reloc") +DEFINE_DMA_ENTRY(ovl_00912A90, "ovl_00912A90") +DEFINE_DMA_ENTRY(ovl_00912A90_reloc, "ovl_00912A90_reloc") +DEFINE_DMA_ENTRY(ovl_00912B00, "ovl_00912B00") +DEFINE_DMA_ENTRY(ovl_00912B00_reloc, "ovl_00912B00_reloc") +DEFINE_DMA_ENTRY(ovl_00912B70, "ovl_00912B70") +DEFINE_DMA_ENTRY(ovl_00912B70_reloc, "ovl_00912B70_reloc") +DEFINE_DMA_ENTRY(ovl_00912BE0, "ovl_00912BE0") +DEFINE_DMA_ENTRY(ovl_00912BE0_reloc, "ovl_00912BE0_reloc") +DEFINE_DMA_ENTRY(ovl_00912C50, "ovl_00912C50") +DEFINE_DMA_ENTRY(ovl_00912C50_reloc, "ovl_00912C50_reloc") +DEFINE_DMA_ENTRY(ovl_00912CC0, "ovl_00912CC0") +DEFINE_DMA_ENTRY(ovl_00912CC0_reloc, "ovl_00912CC0_reloc") +DEFINE_DMA_ENTRY(ovl_00912D30, "ovl_00912D30") +DEFINE_DMA_ENTRY(ovl_00912D30_reloc, "ovl_00912D30_reloc") +DEFINE_DMA_ENTRY(ovl_00912DA0, "ovl_00912DA0") +DEFINE_DMA_ENTRY(ovl_00912DA0_reloc, "ovl_00912DA0_reloc") +DEFINE_DMA_ENTRY(ovl_00912E10, "ovl_00912E10") +DEFINE_DMA_ENTRY(ovl_00912E10_reloc, "ovl_00912E10_reloc") +DEFINE_DMA_ENTRY(ovl_00912F20, "ovl_00912F20") +DEFINE_DMA_ENTRY(ovl_00912F20_reloc, "ovl_00912F20_reloc") +DEFINE_DMA_ENTRY(ovl_00912F90, "ovl_00912F90") +DEFINE_DMA_ENTRY(ovl_00912F90_reloc, "ovl_00912F90_reloc") +DEFINE_DMA_ENTRY(ovl_00913000, "ovl_00913000") +DEFINE_DMA_ENTRY(ovl_00913000_reloc, "ovl_00913000_reloc") +DEFINE_DMA_ENTRY(ovl_00913390, "ovl_00913390") +DEFINE_DMA_ENTRY(ovl_00913390_reloc, "ovl_00913390_reloc") +DEFINE_DMA_ENTRY(ovl_00913400, "ovl_00913400") +DEFINE_DMA_ENTRY(ovl_00913400_reloc, "ovl_00913400_reloc") +DEFINE_DMA_ENTRY(ovl_00913470, "ovl_00913470") +DEFINE_DMA_ENTRY(ovl_00913470_reloc, "ovl_00913470_reloc") +DEFINE_DMA_ENTRY(ovl_009134E0, "ovl_009134E0") +DEFINE_DMA_ENTRY(ovl_009134E0_reloc, "ovl_009134E0_reloc") +DEFINE_DMA_ENTRY(ovl_00913550, "ovl_00913550") +DEFINE_DMA_ENTRY(ovl_00913550_reloc, "ovl_00913550_reloc") +DEFINE_DMA_ENTRY(ovl_009135C0, "ovl_009135C0") +DEFINE_DMA_ENTRY(ovl_009135C0_reloc, "ovl_009135C0_reloc") +DEFINE_DMA_ENTRY(ovl_00913630, "ovl_00913630") +DEFINE_DMA_ENTRY(ovl_00913630_reloc, "ovl_00913630_reloc") +DEFINE_DMA_ENTRY(ovl_009136A0, "ovl_009136A0") +DEFINE_DMA_ENTRY(ovl_009136A0_reloc, "ovl_009136A0_reloc") +DEFINE_DMA_ENTRY(ovl_00913A30, "ovl_00913A30") +DEFINE_DMA_ENTRY(ovl_00913A30_reloc, "ovl_00913A30_reloc") +DEFINE_DMA_ENTRY(ovl_00913AA0, "ovl_00913AA0") +DEFINE_DMA_ENTRY(ovl_00913AA0_reloc, "ovl_00913AA0_reloc") +DEFINE_DMA_ENTRY(ovl_00913B10, "ovl_00913B10") +DEFINE_DMA_ENTRY(ovl_00913B10_reloc, "ovl_00913B10_reloc") +DEFINE_DMA_ENTRY(ovl_00913B80, "ovl_00913B80") +DEFINE_DMA_ENTRY(ovl_00913B80_reloc, "ovl_00913B80_reloc") +DEFINE_DMA_ENTRY(ovl_00913F10, "ovl_00913F10") +DEFINE_DMA_ENTRY(ovl_00913F10_reloc, "ovl_00913F10_reloc") +DEFINE_DMA_ENTRY(ovl_00913F80, "ovl_00913F80") +DEFINE_DMA_ENTRY(ovl_00913F80_reloc, "ovl_00913F80_reloc") +DEFINE_DMA_ENTRY(ovl_00913FF0, "ovl_00913FF0") +DEFINE_DMA_ENTRY(ovl_00913FF0_reloc, "ovl_00913FF0_reloc") +DEFINE_DMA_ENTRY(ovl_00914060, "ovl_00914060") +DEFINE_DMA_ENTRY(ovl_00914060_reloc, "ovl_00914060_reloc") +DEFINE_DMA_ENTRY(ovl_009140D0, "ovl_009140D0") +DEFINE_DMA_ENTRY(ovl_009140D0_reloc, "ovl_009140D0_reloc") +DEFINE_DMA_ENTRY(ovl_00914140, "ovl_00914140") +DEFINE_DMA_ENTRY(ovl_00914140_reloc, "ovl_00914140_reloc") +DEFINE_DMA_ENTRY(ovl_009144D0, "ovl_009144D0") +DEFINE_DMA_ENTRY(ovl_009144D0_reloc, "ovl_009144D0_reloc") +DEFINE_DMA_ENTRY(ovl_00914540, "ovl_00914540") +DEFINE_DMA_ENTRY(ovl_00914540_reloc, "ovl_00914540_reloc") +DEFINE_DMA_ENTRY(ovl_00914650, "ovl_00914650") +DEFINE_DMA_ENTRY(ovl_00914650_reloc, "ovl_00914650_reloc") +DEFINE_DMA_ENTRY(ovl_009146C0, "ovl_009146C0") +DEFINE_DMA_ENTRY(ovl_009146C0_reloc, "ovl_009146C0_reloc") +DEFINE_DMA_ENTRY(ovl_00914730, "ovl_00914730") +DEFINE_DMA_ENTRY(ovl_00914730_reloc, "ovl_00914730_reloc") +DEFINE_DMA_ENTRY(ovl_009147A0, "ovl_009147A0") +DEFINE_DMA_ENTRY(ovl_009147A0_reloc, "ovl_009147A0_reloc") +DEFINE_DMA_ENTRY(ovl_00914810, "ovl_00914810") +DEFINE_DMA_ENTRY(ovl_00914810_reloc, "ovl_00914810_reloc") +DEFINE_DMA_ENTRY(ovl_00914880, "ovl_00914880") +DEFINE_DMA_ENTRY(ovl_00914880_reloc, "ovl_00914880_reloc") +DEFINE_DMA_ENTRY(ovl_009148F0, "ovl_009148F0") +DEFINE_DMA_ENTRY(ovl_009148F0_reloc, "ovl_009148F0_reloc") +DEFINE_DMA_ENTRY(ovl_00914960, "ovl_00914960") +DEFINE_DMA_ENTRY(ovl_00914960_reloc, "ovl_00914960_reloc") +DEFINE_DMA_ENTRY(ovl_009149D0, "ovl_009149D0") +DEFINE_DMA_ENTRY(ovl_009149D0_reloc, "ovl_009149D0_reloc") +DEFINE_DMA_ENTRY(ovl_00914A40, "ovl_00914A40") +DEFINE_DMA_ENTRY(ovl_00914A40_reloc, "ovl_00914A40_reloc") +DEFINE_DMA_ENTRY(ovl_00914AB0, "ovl_00914AB0") +DEFINE_DMA_ENTRY(ovl_00914AB0_reloc, "ovl_00914AB0_reloc") +DEFINE_DMA_ENTRY(ovl_00914B20, "ovl_00914B20") +DEFINE_DMA_ENTRY(ovl_00914B20_reloc, "ovl_00914B20_reloc") +DEFINE_DMA_ENTRY(ovl_00914B90, "ovl_00914B90") +DEFINE_DMA_ENTRY(ovl_00914B90_reloc, "ovl_00914B90_reloc") +DEFINE_DMA_ENTRY(ovl_00914C00, "ovl_00914C00") +DEFINE_DMA_ENTRY(ovl_00914C00_reloc, "ovl_00914C00_reloc") +DEFINE_DMA_ENTRY(ovl_00914C70, "ovl_00914C70") +DEFINE_DMA_ENTRY(ovl_00914C70_reloc, "ovl_00914C70_reloc") +DEFINE_DMA_ENTRY(ovl_00914CE0, "ovl_00914CE0") +DEFINE_DMA_ENTRY(ovl_00914CE0_reloc, "ovl_00914CE0_reloc") +DEFINE_DMA_ENTRY(ovl_00915070, "ovl_00915070") +DEFINE_DMA_ENTRY(ovl_00915070_reloc, "ovl_00915070_reloc") +DEFINE_DMA_ENTRY(ovl_009150E0, "ovl_009150E0") +DEFINE_DMA_ENTRY(ovl_009150E0_reloc, "ovl_009150E0_reloc") +DEFINE_DMA_ENTRY(ovl_00915150, "ovl_00915150") +DEFINE_DMA_ENTRY(ovl_00915150_reloc, "ovl_00915150_reloc") +DEFINE_DMA_ENTRY(ovl_009151C0, "ovl_009151C0") +DEFINE_DMA_ENTRY(ovl_009151C0_reloc, "ovl_009151C0_reloc") +DEFINE_DMA_ENTRY(ovl_00915230, "ovl_00915230") +DEFINE_DMA_ENTRY(ovl_00915230_reloc, "ovl_00915230_reloc") +DEFINE_DMA_ENTRY(ovl_009152A0, "ovl_009152A0") +DEFINE_DMA_ENTRY(ovl_009152A0_reloc, "ovl_009152A0_reloc") +DEFINE_DMA_ENTRY(ovl_00915310, "ovl_00915310") +DEFINE_DMA_ENTRY(ovl_00915310_reloc, "ovl_00915310_reloc") +DEFINE_DMA_ENTRY(ovl_00915890, "ovl_00915890") +DEFINE_DMA_ENTRY(ovl_00915890_reloc, "ovl_00915890_reloc") +DEFINE_DMA_ENTRY(ovl_00915A10, "ovl_00915A10") +DEFINE_DMA_ENTRY(ovl_00915A10_reloc, "ovl_00915A10_reloc") +DEFINE_DMA_ENTRY(ovl_00915A80, "ovl_00915A80") +DEFINE_DMA_ENTRY(ovl_00915A80_reloc, "ovl_00915A80_reloc") +DEFINE_DMA_ENTRY(ovl_00915AF0, "ovl_00915AF0") +DEFINE_DMA_ENTRY(ovl_00915AF0_reloc, "ovl_00915AF0_reloc") +DEFINE_DMA_ENTRY(ovl_00915B60, "ovl_00915B60") +DEFINE_DMA_ENTRY(ovl_00915B60_reloc, "ovl_00915B60_reloc") +DEFINE_DMA_ENTRY(ovl_00915BD0, "ovl_00915BD0") +DEFINE_DMA_ENTRY(ovl_00915BD0_reloc, "ovl_00915BD0_reloc") +DEFINE_DMA_ENTRY(ovl_00915C40, "ovl_00915C40") +DEFINE_DMA_ENTRY(ovl_00915C40_reloc, "ovl_00915C40_reloc") +DEFINE_DMA_ENTRY(ovl_00915F80, "ovl_00915F80") +DEFINE_DMA_ENTRY(ovl_00915F80_reloc, "ovl_00915F80_reloc") +DEFINE_DMA_ENTRY(ovl_00915FF0, "ovl_00915FF0") +DEFINE_DMA_ENTRY(ovl_00915FF0_reloc, "ovl_00915FF0_reloc") +DEFINE_DMA_ENTRY(ovl_00916330, "ovl_00916330") +DEFINE_DMA_ENTRY(ovl_00916330_reloc, "ovl_00916330_reloc") +DEFINE_DMA_ENTRY(ovl_009163A0, "ovl_009163A0") +DEFINE_DMA_ENTRY(ovl_009163A0_reloc, "ovl_009163A0_reloc") +DEFINE_DMA_ENTRY(ovl_009166E0, "ovl_009166E0") +DEFINE_DMA_ENTRY(ovl_009166E0_reloc, "ovl_009166E0_reloc") +DEFINE_DMA_ENTRY(ovl_00916750, "ovl_00916750") +DEFINE_DMA_ENTRY(ovl_00916750_reloc, "ovl_00916750_reloc") +DEFINE_DMA_ENTRY(ovl_009167C0, "ovl_009167C0") +DEFINE_DMA_ENTRY(ovl_009167C0_reloc, "ovl_009167C0_reloc") +DEFINE_DMA_ENTRY(ovl_00916830, "ovl_00916830") +DEFINE_DMA_ENTRY(ovl_00916830_reloc, "ovl_00916830_reloc") +DEFINE_DMA_ENTRY(ovl_009168A0, "ovl_009168A0") +DEFINE_DMA_ENTRY(ovl_009168A0_reloc, "ovl_009168A0_reloc") +DEFINE_DMA_ENTRY(ovl_00916A10, "ovl_00916A10") +DEFINE_DMA_ENTRY(ovl_00916A10_reloc, "ovl_00916A10_reloc") +DEFINE_DMA_ENTRY(ovl_00916A80, "ovl_00916A80") +DEFINE_DMA_ENTRY(ovl_00916A80_reloc, "ovl_00916A80_reloc") +DEFINE_DMA_ENTRY(ovl_00916AF0, "ovl_00916AF0") +DEFINE_DMA_ENTRY(ovl_00916AF0_reloc, "ovl_00916AF0_reloc") +DEFINE_DMA_ENTRY(ovl_00916B60, "ovl_00916B60") +DEFINE_DMA_ENTRY(ovl_00916B60_reloc, "ovl_00916B60_reloc") +DEFINE_DMA_ENTRY(ovl_00916E70, "ovl_00916E70") +DEFINE_DMA_ENTRY(ovl_00916E70_reloc, "ovl_00916E70_reloc") +DEFINE_DMA_ENTRY(ovl_00916EE0, "ovl_00916EE0") +DEFINE_DMA_ENTRY(ovl_00916EE0_reloc, "ovl_00916EE0_reloc") +DEFINE_DMA_ENTRY(ovl_00916F50, "ovl_00916F50") +DEFINE_DMA_ENTRY(ovl_00916F50_reloc, "ovl_00916F50_reloc") +DEFINE_DMA_ENTRY(ovl_00916FC0, "ovl_00916FC0") +DEFINE_DMA_ENTRY(ovl_00916FC0_reloc, "ovl_00916FC0_reloc") +DEFINE_DMA_ENTRY(ovl_00917030, "ovl_00917030") +DEFINE_DMA_ENTRY(ovl_00917030_reloc, "ovl_00917030_reloc") +DEFINE_DMA_ENTRY(ovl_009170A0, "ovl_009170A0") +DEFINE_DMA_ENTRY(ovl_009170A0_reloc, "ovl_009170A0_reloc") +DEFINE_DMA_ENTRY(ovl_00917110, "ovl_00917110") +DEFINE_DMA_ENTRY(ovl_00917110_reloc, "ovl_00917110_reloc") +DEFINE_DMA_ENTRY(ovl_00917180, "ovl_00917180") +DEFINE_DMA_ENTRY(ovl_00917180_reloc, "ovl_00917180_reloc") +DEFINE_DMA_ENTRY(ovl_00917510, "ovl_00917510") +DEFINE_DMA_ENTRY(ovl_00917510_reloc, "ovl_00917510_reloc") +DEFINE_DMA_ENTRY(ovl_009178A0, "ovl_009178A0") +DEFINE_DMA_ENTRY(ovl_009178A0_reloc, "ovl_009178A0_reloc") +DEFINE_DMA_ENTRY(ovl_00917C30, "ovl_00917C30") +DEFINE_DMA_ENTRY(ovl_00917C30_reloc, "ovl_00917C30_reloc") +DEFINE_DMA_ENTRY(ovl_00917F40, "ovl_00917F40") +DEFINE_DMA_ENTRY(ovl_00917F40_reloc, "ovl_00917F40_reloc") +DEFINE_DMA_ENTRY(ovl_00917FB0, "ovl_00917FB0") +DEFINE_DMA_ENTRY(ovl_00917FB0_reloc, "ovl_00917FB0_reloc") +DEFINE_DMA_ENTRY(ovl_00918020, "ovl_00918020") +DEFINE_DMA_ENTRY(ovl_00918020_reloc, "ovl_00918020_reloc") +DEFINE_DMA_ENTRY(ovl_00918090, "ovl_00918090") +DEFINE_DMA_ENTRY(ovl_00918090_reloc, "ovl_00918090_reloc") +DEFINE_DMA_ENTRY(ovl_00918100, "ovl_00918100") +DEFINE_DMA_ENTRY(ovl_00918100_reloc, "ovl_00918100_reloc") +DEFINE_DMA_ENTRY(ovl_00918170, "ovl_00918170") +DEFINE_DMA_ENTRY(ovl_00918170_reloc, "ovl_00918170_reloc") +DEFINE_DMA_ENTRY(ovl_009184E0, "ovl_009184E0") +DEFINE_DMA_ENTRY(ovl_009184E0_reloc, "ovl_009184E0_reloc") +DEFINE_DMA_ENTRY(ovl_009187F0, "ovl_009187F0") +DEFINE_DMA_ENTRY(ovl_009187F0_reloc, "ovl_009187F0_reloc") +DEFINE_DMA_ENTRY(ovl_00918860, "ovl_00918860") +DEFINE_DMA_ENTRY(ovl_00918860_reloc, "ovl_00918860_reloc") +DEFINE_DMA_ENTRY(ovl_00918C20, "ovl_00918C20") +DEFINE_DMA_ENTRY(ovl_00918C20_reloc, "ovl_00918C20_reloc") +DEFINE_DMA_ENTRY(ovl_00919400, "ovl_00919400") +DEFINE_DMA_ENTRY(ovl_00919400_reloc, "ovl_00919400_reloc") +DEFINE_DMA_ENTRY(ovl_00919760, "ovl_00919760") +DEFINE_DMA_ENTRY(ovl_00919760_reloc, "ovl_00919760_reloc") +DEFINE_DMA_ENTRY(ovl_0091A2D0, "ovl_0091A2D0") +DEFINE_DMA_ENTRY(ovl_0091A2D0_reloc, "ovl_0091A2D0_reloc") +DEFINE_DMA_ENTRY(ovl_0091A8B0, "ovl_0091A8B0") +DEFINE_DMA_ENTRY(ovl_0091A8B0_reloc, "ovl_0091A8B0_reloc") +DEFINE_DMA_ENTRY(ovl_0091B080, "ovl_0091B080") +DEFINE_DMA_ENTRY(ovl_0091B080_reloc, "ovl_0091B080_reloc") +DEFINE_DMA_ENTRY(ovl_0091B700, "ovl_0091B700") +DEFINE_DMA_ENTRY(ovl_0091B700_reloc, "ovl_0091B700_reloc") +DEFINE_DMA_ENTRY(ovl_0091BF30, "ovl_0091BF30") +DEFINE_DMA_ENTRY(ovl_0091BF30_reloc, "ovl_0091BF30_reloc") +DEFINE_DMA_ENTRY(ovl_0091C190, "ovl_0091C190") +DEFINE_DMA_ENTRY(ovl_0091C190_reloc, "ovl_0091C190_reloc") +DEFINE_DMA_ENTRY(ovl_0091C600, "ovl_0091C600") +DEFINE_DMA_ENTRY(ovl_0091C600_reloc, "ovl_0091C600_reloc") +DEFINE_DMA_ENTRY(ovl_0091CD10, "ovl_0091CD10") +DEFINE_DMA_ENTRY(ovl_0091CD10_reloc, "ovl_0091CD10_reloc") +DEFINE_DMA_ENTRY(ovl_0091D450, "ovl_0091D450") +DEFINE_DMA_ENTRY(ovl_0091D450_reloc, "ovl_0091D450_reloc") +DEFINE_DMA_ENTRY(ovl_0091D910, "ovl_0091D910") +DEFINE_DMA_ENTRY(ovl_0091D910_reloc, "ovl_0091D910_reloc") +DEFINE_DMA_ENTRY(ovl_0091DF10, "ovl_0091DF10") +DEFINE_DMA_ENTRY(ovl_0091DF10_reloc, "ovl_0091DF10_reloc") +DEFINE_DMA_ENTRY(ovl_0091E3C0, "ovl_0091E3C0") +DEFINE_DMA_ENTRY(ovl_0091E3C0_reloc, "ovl_0091E3C0_reloc") +DEFINE_DMA_ENTRY(ovl_0091E800, "ovl_0091E800") +DEFINE_DMA_ENTRY(ovl_0091E800_reloc, "ovl_0091E800_reloc") +DEFINE_DMA_ENTRY(ovl_0091E870, "ovl_0091E870") +DEFINE_DMA_ENTRY(ovl_0091E870_reloc, "ovl_0091E870_reloc") +DEFINE_DMA_ENTRY(ovl_0091E8E0, "ovl_0091E8E0") +DEFINE_DMA_ENTRY(ovl_0091E8E0_reloc, "ovl_0091E8E0_reloc") +DEFINE_DMA_ENTRY(ovl_0091EC70, "ovl_0091EC70") +DEFINE_DMA_ENTRY(ovl_0091EC70_reloc, "ovl_0091EC70_reloc") +DEFINE_DMA_ENTRY(ovl_0091F3E0, "ovl_0091F3E0") +DEFINE_DMA_ENTRY(ovl_0091F3E0_reloc, "ovl_0091F3E0_reloc") +DEFINE_DMA_ENTRY(ovl_0091FB80, "ovl_0091FB80") +DEFINE_DMA_ENTRY(ovl_0091FB80_reloc, "ovl_0091FB80_reloc") +DEFINE_DMA_ENTRY(ovl_0091FBF0, "ovl_0091FBF0") +DEFINE_DMA_ENTRY(ovl_0091FBF0_reloc, "ovl_0091FBF0_reloc") +DEFINE_DMA_ENTRY(ovl_0091FC60, "ovl_0091FC60") +DEFINE_DMA_ENTRY(ovl_0091FC60_reloc, "ovl_0091FC60_reloc") +DEFINE_DMA_ENTRY(ovl_0091FCD0, "ovl_0091FCD0") +DEFINE_DMA_ENTRY(ovl_0091FCD0_reloc, "ovl_0091FCD0_reloc") +DEFINE_DMA_ENTRY(ovl_0091FD40, "ovl_0091FD40") +DEFINE_DMA_ENTRY(ovl_0091FD40_reloc, "ovl_0091FD40_reloc") +DEFINE_DMA_ENTRY(ovl_0091FDB0, "ovl_0091FDB0") +DEFINE_DMA_ENTRY(ovl_0091FDB0_reloc, "ovl_0091FDB0_reloc") +DEFINE_DMA_ENTRY(ovl_009202A0, "ovl_009202A0") +DEFINE_DMA_ENTRY(ovl_009202A0_reloc, "ovl_009202A0_reloc") +DEFINE_DMA_ENTRY(ovl_009203B0, "ovl_009203B0") +DEFINE_DMA_ENTRY(ovl_009203B0_reloc, "ovl_009203B0_reloc") +DEFINE_DMA_ENTRY(ovl_009204C0, "ovl_009204C0") +DEFINE_DMA_ENTRY(ovl_009204C0_reloc, "ovl_009204C0_reloc") +DEFINE_DMA_ENTRY(ovl_009205D0, "ovl_009205D0") +DEFINE_DMA_ENTRY(ovl_009205D0_reloc, "ovl_009205D0_reloc") +DEFINE_DMA_ENTRY(ovl_009206E0, "ovl_009206E0") +DEFINE_DMA_ENTRY(ovl_009206E0_reloc, "ovl_009206E0_reloc") +DEFINE_DMA_ENTRY(ovl_00920D20, "ovl_00920D20") +DEFINE_DMA_ENTRY(ovl_00920D20_reloc, "ovl_00920D20_reloc") +DEFINE_DMA_ENTRY(ovl_00920D90, "ovl_00920D90") +DEFINE_DMA_ENTRY(ovl_00920D90_reloc, "ovl_00920D90_reloc") +DEFINE_DMA_ENTRY(ovl_00920E00, "ovl_00920E00") +DEFINE_DMA_ENTRY(ovl_00920E00_reloc, "ovl_00920E00_reloc") +DEFINE_DMA_ENTRY(ovl_00922380, "ovl_00922380") +DEFINE_DMA_ENTRY(ovl_00922380_reloc, "ovl_00922380_reloc") +DEFINE_DMA_ENTRY(ovl_009223F0, "ovl_009223F0") +DEFINE_DMA_ENTRY(ovl_009223F0_reloc, "ovl_009223F0_reloc") +DEFINE_DMA_ENTRY(ovl_00922A10, "ovl_00922A10") +DEFINE_DMA_ENTRY(ovl_00922A10_reloc, "ovl_00922A10_reloc") +DEFINE_DMA_ENTRY(ovl_009247E0, "ovl_009247E0") +DEFINE_DMA_ENTRY(ovl_009247E0_reloc, "ovl_009247E0_reloc") +DEFINE_DMA_ENTRY(ovl_00924850, "ovl_00924850") +DEFINE_DMA_ENTRY(ovl_00924850_reloc, "ovl_00924850_reloc") +DEFINE_DMA_ENTRY(ovl_009248C0, "ovl_009248C0") +DEFINE_DMA_ENTRY(ovl_009248C0_reloc, "ovl_009248C0_reloc") +DEFINE_DMA_ENTRY(ovl_00924930, "ovl_00924930") +DEFINE_DMA_ENTRY(ovl_00924930_reloc, "ovl_00924930_reloc") +DEFINE_DMA_ENTRY(ovl_009249A0, "ovl_009249A0") +DEFINE_DMA_ENTRY(ovl_009249A0_reloc, "ovl_009249A0_reloc") +DEFINE_DMA_ENTRY(ovl_00924A10, "ovl_00924A10") +DEFINE_DMA_ENTRY(ovl_00924A10_reloc, "ovl_00924A10_reloc") +DEFINE_DMA_ENTRY(ovl_00924A80, "ovl_00924A80") +DEFINE_DMA_ENTRY(ovl_00924A80_reloc, "ovl_00924A80_reloc") +DEFINE_DMA_ENTRY(ovl_00924AF0, "ovl_00924AF0") +DEFINE_DMA_ENTRY(ovl_00924AF0_reloc, "ovl_00924AF0_reloc") +DEFINE_DMA_ENTRY(ovl_00924B60, "ovl_00924B60") +DEFINE_DMA_ENTRY(ovl_00924B60_reloc, "ovl_00924B60_reloc") +DEFINE_DMA_ENTRY(ovl_00924BD0, "ovl_00924BD0") +DEFINE_DMA_ENTRY(ovl_00924BD0_reloc, "ovl_00924BD0_reloc") +DEFINE_DMA_ENTRY(ovl_00924C40, "ovl_00924C40") +DEFINE_DMA_ENTRY(ovl_00924C40_reloc, "ovl_00924C40_reloc") +DEFINE_DMA_ENTRY(ovl_00927440, "ovl_00927440") +DEFINE_DMA_ENTRY(ovl_00927440_reloc, "ovl_00927440_reloc") +DEFINE_DMA_ENTRY(ovl_00927910, "ovl_00927910") +DEFINE_DMA_ENTRY(ovl_00927910_reloc, "ovl_00927910_reloc") +DEFINE_DMA_ENTRY(ovl_00928230, "ovl_00928230") +DEFINE_DMA_ENTRY(ovl_00928230_reloc, "ovl_00928230_reloc") +DEFINE_DMA_ENTRY(ovl_00928530, "ovl_00928530") +DEFINE_DMA_ENTRY(ovl_00928530_reloc, "ovl_00928530_reloc") +DEFINE_DMA_ENTRY(ovl_009287B0, "ovl_009287B0") +DEFINE_DMA_ENTRY(ovl_009287B0_reloc, "ovl_009287B0_reloc") +DEFINE_DMA_ENTRY(ovl_00928CC0, "ovl_00928CC0") +DEFINE_DMA_ENTRY(ovl_00928CC0_reloc, "ovl_00928CC0_reloc") +DEFINE_DMA_ENTRY(ovl_00928D30, "ovl_00928D30") +DEFINE_DMA_ENTRY(ovl_00928D30_reloc, "ovl_00928D30_reloc") +DEFINE_DMA_ENTRY(ovl_00929170, "ovl_00929170") +DEFINE_DMA_ENTRY(ovl_00929170_reloc, "ovl_00929170_reloc") +DEFINE_DMA_ENTRY(ovl_009291E0, "ovl_009291E0") +DEFINE_DMA_ENTRY(ovl_009291E0_reloc, "ovl_009291E0_reloc") +DEFINE_DMA_ENTRY(ovl_00929250, "ovl_00929250") +DEFINE_DMA_ENTRY(ovl_00929250_reloc, "ovl_00929250_reloc") +DEFINE_DMA_ENTRY(ovl_009292C0, "ovl_009292C0") +DEFINE_DMA_ENTRY(ovl_009292C0_reloc, "ovl_009292C0_reloc") +DEFINE_DMA_ENTRY(ovl_00929330, "ovl_00929330") +DEFINE_DMA_ENTRY(ovl_00929330_reloc, "ovl_00929330_reloc") +DEFINE_DMA_ENTRY(ovl_009293A0, "ovl_009293A0") +DEFINE_DMA_ENTRY(ovl_009293A0_reloc, "ovl_009293A0_reloc") +DEFINE_DMA_ENTRY(ovl_00929410, "ovl_00929410") +DEFINE_DMA_ENTRY(ovl_00929410_reloc, "ovl_00929410_reloc") +DEFINE_DMA_ENTRY(ovl_00929480, "ovl_00929480") +DEFINE_DMA_ENTRY(ovl_00929480_reloc, "ovl_00929480_reloc") +DEFINE_DMA_ENTRY(ovl_009294F0, "ovl_009294F0") +DEFINE_DMA_ENTRY(ovl_009294F0_reloc, "ovl_009294F0_reloc") +DEFINE_DMA_ENTRY(ovl_00929560, "ovl_00929560") +DEFINE_DMA_ENTRY(ovl_00929560_reloc, "ovl_00929560_reloc") +DEFINE_DMA_ENTRY(ovl_009295D0, "ovl_009295D0") +DEFINE_DMA_ENTRY(ovl_009295D0_reloc, "ovl_009295D0_reloc") +DEFINE_DMA_ENTRY(ovl_00929640, "ovl_00929640") +DEFINE_DMA_ENTRY(ovl_00929640_reloc, "ovl_00929640_reloc") +DEFINE_DMA_ENTRY(ovl_009296B0, "ovl_009296B0") +DEFINE_DMA_ENTRY(ovl_009296B0_reloc, "ovl_009296B0_reloc") +DEFINE_DMA_ENTRY(ovl_00929720, "ovl_00929720") +DEFINE_DMA_ENTRY(ovl_00929720_reloc, "ovl_00929720_reloc") +DEFINE_DMA_ENTRY(ovl_00929790, "ovl_00929790") +DEFINE_DMA_ENTRY(ovl_00929790_reloc, "ovl_00929790_reloc") +DEFINE_DMA_ENTRY(ovl_00929800, "ovl_00929800") +DEFINE_DMA_ENTRY(ovl_00929800_reloc, "ovl_00929800_reloc") +DEFINE_DMA_ENTRY(ovl_00929E80, "ovl_00929E80") +DEFINE_DMA_ENTRY(ovl_00929E80_reloc, "ovl_00929E80_reloc") +DEFINE_DMA_ENTRY(ovl_00929F90, "ovl_00929F90") +DEFINE_DMA_ENTRY(ovl_00929F90_reloc, "ovl_00929F90_reloc") +DEFINE_DMA_ENTRY(ovl_0092A000, "ovl_0092A000") +DEFINE_DMA_ENTRY(ovl_0092A000_reloc, "ovl_0092A000_reloc") +DEFINE_DMA_ENTRY(ovl_0092A070, "ovl_0092A070") +DEFINE_DMA_ENTRY(ovl_0092A070_reloc, "ovl_0092A070_reloc") +DEFINE_DMA_ENTRY(ovl_0092A0E0, "ovl_0092A0E0") +DEFINE_DMA_ENTRY(ovl_0092A0E0_reloc, "ovl_0092A0E0_reloc") +DEFINE_DMA_ENTRY(ovl_0092A150, "ovl_0092A150") +DEFINE_DMA_ENTRY(ovl_0092A150_reloc, "ovl_0092A150_reloc") +DEFINE_DMA_ENTRY(ovl_0092A1C0, "ovl_0092A1C0") +DEFINE_DMA_ENTRY(ovl_0092A1C0_reloc, "ovl_0092A1C0_reloc") +DEFINE_DMA_ENTRY(ovl_0092A230, "ovl_0092A230") +DEFINE_DMA_ENTRY(ovl_0092A230_reloc, "ovl_0092A230_reloc") +DEFINE_DMA_ENTRY(ovl_0092A2A0, "ovl_0092A2A0") +DEFINE_DMA_ENTRY(ovl_0092A2A0_reloc, "ovl_0092A2A0_reloc") +DEFINE_DMA_ENTRY(ovl_0092A3B0, "ovl_0092A3B0") +DEFINE_DMA_ENTRY(ovl_0092A3B0_reloc, "ovl_0092A3B0_reloc") +DEFINE_DMA_ENTRY(ovl_0092A420, "ovl_0092A420") +DEFINE_DMA_ENTRY(ovl_0092A420_reloc, "ovl_0092A420_reloc") +DEFINE_DMA_ENTRY(ovl_0092A490, "ovl_0092A490") +DEFINE_DMA_ENTRY(ovl_0092A490_reloc, "ovl_0092A490_reloc") +DEFINE_DMA_ENTRY(ovl_0092A730, "ovl_0092A730") +DEFINE_DMA_ENTRY(ovl_0092A730_reloc, "ovl_0092A730_reloc") +DEFINE_DMA_ENTRY(ovl_0092A840, "ovl_0092A840") +DEFINE_DMA_ENTRY(ovl_0092A840_reloc, "ovl_0092A840_reloc") +DEFINE_DMA_ENTRY(ovl_0092A8B0, "ovl_0092A8B0") +DEFINE_DMA_ENTRY(ovl_0092A8B0_reloc, "ovl_0092A8B0_reloc") +DEFINE_DMA_ENTRY(ovl_0092A920, "ovl_0092A920") +DEFINE_DMA_ENTRY(ovl_0092A920_reloc, "ovl_0092A920_reloc") +DEFINE_DMA_ENTRY(ovl_0092A990, "ovl_0092A990") +DEFINE_DMA_ENTRY(ovl_0092A990_reloc, "ovl_0092A990_reloc") +DEFINE_DMA_ENTRY(ovl_0092AA00, "ovl_0092AA00") +DEFINE_DMA_ENTRY(ovl_0092AA00_reloc, "ovl_0092AA00_reloc") +DEFINE_DMA_ENTRY(ovl_0092AA70, "ovl_0092AA70") +DEFINE_DMA_ENTRY(ovl_0092AA70_reloc, "ovl_0092AA70_reloc") +DEFINE_DMA_ENTRY(ovl_0092AAE0, "ovl_0092AAE0") +DEFINE_DMA_ENTRY(ovl_0092AAE0_reloc, "ovl_0092AAE0_reloc") +DEFINE_DMA_ENTRY(ovl_0092AB50, "ovl_0092AB50") +DEFINE_DMA_ENTRY(ovl_0092AB50_reloc, "ovl_0092AB50_reloc") +DEFINE_DMA_ENTRY(ovl_0092B4F0, "ovl_0092B4F0") +DEFINE_DMA_ENTRY(ovl_0092B4F0_reloc, "ovl_0092B4F0_reloc") +DEFINE_DMA_ENTRY(ovl_0092B560, "ovl_0092B560") +DEFINE_DMA_ENTRY(ovl_0092B560_reloc, "ovl_0092B560_reloc") +DEFINE_DMA_ENTRY(ovl_0092B670, "ovl_0092B670") +DEFINE_DMA_ENTRY(ovl_0092B670_reloc, "ovl_0092B670_reloc") +DEFINE_DMA_ENTRY(ovl_0092B6E0, "ovl_0092B6E0") +DEFINE_DMA_ENTRY(ovl_0092B6E0_reloc, "ovl_0092B6E0_reloc") +DEFINE_DMA_ENTRY(ovl_0092B750, "ovl_0092B750") +DEFINE_DMA_ENTRY(ovl_0092B750_reloc, "ovl_0092B750_reloc") +DEFINE_DMA_ENTRY(ovl_0092B970, "ovl_0092B970") +DEFINE_DMA_ENTRY(ovl_0092B970_reloc, "ovl_0092B970_reloc") +DEFINE_DMA_ENTRY(ovl_0092BF20, "ovl_0092BF20") +DEFINE_DMA_ENTRY(ovl_0092BF20_reloc, "ovl_0092BF20_reloc") +DEFINE_DMA_ENTRY(ovl_0092BF90, "ovl_0092BF90") +DEFINE_DMA_ENTRY(ovl_0092BF90_reloc, "ovl_0092BF90_reloc") +DEFINE_DMA_ENTRY(ovl_0092C000, "ovl_0092C000") +DEFINE_DMA_ENTRY(ovl_0092C000_reloc, "ovl_0092C000_reloc") +DEFINE_DMA_ENTRY(ovl_0092C070, "ovl_0092C070") +DEFINE_DMA_ENTRY(ovl_0092C070_reloc, "ovl_0092C070_reloc") +DEFINE_DMA_ENTRY(ovl_0092C0E0, "ovl_0092C0E0") +DEFINE_DMA_ENTRY(ovl_0092C0E0_reloc, "ovl_0092C0E0_reloc") +DEFINE_DMA_ENTRY(ovl_0092C150, "ovl_0092C150") +DEFINE_DMA_ENTRY(ovl_0092C150_reloc, "ovl_0092C150_reloc") +DEFINE_DMA_ENTRY(ovl_0092C1C0, "ovl_0092C1C0") +DEFINE_DMA_ENTRY(ovl_0092C1C0_reloc, "ovl_0092C1C0_reloc") +DEFINE_DMA_ENTRY(ovl_0092C230, "ovl_0092C230") +DEFINE_DMA_ENTRY(ovl_0092C230_reloc, "ovl_0092C230_reloc") +DEFINE_DMA_ENTRY(ovl_0092C340, "ovl_0092C340") +DEFINE_DMA_ENTRY(ovl_0092C340_reloc, "ovl_0092C340_reloc") +DEFINE_DMA_ENTRY(ovl_0092C3B0, "ovl_0092C3B0") +DEFINE_DMA_ENTRY(ovl_0092C3B0_reloc, "ovl_0092C3B0_reloc") +DEFINE_DMA_ENTRY(ovl_0092C4C0, "ovl_0092C4C0") +DEFINE_DMA_ENTRY(ovl_0092C4C0_reloc, "ovl_0092C4C0_reloc") +DEFINE_DMA_ENTRY(ovl_0092C850, "ovl_0092C850") +DEFINE_DMA_ENTRY(ovl_0092C850_reloc, "ovl_0092C850_reloc") +DEFINE_DMA_ENTRY(ovl_0092EC40, "ovl_0092EC40") +DEFINE_DMA_ENTRY(ovl_0092EC40_reloc, "ovl_0092EC40_reloc") +DEFINE_DMA_ENTRY(ovl_0092EFD0, "ovl_0092EFD0") +DEFINE_DMA_ENTRY(ovl_0092EFD0_reloc, "ovl_0092EFD0_reloc") +DEFINE_DMA_ENTRY(ovl_0092F040, "ovl_0092F040") +DEFINE_DMA_ENTRY(ovl_0092F040_reloc, "ovl_0092F040_reloc") +DEFINE_DMA_ENTRY(ovl_0092F3D0, "ovl_0092F3D0") +DEFINE_DMA_ENTRY(ovl_0092F3D0_reloc, "ovl_0092F3D0_reloc") +DEFINE_DMA_ENTRY(ovl_0092F760, "ovl_0092F760") +DEFINE_DMA_ENTRY(ovl_0092F760_reloc, "ovl_0092F760_reloc") +DEFINE_DMA_ENTRY(ovl_0092FAF0, "ovl_0092FAF0") +DEFINE_DMA_ENTRY(ovl_0092FAF0_reloc, "ovl_0092FAF0_reloc") +DEFINE_DMA_ENTRY(ovl_0092FE80, "ovl_0092FE80") +DEFINE_DMA_ENTRY(ovl_0092FE80_reloc, "ovl_0092FE80_reloc") +DEFINE_DMA_ENTRY(ovl_00930210, "ovl_00930210") +DEFINE_DMA_ENTRY(ovl_00930210_reloc, "ovl_00930210_reloc") +DEFINE_DMA_ENTRY(ovl_009305A0, "ovl_009305A0") +DEFINE_DMA_ENTRY(ovl_009305A0_reloc, "ovl_009305A0_reloc") +DEFINE_DMA_ENTRY(ovl_00930A90, "ovl_00930A90") +DEFINE_DMA_ENTRY(ovl_00930A90_reloc, "ovl_00930A90_reloc") +DEFINE_DMA_ENTRY(ovl_00930B00, "ovl_00930B00") +DEFINE_DMA_ENTRY(ovl_00930B00_reloc, "ovl_00930B00_reloc") +DEFINE_DMA_ENTRY(ovl_00930B70, "ovl_00930B70") +DEFINE_DMA_ENTRY(ovl_00930B70_reloc, "ovl_00930B70_reloc") +DEFINE_DMA_ENTRY(ovl_00930F00, "ovl_00930F00") +DEFINE_DMA_ENTRY(ovl_00930F00_reloc, "ovl_00930F00_reloc") +DEFINE_DMA_ENTRY(ovl_00931290, "ovl_00931290") +DEFINE_DMA_ENTRY(ovl_00931290_reloc, "ovl_00931290_reloc") +DEFINE_DMA_ENTRY(ovl_00931620, "ovl_00931620") +DEFINE_DMA_ENTRY(ovl_00931620_reloc, "ovl_00931620_reloc") +DEFINE_DMA_ENTRY(ovl_009319B0, "ovl_009319B0") +DEFINE_DMA_ENTRY(ovl_009319B0_reloc, "ovl_009319B0_reloc") +DEFINE_DMA_ENTRY(ovl_00931D40, "ovl_00931D40") +DEFINE_DMA_ENTRY(ovl_00931D40_reloc, "ovl_00931D40_reloc") +DEFINE_DMA_ENTRY(ovl_009322F0, "ovl_009322F0") +DEFINE_DMA_ENTRY(ovl_009322F0_reloc, "ovl_009322F0_reloc") +DEFINE_DMA_ENTRY(ovl_00932AA0, "ovl_00932AA0") +DEFINE_DMA_ENTRY(ovl_00932AA0_reloc, "ovl_00932AA0_reloc") +DEFINE_DMA_ENTRY(ovl_00932B60, "ovl_00932B60") +DEFINE_DMA_ENTRY(ovl_00932B60_reloc, "ovl_00932B60_reloc") +DEFINE_DMA_ENTRY(ovl_00933F00, "ovl_00933F00") +DEFINE_DMA_ENTRY(ovl_00933F00_reloc, "ovl_00933F00_reloc") +DEFINE_DMA_ENTRY(ovl_00934D50, "ovl_00934D50") +DEFINE_DMA_ENTRY(ovl_00934D50_reloc, "ovl_00934D50_reloc") +DEFINE_DMA_ENTRY(ovl_00936470, "ovl_00936470") +DEFINE_DMA_ENTRY(ovl_00936470_reloc, "ovl_00936470_reloc") +DEFINE_DMA_ENTRY(ovl_00936BC0, "ovl_00936BC0") +DEFINE_DMA_ENTRY(ovl_00936BC0_reloc, "ovl_00936BC0_reloc") +DEFINE_DMA_ENTRY(ovl_00937120, "ovl_00937120") +DEFINE_DMA_ENTRY(ovl_00937120_reloc, "ovl_00937120_reloc") +DEFINE_DMA_ENTRY(ovl_009378C0, "ovl_009378C0") +DEFINE_DMA_ENTRY(ovl_009378C0_reloc, "ovl_009378C0_reloc") +DEFINE_DMA_ENTRY(ovl_00939090, "ovl_00939090") +DEFINE_DMA_ENTRY(ovl_00939090_reloc, "ovl_00939090_reloc") +DEFINE_DMA_ENTRY(ovl_00939100, "ovl_00939100") +DEFINE_DMA_ENTRY(ovl_00939100_reloc, "ovl_00939100_reloc") +DEFINE_DMA_ENTRY(ovl_00939170, "ovl_00939170") +DEFINE_DMA_ENTRY(ovl_00939170_reloc, "ovl_00939170_reloc") +DEFINE_DMA_ENTRY(ovl_009391E0, "ovl_009391E0") +DEFINE_DMA_ENTRY(ovl_009391E0_reloc, "ovl_009391E0_reloc") +DEFINE_DMA_ENTRY(ovl_009392F0, "ovl_009392F0") +DEFINE_DMA_ENTRY(ovl_009392F0_reloc, "ovl_009392F0_reloc") +DEFINE_DMA_ENTRY(ovl_00939400, "ovl_00939400") +DEFINE_DMA_ENTRY(ovl_00939400_reloc, "ovl_00939400_reloc") +DEFINE_DMA_ENTRY(ovl_00939510, "ovl_00939510") +DEFINE_DMA_ENTRY(ovl_00939510_reloc, "ovl_00939510_reloc") +DEFINE_DMA_ENTRY(ovl_00939580, "ovl_00939580") +DEFINE_DMA_ENTRY(ovl_00939580_reloc, "ovl_00939580_reloc") +DEFINE_DMA_ENTRY(ovl_009395F0, "ovl_009395F0") +DEFINE_DMA_ENTRY(ovl_009395F0_reloc, "ovl_009395F0_reloc") +DEFINE_DMA_ENTRY(ovl_0093A8B0, "ovl_0093A8B0") +DEFINE_DMA_ENTRY(ovl_0093A8B0_reloc, "ovl_0093A8B0_reloc") +DEFINE_DMA_ENTRY(ovl_0093A920, "ovl_0093A920") +DEFINE_DMA_ENTRY(ovl_0093A920_reloc, "ovl_0093A920_reloc") +DEFINE_DMA_ENTRY(ovl_0093BD70, "ovl_0093BD70") +DEFINE_DMA_ENTRY(ovl_0093BD70_reloc, "ovl_0093BD70_reloc") +DEFINE_DMA_ENTRY(ovl_0093BF80, "ovl_0093BF80") +DEFINE_DMA_ENTRY(ovl_0093BF80_reloc, "ovl_0093BF80_reloc") +DEFINE_DMA_ENTRY(ovl_0093BFF0, "ovl_0093BFF0") +DEFINE_DMA_ENTRY(ovl_0093BFF0_reloc, "ovl_0093BFF0_reloc") +DEFINE_DMA_ENTRY(ovl_0093C060, "ovl_0093C060") +DEFINE_DMA_ENTRY(ovl_0093C060_reloc, "ovl_0093C060_reloc") +DEFINE_DMA_ENTRY(ovl_0093C0D0, "ovl_0093C0D0") +DEFINE_DMA_ENTRY(ovl_0093C0D0_reloc, "ovl_0093C0D0_reloc") +DEFINE_DMA_ENTRY(ovl_0093C5D0, "ovl_0093C5D0") +DEFINE_DMA_ENTRY(ovl_0093C5D0_reloc, "ovl_0093C5D0_reloc") +DEFINE_DMA_ENTRY(ovl_0093CAD0, "ovl_0093CAD0") +DEFINE_DMA_ENTRY(ovl_0093CAD0_reloc, "ovl_0093CAD0_reloc") +DEFINE_DMA_ENTRY(ovl_0093CFD0, "ovl_0093CFD0") +DEFINE_DMA_ENTRY(ovl_0093CFD0_reloc, "ovl_0093CFD0_reloc") +DEFINE_DMA_ENTRY(ovl_0093D4D0, "ovl_0093D4D0") +DEFINE_DMA_ENTRY(ovl_0093D4D0_reloc, "ovl_0093D4D0_reloc") +DEFINE_DMA_ENTRY(ovl_0093D540, "ovl_0093D540") +DEFINE_DMA_ENTRY(ovl_0093D540_reloc, "ovl_0093D540_reloc") +DEFINE_DMA_ENTRY(ovl_0093D5B0, "ovl_0093D5B0") +DEFINE_DMA_ENTRY(ovl_0093D5B0_reloc, "ovl_0093D5B0_reloc") +DEFINE_DMA_ENTRY(ovl_0093D620, "ovl_0093D620") +DEFINE_DMA_ENTRY(ovl_0093D620_reloc, "ovl_0093D620_reloc") +DEFINE_DMA_ENTRY(ovl_0093D690, "ovl_0093D690") +DEFINE_DMA_ENTRY(ovl_0093D690_reloc, "ovl_0093D690_reloc") +DEFINE_DMA_ENTRY(ovl_0093D700, "ovl_0093D700") +DEFINE_DMA_ENTRY(ovl_0093D700_reloc, "ovl_0093D700_reloc") +DEFINE_DMA_ENTRY(ovl_0093DC00, "ovl_0093DC00") +DEFINE_DMA_ENTRY(ovl_0093DC00_reloc, "ovl_0093DC00_reloc") +DEFINE_DMA_ENTRY(ovl_0093E100, "ovl_0093E100") +DEFINE_DMA_ENTRY(ovl_0093E100_reloc, "ovl_0093E100_reloc") +DEFINE_DMA_ENTRY(ovl_0093E600, "ovl_0093E600") +DEFINE_DMA_ENTRY(ovl_0093E600_reloc, "ovl_0093E600_reloc") +DEFINE_DMA_ENTRY(ovl_0093EB00, "ovl_0093EB00") +DEFINE_DMA_ENTRY(ovl_0093EB00_reloc, "ovl_0093EB00_reloc") +DEFINE_DMA_ENTRY(ovl_0093F000, "ovl_0093F000") +DEFINE_DMA_ENTRY(ovl_0093F000_reloc, "ovl_0093F000_reloc") +DEFINE_DMA_ENTRY(ovl_0093F070, "ovl_0093F070") +DEFINE_DMA_ENTRY(ovl_0093F070_reloc, "ovl_0093F070_reloc") +DEFINE_DMA_ENTRY(ovl_0093F0E0, "ovl_0093F0E0") +DEFINE_DMA_ENTRY(ovl_0093F0E0_reloc, "ovl_0093F0E0_reloc") +DEFINE_DMA_ENTRY(ovl_0093F150, "ovl_0093F150") +DEFINE_DMA_ENTRY(ovl_0093F150_reloc, "ovl_0093F150_reloc") +DEFINE_DMA_ENTRY(ovl_0093F1C0, "ovl_0093F1C0") +DEFINE_DMA_ENTRY(ovl_0093F1C0_reloc, "ovl_0093F1C0_reloc") +DEFINE_DMA_ENTRY(ovl_0093F230, "ovl_0093F230") +DEFINE_DMA_ENTRY(ovl_0093F230_reloc, "ovl_0093F230_reloc") +DEFINE_DMA_ENTRY(ovl_0093F2A0, "ovl_0093F2A0") +DEFINE_DMA_ENTRY(ovl_0093F2A0_reloc, "ovl_0093F2A0_reloc") +DEFINE_DMA_ENTRY(ovl_0093F310, "ovl_0093F310") +DEFINE_DMA_ENTRY(ovl_0093F310_reloc, "ovl_0093F310_reloc") +DEFINE_DMA_ENTRY(ovl_0093F380, "ovl_0093F380") +DEFINE_DMA_ENTRY(ovl_0093F380_reloc, "ovl_0093F380_reloc") +DEFINE_DMA_ENTRY(ovl_0093F9E0, "ovl_0093F9E0") +DEFINE_DMA_ENTRY(ovl_0093F9E0_reloc, "ovl_0093F9E0_reloc") +DEFINE_DMA_ENTRY(ovl_0093FA50, "ovl_0093FA50") +DEFINE_DMA_ENTRY(ovl_0093FA50_reloc, "ovl_0093FA50_reloc") +DEFINE_DMA_ENTRY(ovl_0093FAC0, "ovl_0093FAC0") +DEFINE_DMA_ENTRY(ovl_0093FAC0_reloc, "ovl_0093FAC0_reloc") +DEFINE_DMA_ENTRY(ovl_0093FB30, "ovl_0093FB30") +DEFINE_DMA_ENTRY(ovl_0093FB30_reloc, "ovl_0093FB30_reloc") +DEFINE_DMA_ENTRY(ovl_0093FBA0, "ovl_0093FBA0") +DEFINE_DMA_ENTRY(ovl_0093FBA0_reloc, "ovl_0093FBA0_reloc") +DEFINE_DMA_ENTRY(ovl_0093FC10, "ovl_0093FC10") +DEFINE_DMA_ENTRY(ovl_0093FC10_reloc, "ovl_0093FC10_reloc") +DEFINE_DMA_ENTRY(ovl_00940380, "ovl_00940380") +DEFINE_DMA_ENTRY(ovl_00940380_reloc, "ovl_00940380_reloc") +DEFINE_DMA_ENTRY(ovl_00941B10, "ovl_00941B10") +DEFINE_DMA_ENTRY(ovl_00941B10_reloc, "ovl_00941B10_reloc") +DEFINE_DMA_ENTRY(ovl_00941B80, "ovl_00941B80") +DEFINE_DMA_ENTRY(ovl_00941B80_reloc, "ovl_00941B80_reloc") +DEFINE_DMA_ENTRY(ovl_00941BF0, "ovl_00941BF0") +DEFINE_DMA_ENTRY(ovl_00941BF0_reloc, "ovl_00941BF0_reloc") +DEFINE_DMA_ENTRY(ovl_009428A0, "ovl_009428A0") +DEFINE_DMA_ENTRY(ovl_009428A0_reloc, "ovl_009428A0_reloc") +DEFINE_DMA_ENTRY(ovl_00942EE0, "ovl_00942EE0") +DEFINE_DMA_ENTRY(ovl_00942EE0_reloc, "ovl_00942EE0_reloc") +DEFINE_DMA_ENTRY(ovl_00942F50, "ovl_00942F50") +DEFINE_DMA_ENTRY(ovl_00942F50_reloc, "ovl_00942F50_reloc") +DEFINE_DMA_ENTRY(ovl_00942FC0, "ovl_00942FC0") +DEFINE_DMA_ENTRY(ovl_00942FC0_reloc, "ovl_00942FC0_reloc") +DEFINE_DMA_ENTRY(ovl_00943030, "ovl_00943030") +DEFINE_DMA_ENTRY(ovl_00943030_reloc, "ovl_00943030_reloc") +DEFINE_DMA_ENTRY(ovl_009430A0, "ovl_009430A0") +DEFINE_DMA_ENTRY(ovl_009430A0_reloc, "ovl_009430A0_reloc") +DEFINE_DMA_ENTRY(ovl_00943110, "ovl_00943110") +DEFINE_DMA_ENTRY(ovl_00943110_reloc, "ovl_00943110_reloc") +DEFINE_DMA_ENTRY(ovl_00943180, "ovl_00943180") +DEFINE_DMA_ENTRY(ovl_00943180_reloc, "ovl_00943180_reloc") +DEFINE_DMA_ENTRY(ovl_009431F0, "ovl_009431F0") +DEFINE_DMA_ENTRY(ovl_009431F0_reloc, "ovl_009431F0_reloc") +DEFINE_DMA_ENTRY(ovl_00943260, "ovl_00943260") +DEFINE_DMA_ENTRY(ovl_00943260_reloc, "ovl_00943260_reloc") +DEFINE_DMA_ENTRY(ovl_009432D0, "ovl_009432D0") +DEFINE_DMA_ENTRY(ovl_009432D0_reloc, "ovl_009432D0_reloc") +DEFINE_DMA_ENTRY(ovl_00943340, "ovl_00943340") +DEFINE_DMA_ENTRY(ovl_00943340_reloc, "ovl_00943340_reloc") +DEFINE_DMA_ENTRY(ovl_009433B0, "ovl_009433B0") +DEFINE_DMA_ENTRY(ovl_009433B0_reloc, "ovl_009433B0_reloc") +DEFINE_DMA_ENTRY(ovl_00943420, "ovl_00943420") +DEFINE_DMA_ENTRY(ovl_00943420_reloc, "ovl_00943420_reloc") +DEFINE_DMA_ENTRY(ovl_00943490, "ovl_00943490") +DEFINE_DMA_ENTRY(ovl_00943490_reloc, "ovl_00943490_reloc") +DEFINE_DMA_ENTRY(ovl_00943500, "ovl_00943500") +DEFINE_DMA_ENTRY(ovl_00943500_reloc, "ovl_00943500_reloc") +DEFINE_DMA_ENTRY(ovl_00943570, "ovl_00943570") +DEFINE_DMA_ENTRY(ovl_00943570_reloc, "ovl_00943570_reloc") +DEFINE_DMA_ENTRY(ovl_009435E0, "ovl_009435E0") +DEFINE_DMA_ENTRY(ovl_009435E0_reloc, "ovl_009435E0_reloc") +DEFINE_DMA_ENTRY(ovl_00943650, "ovl_00943650") +DEFINE_DMA_ENTRY(ovl_00943650_reloc, "ovl_00943650_reloc") +DEFINE_DMA_ENTRY(ovl_009436C0, "ovl_009436C0") +DEFINE_DMA_ENTRY(ovl_009436C0_reloc, "ovl_009436C0_reloc") +DEFINE_DMA_ENTRY(ovl_00943730, "ovl_00943730") +DEFINE_DMA_ENTRY(ovl_00943730_reloc, "ovl_00943730_reloc") +DEFINE_DMA_ENTRY(ovl_009437A0, "ovl_009437A0") +DEFINE_DMA_ENTRY(ovl_009437A0_reloc, "ovl_009437A0_reloc") +DEFINE_DMA_ENTRY(ovl_00943810, "ovl_00943810") +DEFINE_DMA_ENTRY(ovl_00943810_reloc, "ovl_00943810_reloc") +DEFINE_DMA_ENTRY(ovl_00943880, "ovl_00943880") +DEFINE_DMA_ENTRY(ovl_00943880_reloc, "ovl_00943880_reloc") +DEFINE_DMA_ENTRY(ovl_009438F0, "ovl_009438F0") +DEFINE_DMA_ENTRY(ovl_009438F0_reloc, "ovl_009438F0_reloc") +DEFINE_DMA_ENTRY(ovl_00943960, "ovl_00943960") +DEFINE_DMA_ENTRY(ovl_00943960_reloc, "ovl_00943960_reloc") +DEFINE_DMA_ENTRY(ovl_00944930, "ovl_00944930") +DEFINE_DMA_ENTRY(ovl_00944930_reloc, "ovl_00944930_reloc") +DEFINE_DMA_ENTRY(ovl_009449A0, "ovl_009449A0") +DEFINE_DMA_ENTRY(ovl_009449A0_reloc, "ovl_009449A0_reloc") +DEFINE_DMA_ENTRY(ovl_00944A10, "ovl_00944A10") +DEFINE_DMA_ENTRY(ovl_00944A10_reloc, "ovl_00944A10_reloc") +DEFINE_DMA_ENTRY(ovl_00944A80, "ovl_00944A80") +DEFINE_DMA_ENTRY(ovl_00944A80_reloc, "ovl_00944A80_reloc") +DEFINE_DMA_ENTRY(ovl_00944AF0, "ovl_00944AF0") +DEFINE_DMA_ENTRY(ovl_00944AF0_reloc, "ovl_00944AF0_reloc") +DEFINE_DMA_ENTRY(ovl_00944B60, "ovl_00944B60") +DEFINE_DMA_ENTRY(ovl_00944B60_reloc, "ovl_00944B60_reloc") +DEFINE_DMA_ENTRY(ovl_00944C70, "ovl_00944C70") +DEFINE_DMA_ENTRY(ovl_00944C70_reloc, "ovl_00944C70_reloc") +DEFINE_DMA_ENTRY(ovl_00944D80, "ovl_00944D80") +DEFINE_DMA_ENTRY(ovl_00944D80_reloc, "ovl_00944D80_reloc") +DEFINE_DMA_ENTRY(ovl_00944E90, "ovl_00944E90") +DEFINE_DMA_ENTRY(ovl_00944E90_reloc, "ovl_00944E90_reloc") +DEFINE_DMA_ENTRY(ovl_00945B10, "ovl_00945B10") +DEFINE_DMA_ENTRY(ovl_00945B10_reloc, "ovl_00945B10_reloc") +DEFINE_DMA_ENTRY(ovl_00946900, "ovl_00946900") +DEFINE_DMA_ENTRY(ovl_00946900_reloc, "ovl_00946900_reloc") +DEFINE_DMA_ENTRY(ovl_009474F0, "ovl_009474F0") +DEFINE_DMA_ENTRY(ovl_009474F0_reloc, "ovl_009474F0_reloc") +DEFINE_DMA_ENTRY(ovl_00948A20, "ovl_00948A20") +DEFINE_DMA_ENTRY(ovl_00948A20_reloc, "ovl_00948A20_reloc") +DEFINE_DMA_ENTRY(ovl_00949BE0, "ovl_00949BE0") +DEFINE_DMA_ENTRY(ovl_00949BE0_reloc, "ovl_00949BE0_reloc") +DEFINE_DMA_ENTRY(ovl_0094B4B0, "ovl_0094B4B0") +DEFINE_DMA_ENTRY(ovl_0094B4B0_reloc, "ovl_0094B4B0_reloc") +DEFINE_DMA_ENTRY(ovl_0094BFD0, "ovl_0094BFD0") +DEFINE_DMA_ENTRY(ovl_0094BFD0_reloc, "ovl_0094BFD0_reloc") +DEFINE_DMA_ENTRY(ovl_0094D920, "ovl_0094D920") +DEFINE_DMA_ENTRY(ovl_0094D920_reloc, "ovl_0094D920_reloc") +DEFINE_DMA_ENTRY(ovl_0094F170, "ovl_0094F170") +DEFINE_DMA_ENTRY(ovl_0094F170_reloc, "ovl_0094F170_reloc") +DEFINE_DMA_ENTRY(ovl_0094F570, "ovl_0094F570") +DEFINE_DMA_ENTRY(ovl_0094F570_reloc, "ovl_0094F570_reloc") +DEFINE_DMA_ENTRY(ovl_0094FA20, "ovl_0094FA20") +DEFINE_DMA_ENTRY(ovl_0094FA20_reloc, "ovl_0094FA20_reloc") +DEFINE_DMA_ENTRY(ovl_0094FB30, "ovl_0094FB30") +DEFINE_DMA_ENTRY(ovl_0094FB30_reloc, "ovl_0094FB30_reloc") +DEFINE_DMA_ENTRY(ovl_0094FC40, "ovl_0094FC40") +DEFINE_DMA_ENTRY(ovl_0094FC40_reloc, "ovl_0094FC40_reloc") +DEFINE_DMA_ENTRY(ovl_0094FD50, "ovl_0094FD50") +DEFINE_DMA_ENTRY(ovl_0094FD50_reloc, "ovl_0094FD50_reloc") +DEFINE_DMA_ENTRY(ovl_0094FE60, "ovl_0094FE60") +DEFINE_DMA_ENTRY(ovl_0094FE60_reloc, "ovl_0094FE60_reloc") +DEFINE_DMA_ENTRY(ovl_0094FF70, "ovl_0094FF70") +DEFINE_DMA_ENTRY(ovl_0094FF70_reloc, "ovl_0094FF70_reloc") +DEFINE_DMA_ENTRY(ovl_00950DE0, "ovl_00950DE0") +DEFINE_DMA_ENTRY(ovl_00950DE0_reloc, "ovl_00950DE0_reloc") +DEFINE_DMA_ENTRY(ovl_00951A70, "ovl_00951A70") +DEFINE_DMA_ENTRY(ovl_00951A70_reloc, "ovl_00951A70_reloc") +DEFINE_DMA_ENTRY(ovl_00951D10, "ovl_00951D10") +DEFINE_DMA_ENTRY(ovl_00951D10_reloc, "ovl_00951D10_reloc") +DEFINE_DMA_ENTRY(ovl_00952730, "ovl_00952730") +DEFINE_DMA_ENTRY(ovl_00952730_reloc, "ovl_00952730_reloc") +DEFINE_DMA_ENTRY(ovl_009537E0, "ovl_009537E0") +DEFINE_DMA_ENTRY(ovl_009537E0_reloc, "ovl_009537E0_reloc") +DEFINE_DMA_ENTRY(ovl_00953DE0, "ovl_00953DE0") +DEFINE_DMA_ENTRY(ovl_00953DE0_reloc, "ovl_00953DE0_reloc") +DEFINE_DMA_ENTRY(ovl_00953E50, "ovl_00953E50") +DEFINE_DMA_ENTRY(ovl_00953E50_reloc, "ovl_00953E50_reloc") +DEFINE_DMA_ENTRY(ovl_00953EC0, "ovl_00953EC0") +DEFINE_DMA_ENTRY(ovl_00953EC0_reloc, "ovl_00953EC0_reloc") +DEFINE_DMA_ENTRY(ovl_00953F30, "ovl_00953F30") +DEFINE_DMA_ENTRY(ovl_00953F30_reloc, "ovl_00953F30_reloc") +DEFINE_DMA_ENTRY(ovl_00954D30, "ovl_00954D30") +DEFINE_DMA_ENTRY(ovl_00954D30_reloc, "ovl_00954D30_reloc") +DEFINE_DMA_ENTRY(ovl_00956630, "ovl_00956630") +DEFINE_DMA_ENTRY(ovl_00956630_reloc, "ovl_00956630_reloc") +DEFINE_DMA_ENTRY(ovl_00956870, "ovl_00956870") +DEFINE_DMA_ENTRY(ovl_00956870_reloc, "ovl_00956870_reloc") +DEFINE_DMA_ENTRY(ovl_009568E0, "ovl_009568E0") +DEFINE_DMA_ENTRY(ovl_009568E0_reloc, "ovl_009568E0_reloc") +DEFINE_DMA_ENTRY(ovl_00956950, "ovl_00956950") +DEFINE_DMA_ENTRY(ovl_00956950_reloc, "ovl_00956950_reloc") +DEFINE_DMA_ENTRY(ovl_009569C0, "ovl_009569C0") +DEFINE_DMA_ENTRY(ovl_009569C0_reloc, "ovl_009569C0_reloc") +DEFINE_DMA_ENTRY(ovl_00956A30, "ovl_00956A30") +DEFINE_DMA_ENTRY(ovl_00956A30_reloc, "ovl_00956A30_reloc") +DEFINE_DMA_ENTRY(ovl_00956AA0, "ovl_00956AA0") +DEFINE_DMA_ENTRY(ovl_00956AA0_reloc, "ovl_00956AA0_reloc") +DEFINE_DMA_ENTRY(ovl_00956B10, "ovl_00956B10") +DEFINE_DMA_ENTRY(ovl_00956B10_reloc, "ovl_00956B10_reloc") +DEFINE_DMA_ENTRY(ovl_00956B80, "ovl_00956B80") +DEFINE_DMA_ENTRY(ovl_00956B80_reloc, "ovl_00956B80_reloc") +DEFINE_DMA_ENTRY(ovl_00956BF0, "ovl_00956BF0") +DEFINE_DMA_ENTRY(ovl_00956BF0_reloc, "ovl_00956BF0_reloc") +DEFINE_DMA_ENTRY(ovl_00957410, "ovl_00957410") +DEFINE_DMA_ENTRY(ovl_00957410_reloc, "ovl_00957410_reloc") +DEFINE_DMA_ENTRY(ovl_009577A0, "ovl_009577A0") +DEFINE_DMA_ENTRY(ovl_009577A0_reloc, "ovl_009577A0_reloc") +DEFINE_DMA_ENTRY(ovl_00957B30, "ovl_00957B30") +DEFINE_DMA_ENTRY(ovl_00957B30_reloc, "ovl_00957B30_reloc") +DEFINE_DMA_ENTRY(ovl_00957BA0, "ovl_00957BA0") +DEFINE_DMA_ENTRY(ovl_00957BA0_reloc, "ovl_00957BA0_reloc") +DEFINE_DMA_ENTRY(ovl_00957FF0, "ovl_00957FF0") +DEFINE_DMA_ENTRY(ovl_00957FF0_reloc, "ovl_00957FF0_reloc") +DEFINE_DMA_ENTRY(ovl_00958060, "ovl_00958060") +DEFINE_DMA_ENTRY(ovl_00958060_reloc, "ovl_00958060_reloc") +DEFINE_DMA_ENTRY(ovl_009580D0, "ovl_009580D0") +DEFINE_DMA_ENTRY(ovl_009580D0_reloc, "ovl_009580D0_reloc") +DEFINE_DMA_ENTRY(ovl_00958140, "ovl_00958140") +DEFINE_DMA_ENTRY(ovl_00958140_reloc, "ovl_00958140_reloc") +DEFINE_DMA_ENTRY(ovl_009581B0, "ovl_009581B0") +DEFINE_DMA_ENTRY(ovl_009581B0_reloc, "ovl_009581B0_reloc") +DEFINE_DMA_ENTRY(ovl_00958220, "ovl_00958220") +DEFINE_DMA_ENTRY(ovl_00958220_reloc, "ovl_00958220_reloc") +DEFINE_DMA_ENTRY(ovl_009591D0, "ovl_009591D0") +DEFINE_DMA_ENTRY(ovl_009591D0_reloc, "ovl_009591D0_reloc") +DEFINE_DMA_ENTRY(ovl_0095B440, "ovl_0095B440") +DEFINE_DMA_ENTRY(ovl_0095B440_reloc, "ovl_0095B440_reloc") +DEFINE_DMA_ENTRY(ovl_0095BDE0, "ovl_0095BDE0") +DEFINE_DMA_ENTRY(ovl_0095BDE0_reloc, "ovl_0095BDE0_reloc") +DEFINE_DMA_ENTRY(ovl_0095BE50, "ovl_0095BE50") +DEFINE_DMA_ENTRY(ovl_0095BE50_reloc, "ovl_0095BE50_reloc") +DEFINE_DMA_ENTRY(ovl_0095BEC0, "ovl_0095BEC0") +DEFINE_DMA_ENTRY(ovl_0095BEC0_reloc, "ovl_0095BEC0_reloc") +DEFINE_DMA_ENTRY(ovl_0095BF30, "ovl_0095BF30") +DEFINE_DMA_ENTRY(ovl_0095BF30_reloc, "ovl_0095BF30_reloc") +DEFINE_DMA_ENTRY(ovl_0095BFA0, "ovl_0095BFA0") +DEFINE_DMA_ENTRY(ovl_0095BFA0_reloc, "ovl_0095BFA0_reloc") +DEFINE_DMA_ENTRY(ovl_0095C630, "ovl_0095C630") +DEFINE_DMA_ENTRY(ovl_0095C630_reloc, "ovl_0095C630_reloc") +DEFINE_DMA_ENTRY(ovl_0095CFD0, "ovl_0095CFD0") +DEFINE_DMA_ENTRY(ovl_0095CFD0_reloc, "ovl_0095CFD0_reloc") +DEFINE_DMA_ENTRY(ovl_0095D040, "ovl_0095D040") +DEFINE_DMA_ENTRY(ovl_0095D040_reloc, "ovl_0095D040_reloc") +DEFINE_DMA_ENTRY(ovl_0095D0B0, "ovl_0095D0B0") +DEFINE_DMA_ENTRY(ovl_0095D0B0_reloc, "ovl_0095D0B0_reloc") +DEFINE_DMA_ENTRY(ovl_0095D120, "ovl_0095D120") +DEFINE_DMA_ENTRY(ovl_0095D120_reloc, "ovl_0095D120_reloc") +DEFINE_DMA_ENTRY(ovl_0095D4F0, "ovl_0095D4F0") +DEFINE_DMA_ENTRY(ovl_0095D4F0_reloc, "ovl_0095D4F0_reloc") +DEFINE_DMA_ENTRY(ovl_0095DDA0, "ovl_0095DDA0") +DEFINE_DMA_ENTRY(ovl_0095DDA0_reloc, "ovl_0095DDA0_reloc") +DEFINE_DMA_ENTRY(ovl_0095DEB0, "ovl_0095DEB0") +DEFINE_DMA_ENTRY(ovl_0095DEB0_reloc, "ovl_0095DEB0_reloc") +DEFINE_DMA_ENTRY(ovl_0095E520, "ovl_0095E520") +DEFINE_DMA_ENTRY(ovl_0095E520_reloc, "ovl_0095E520_reloc") +DEFINE_DMA_ENTRY(ovl_0095E590, "ovl_0095E590") +DEFINE_DMA_ENTRY(ovl_0095E590_reloc, "ovl_0095E590_reloc") +DEFINE_DMA_ENTRY(ovl_0095E600, "ovl_0095E600") +DEFINE_DMA_ENTRY(ovl_0095E600_reloc, "ovl_0095E600_reloc") +DEFINE_DMA_ENTRY(ovl_0095E670, "ovl_0095E670") +DEFINE_DMA_ENTRY(ovl_0095E670_reloc, "ovl_0095E670_reloc") +DEFINE_DMA_ENTRY(ovl_0095E6E0, "ovl_0095E6E0") +DEFINE_DMA_ENTRY(ovl_0095E6E0_reloc, "ovl_0095E6E0_reloc") +DEFINE_DMA_ENTRY(ovl_0095E750, "ovl_0095E750") +DEFINE_DMA_ENTRY(ovl_0095E750_reloc, "ovl_0095E750_reloc") +DEFINE_DMA_ENTRY(ovl_0095ECC0, "ovl_0095ECC0") +DEFINE_DMA_ENTRY(ovl_0095ECC0_reloc, "ovl_0095ECC0_reloc") +DEFINE_DMA_ENTRY(ovl_0095EDC0, "ovl_0095EDC0") +DEFINE_DMA_ENTRY(ovl_0095EDC0_reloc, "ovl_0095EDC0_reloc") +DEFINE_DMA_ENTRY(ovl_0095EE30, "ovl_0095EE30") +DEFINE_DMA_ENTRY(ovl_0095EE30_reloc, "ovl_0095EE30_reloc") +DEFINE_DMA_ENTRY(ovl_0095EEA0, "ovl_0095EEA0") +DEFINE_DMA_ENTRY(ovl_0095EEA0_reloc, "ovl_0095EEA0_reloc") +DEFINE_DMA_ENTRY(ovl_0095EF10, "ovl_0095EF10") +DEFINE_DMA_ENTRY(ovl_0095EF10_reloc, "ovl_0095EF10_reloc") +DEFINE_DMA_ENTRY(ovl_0095F830, "ovl_0095F830") +DEFINE_DMA_ENTRY(ovl_0095F830_reloc, "ovl_0095F830_reloc") +DEFINE_DMA_ENTRY(ovl_0095FEC0, "ovl_0095FEC0") +DEFINE_DMA_ENTRY(ovl_0095FEC0_reloc, "ovl_0095FEC0_reloc") +DEFINE_DMA_ENTRY(ovl_00962800, "ovl_00962800") +DEFINE_DMA_ENTRY(ovl_00962800_reloc, "ovl_00962800_reloc") +DEFINE_DMA_ENTRY(ovl_00962D00, "ovl_00962D00") +DEFINE_DMA_ENTRY(ovl_00962D00_reloc, "ovl_00962D00_reloc") +DEFINE_DMA_ENTRY(ovl_00963030, "ovl_00963030") +DEFINE_DMA_ENTRY(ovl_00963030_reloc, "ovl_00963030_reloc") +DEFINE_DMA_ENTRY(ovl_009634D0, "ovl_009634D0") +DEFINE_DMA_ENTRY(ovl_009634D0_reloc, "ovl_009634D0_reloc") +DEFINE_DMA_ENTRY(ovl_009635E0, "ovl_009635E0") +DEFINE_DMA_ENTRY(ovl_009635E0_reloc, "ovl_009635E0_reloc") +DEFINE_DMA_ENTRY(ovl_00963DF0, "ovl_00963DF0") +DEFINE_DMA_ENTRY(ovl_00963DF0_reloc, "ovl_00963DF0_reloc") +DEFINE_DMA_ENTRY(ovl_009651E0, "ovl_009651E0") +DEFINE_DMA_ENTRY(ovl_009651E0_reloc, "ovl_009651E0_reloc") +DEFINE_DMA_ENTRY(ovl_009652F0, "ovl_009652F0") +DEFINE_DMA_ENTRY(ovl_009652F0_reloc, "ovl_009652F0_reloc") +DEFINE_DMA_ENTRY(ovl_00965360, "ovl_00965360") +DEFINE_DMA_ENTRY(ovl_00965360_reloc, "ovl_00965360_reloc") +DEFINE_DMA_ENTRY(ovl_009653D0, "ovl_009653D0") +DEFINE_DMA_ENTRY(ovl_009653D0_reloc, "ovl_009653D0_reloc") +DEFINE_DMA_ENTRY(ovl_00965BE0, "ovl_00965BE0") +DEFINE_DMA_ENTRY(ovl_00965BE0_reloc, "ovl_00965BE0_reloc") +DEFINE_DMA_ENTRY(ovl_009672A0, "ovl_009672A0") +DEFINE_DMA_ENTRY(ovl_009672A0_reloc, "ovl_009672A0_reloc") +DEFINE_DMA_ENTRY(ovl_00967310, "ovl_00967310") +DEFINE_DMA_ENTRY(ovl_00967310_reloc, "ovl_00967310_reloc") +DEFINE_DMA_ENTRY(ovl_009679A0, "ovl_009679A0") +DEFINE_DMA_ENTRY(ovl_009679A0_reloc, "ovl_009679A0_reloc") +DEFINE_DMA_ENTRY(ovl_009680A0, "ovl_009680A0") +DEFINE_DMA_ENTRY(ovl_009680A0_reloc, "ovl_009680A0_reloc") +DEFINE_DMA_ENTRY(ovl_00968730, "ovl_00968730") +DEFINE_DMA_ENTRY(ovl_00968730_reloc, "ovl_00968730_reloc") +DEFINE_DMA_ENTRY(ovl_009687A0, "ovl_009687A0") +DEFINE_DMA_ENTRY(ovl_009687A0_reloc, "ovl_009687A0_reloc") +DEFINE_DMA_ENTRY(ovl_00968810, "ovl_00968810") +DEFINE_DMA_ENTRY(ovl_00968810_reloc, "ovl_00968810_reloc") +DEFINE_DMA_ENTRY(ovl_00968880, "ovl_00968880") +DEFINE_DMA_ENTRY(ovl_00968880_reloc, "ovl_00968880_reloc") +DEFINE_DMA_ENTRY(ovl_00968990, "ovl_00968990") +DEFINE_DMA_ENTRY(ovl_00968990_reloc, "ovl_00968990_reloc") +DEFINE_DMA_ENTRY(ovl_00968A00, "ovl_00968A00") +DEFINE_DMA_ENTRY(ovl_00968A00_reloc, "ovl_00968A00_reloc") +DEFINE_DMA_ENTRY(ovl_00968A70, "ovl_00968A70") +DEFINE_DMA_ENTRY(ovl_00968A70_reloc, "ovl_00968A70_reloc") +DEFINE_DMA_ENTRY(ovl_00968AE0, "ovl_00968AE0") +DEFINE_DMA_ENTRY(ovl_00968AE0_reloc, "ovl_00968AE0_reloc") +DEFINE_DMA_ENTRY(ovl_00968DD0, "ovl_00968DD0") +DEFINE_DMA_ENTRY(ovl_00968DD0_reloc, "ovl_00968DD0_reloc") +DEFINE_DMA_ENTRY(ovl_00969160, "ovl_00969160") +DEFINE_DMA_ENTRY(ovl_00969160_reloc, "ovl_00969160_reloc") +DEFINE_DMA_ENTRY(ovl_009691D0, "ovl_009691D0") +DEFINE_DMA_ENTRY(ovl_009691D0_reloc, "ovl_009691D0_reloc") +DEFINE_DMA_ENTRY(ovl_00969240, "ovl_00969240") +DEFINE_DMA_ENTRY(ovl_00969240_reloc, "ovl_00969240_reloc") +DEFINE_DMA_ENTRY(ovl_009692B0, "ovl_009692B0") +DEFINE_DMA_ENTRY(ovl_009692B0_reloc, "ovl_009692B0_reloc") +DEFINE_DMA_ENTRY(ovl_00969320, "ovl_00969320") +DEFINE_DMA_ENTRY(ovl_00969320_reloc, "ovl_00969320_reloc") +DEFINE_DMA_ENTRY(ovl_00969390, "ovl_00969390") +DEFINE_DMA_ENTRY(ovl_00969390_reloc, "ovl_00969390_reloc") +DEFINE_DMA_ENTRY(ovl_00969400, "ovl_00969400") +DEFINE_DMA_ENTRY(ovl_00969400_reloc, "ovl_00969400_reloc") +DEFINE_DMA_ENTRY(ovl_00969470, "ovl_00969470") +DEFINE_DMA_ENTRY(ovl_00969470_reloc, "ovl_00969470_reloc") +DEFINE_DMA_ENTRY(ovl_009694E0, "ovl_009694E0") +DEFINE_DMA_ENTRY(ovl_009694E0_reloc, "ovl_009694E0_reloc") +DEFINE_DMA_ENTRY(ovl_00969550, "ovl_00969550") +DEFINE_DMA_ENTRY(ovl_00969550_reloc, "ovl_00969550_reloc") +DEFINE_DMA_ENTRY(ovl_009695C0, "ovl_009695C0") +DEFINE_DMA_ENTRY(ovl_009695C0_reloc, "ovl_009695C0_reloc") +DEFINE_DMA_ENTRY(ovl_00969630, "ovl_00969630") +DEFINE_DMA_ENTRY(ovl_00969630_reloc, "ovl_00969630_reloc") +DEFINE_DMA_ENTRY(ovl_00969B80, "ovl_00969B80") +DEFINE_DMA_ENTRY(ovl_00969B80_reloc, "ovl_00969B80_reloc") +DEFINE_DMA_ENTRY(ovl_0096A0D0, "ovl_0096A0D0") +DEFINE_DMA_ENTRY(ovl_0096A0D0_reloc, "ovl_0096A0D0_reloc") +DEFINE_DMA_ENTRY(ovl_0096A140, "ovl_0096A140") +DEFINE_DMA_ENTRY(ovl_0096A140_reloc, "ovl_0096A140_reloc") +DEFINE_DMA_ENTRY(ovl_0096A1B0, "ovl_0096A1B0") +DEFINE_DMA_ENTRY(ovl_0096A1B0_reloc, "ovl_0096A1B0_reloc") +DEFINE_DMA_ENTRY(ovl_0096A220, "ovl_0096A220") +DEFINE_DMA_ENTRY(ovl_0096A220_reloc, "ovl_0096A220_reloc") +DEFINE_DMA_ENTRY(ovl_0096A290, "ovl_0096A290") +DEFINE_DMA_ENTRY(ovl_0096A290_reloc, "ovl_0096A290_reloc") +DEFINE_DMA_ENTRY(ovl_0096B010, "ovl_0096B010") +DEFINE_DMA_ENTRY(ovl_0096B010_reloc, "ovl_0096B010_reloc") +DEFINE_DMA_ENTRY(ovl_0096B120, "ovl_0096B120") +DEFINE_DMA_ENTRY(ovl_0096B120_reloc, "ovl_0096B120_reloc") +DEFINE_DMA_ENTRY(ovl_0096B230, "ovl_0096B230") +DEFINE_DMA_ENTRY(ovl_0096B230_reloc, "ovl_0096B230_reloc") +DEFINE_DMA_ENTRY(ovl_0096B340, "ovl_0096B340") +DEFINE_DMA_ENTRY(ovl_0096B340_reloc, "ovl_0096B340_reloc") +DEFINE_DMA_ENTRY(ovl_0096B470, "ovl_0096B470") +DEFINE_DMA_ENTRY(ovl_0096B470_reloc, "ovl_0096B470_reloc") +DEFINE_DMA_ENTRY(ovl_0096C3A0, "ovl_0096C3A0") +DEFINE_DMA_ENTRY(ovl_0096C3A0_reloc, "ovl_0096C3A0_reloc") +DEFINE_DMA_ENTRY(ovl_0096CCF0, "ovl_0096CCF0") +DEFINE_DMA_ENTRY(ovl_0096CCF0_reloc, "ovl_0096CCF0_reloc") +DEFINE_DMA_ENTRY(ovl_0096D250, "ovl_0096D250") +DEFINE_DMA_ENTRY(ovl_0096D250_reloc, "ovl_0096D250_reloc") +DEFINE_DMA_ENTRY(ovl_0096E8E0, "ovl_0096E8E0") +DEFINE_DMA_ENTRY(ovl_0096E8E0_reloc, "ovl_0096E8E0_reloc") +DEFINE_DMA_ENTRY(ovl_0096E9F0, "ovl_0096E9F0") +DEFINE_DMA_ENTRY(ovl_0096E9F0_reloc, "ovl_0096E9F0_reloc") +DEFINE_DMA_ENTRY(ovl_0096EB20, "ovl_0096EB20") +DEFINE_DMA_ENTRY(ovl_0096EB20_reloc, "ovl_0096EB20_reloc") +DEFINE_DMA_ENTRY(ovl_0096F360, "ovl_0096F360") +DEFINE_DMA_ENTRY(ovl_0096F360_reloc, "ovl_0096F360_reloc") +DEFINE_DMA_ENTRY(ovl_0096F3D0, "ovl_0096F3D0") +DEFINE_DMA_ENTRY(ovl_0096F3D0_reloc, "ovl_0096F3D0_reloc") +DEFINE_DMA_ENTRY(ovl_0096F440, "ovl_0096F440") +DEFINE_DMA_ENTRY(ovl_0096F440_reloc, "ovl_0096F440_reloc") +DEFINE_DMA_ENTRY(ovl_0096F4B0, "ovl_0096F4B0") +DEFINE_DMA_ENTRY(ovl_0096F4B0_reloc, "ovl_0096F4B0_reloc") +DEFINE_DMA_ENTRY(ovl_0096F520, "ovl_0096F520") +DEFINE_DMA_ENTRY(ovl_0096F520_reloc, "ovl_0096F520_reloc") +DEFINE_DMA_ENTRY(ovl_0096F590, "ovl_0096F590") +DEFINE_DMA_ENTRY(ovl_0096F590_reloc, "ovl_0096F590_reloc") +DEFINE_DMA_ENTRY(ovl_0096F600, "ovl_0096F600") +DEFINE_DMA_ENTRY(ovl_0096F600_reloc, "ovl_0096F600_reloc") +DEFINE_DMA_ENTRY(ovl_0096FAE0, "ovl_0096FAE0") +DEFINE_DMA_ENTRY(ovl_0096FAE0_reloc, "ovl_0096FAE0_reloc") +DEFINE_DMA_ENTRY(ovl_0096FE70, "ovl_0096FE70") +DEFINE_DMA_ENTRY(ovl_0096FE70_reloc, "ovl_0096FE70_reloc") +DEFINE_DMA_ENTRY(ovl_00970200, "ovl_00970200") +DEFINE_DMA_ENTRY(ovl_00970200_reloc, "ovl_00970200_reloc") +DEFINE_DMA_ENTRY(ovl_00970880, "ovl_00970880") +DEFINE_DMA_ENTRY(ovl_00970880_reloc, "ovl_00970880_reloc") +DEFINE_DMA_ENTRY(ovl_00970920, "ovl_00970920") +DEFINE_DMA_ENTRY(ovl_00970920_reloc, "ovl_00970920_reloc") +DEFINE_DMA_ENTRY(segment_009757E0, "segment_009757E0") +DEFINE_DMA_ENTRY(segment_009D4000, "segment_009D4000") +DEFINE_DMA_ENTRY(segment_009DF000, "segment_009DF000") +DEFINE_DMA_ENTRY(segment_009EA000, "segment_009EA000") +DEFINE_DMA_ENTRY(segment_009F5000, "segment_009F5000") +DEFINE_DMA_ENTRY(segment_00A00000, "segment_00A00000") +DEFINE_DMA_ENTRY(segment_00A0B000, "segment_00A0B000") +DEFINE_DMA_ENTRY(segment_00A16000, "segment_00A16000") +DEFINE_DMA_ENTRY(segment_00A21000, "segment_00A21000") +DEFINE_DMA_ENTRY(segment_00A22000, "segment_00A22000") +DEFINE_DMA_ENTRY(segment_00A30000, "segment_00A30000") +DEFINE_DMA_ENTRY(segment_00A40000, "segment_00A40000") +DEFINE_DMA_ENTRY(segment_00A58000, "segment_00A58000") +DEFINE_DMA_ENTRY(segment_00A6B000, "segment_00A6B000") +DEFINE_DMA_ENTRY(segment_00A76000, "segment_00A76000") +DEFINE_DMA_ENTRY(segment_00A7A000, "segment_00A7A000") +DEFINE_DMA_ENTRY(segment_00A7B000, "segment_00A7B000") +DEFINE_DMA_ENTRY(segment_00A7C000, "segment_00A7C000") +DEFINE_DMA_ENTRY(segment_00A82000, "segment_00A82000") +DEFINE_DMA_ENTRY(segment_00A8A000, "segment_00A8A000") +DEFINE_DMA_ENTRY(segment_00A8E000, "segment_00A8E000") +DEFINE_DMA_ENTRY(segment_00A94000, "segment_00A94000") +DEFINE_DMA_ENTRY(segment_00AAD000, "segment_00AAD000") +DEFINE_DMA_ENTRY(segment_00ABA000, "segment_00ABA000") +DEFINE_DMA_ENTRY(segment_00AC7000, "segment_00AC7000") +DEFINE_DMA_ENTRY(segment_00ACA000, "segment_00ACA000") +DEFINE_DMA_ENTRY(segment_00ACC000, "segment_00ACC000") +DEFINE_DMA_ENTRY(segment_00AD1000, "segment_00AD1000") +DEFINE_DMA_ENTRY(segment_00ADD000, "segment_00ADD000") +DEFINE_DMA_ENTRY(segment_00AE3000, "segment_00AE3000") +DEFINE_DMA_ENTRY(segment_00B0D000, "segment_00B0D000") +DEFINE_DMA_ENTRY(segment_00B17000, "segment_00B17000") +DEFINE_DMA_ENTRY(segment_00B1A000, "segment_00B1A000") +DEFINE_DMA_ENTRY(segment_00B2A000, "segment_00B2A000") +DEFINE_DMA_ENTRY(segment_00B36000, "segment_00B36000") +DEFINE_DMA_ENTRY(segment_00B68000, "segment_00B68000") +DEFINE_DMA_ENTRY(segment_00B88000, "segment_00B88000") +DEFINE_DMA_ENTRY(segment_00B8A000, "segment_00B8A000") +DEFINE_DMA_ENTRY(segment_00B8B000, "segment_00B8B000") +DEFINE_DMA_ENTRY(segment_00B8F000, "segment_00B8F000") +DEFINE_DMA_ENTRY(segment_00BC8000, "segment_00BC8000") +DEFINE_DMA_ENTRY(segment_00BCD000, "segment_00BCD000") +DEFINE_DMA_ENTRY(segment_00BD4000, "segment_00BD4000") +DEFINE_DMA_ENTRY(segment_00CF9000, "segment_00CF9000") +DEFINE_DMA_ENTRY(segment_00D05000, "segment_00D05000") +DEFINE_DMA_ENTRY(segment_00D06000, "segment_00D06000") +DEFINE_DMA_ENTRY(segment_00D07000, "segment_00D07000") +DEFINE_DMA_ENTRY(segment_00D10000, "segment_00D10000") +DEFINE_DMA_ENTRY(segment_00D11000, "segment_00D11000") +DEFINE_DMA_ENTRY(segment_00D12000, "segment_00D12000") +DEFINE_DMA_ENTRY(segment_00D13000, "segment_00D13000") +DEFINE_DMA_ENTRY(segment_00D15000, "segment_00D15000") +DEFINE_DMA_ENTRY(segment_00D16000, "segment_00D16000") +DEFINE_DMA_ENTRY(segment_00D18000, "segment_00D18000") +DEFINE_DMA_ENTRY(segment_00D1A000, "segment_00D1A000") +DEFINE_DMA_ENTRY(segment_00D25000, "segment_00D25000") +DEFINE_DMA_ENTRY(segment_00D29000, "segment_00D29000") +DEFINE_DMA_ENTRY(segment_00D2D000, "segment_00D2D000") +DEFINE_DMA_ENTRY(segment_00D38000, "segment_00D38000") +DEFINE_DMA_ENTRY(segment_00D43000, "segment_00D43000") +DEFINE_DMA_ENTRY(segment_00D4D000, "segment_00D4D000") +DEFINE_DMA_ENTRY(segment_00D58000, "segment_00D58000") +DEFINE_DMA_ENTRY(segment_00D59000, "segment_00D59000") +DEFINE_DMA_ENTRY(segment_00D5A000, "segment_00D5A000") +DEFINE_DMA_ENTRY(segment_00D5B000, "segment_00D5B000") +DEFINE_DMA_ENTRY(segment_00D5D000, "segment_00D5D000") +DEFINE_DMA_ENTRY(segment_00D5E000, "segment_00D5E000") +DEFINE_DMA_ENTRY(segment_00DF4000, "segment_00DF4000") +DEFINE_DMA_ENTRY(segment_00DF5000, "segment_00DF5000") +DEFINE_DMA_ENTRY(segment_00E00000, "segment_00E00000") +DEFINE_DMA_ENTRY(segment_00E01000, "segment_00E01000") +DEFINE_DMA_ENTRY(segment_00E02000, "segment_00E02000") +DEFINE_DMA_ENTRY(segment_00E03000, "segment_00E03000") +DEFINE_DMA_ENTRY(segment_00E04000, "segment_00E04000") +DEFINE_DMA_ENTRY(segment_00E05000, "segment_00E05000") +DEFINE_DMA_ENTRY(segment_00E0D000, "segment_00E0D000") +DEFINE_DMA_ENTRY(segment_00E0E000, "segment_00E0E000") +DEFINE_DMA_ENTRY(segment_00E61000, "segment_00E61000") +DEFINE_DMA_ENTRY(segment_00E64000, "segment_00E64000") +DEFINE_DMA_ENTRY(segment_00E66000, "segment_00E66000") +DEFINE_DMA_ENTRY(segment_00E69000, "segment_00E69000") +DEFINE_DMA_ENTRY(segment_00E6B000, "segment_00E6B000") +DEFINE_DMA_ENTRY(segment_00E6D000, "segment_00E6D000") +DEFINE_DMA_ENTRY(segment_00E6F000, "segment_00E6F000") +DEFINE_DMA_ENTRY(segment_00E71000, "segment_00E71000") +DEFINE_DMA_ENTRY(segment_00E73000, "segment_00E73000") +DEFINE_DMA_ENTRY(segment_00E76000, "segment_00E76000") +DEFINE_DMA_ENTRY(segment_00E78000, "segment_00E78000") +DEFINE_DMA_ENTRY(segment_00E7A000, "segment_00E7A000") +DEFINE_DMA_ENTRY(segment_00E7C000, "segment_00E7C000") +DEFINE_DMA_ENTRY(segment_00E7E000, "segment_00E7E000") +DEFINE_DMA_ENTRY(segment_00E80000, "segment_00E80000") +DEFINE_DMA_ENTRY(segment_00E82000, "segment_00E82000") +DEFINE_DMA_ENTRY(segment_00E84000, "segment_00E84000") +DEFINE_DMA_ENTRY(segment_00E86000, "segment_00E86000") +DEFINE_DMA_ENTRY(segment_00E88000, "segment_00E88000") +DEFINE_DMA_ENTRY(segment_00E8A000, "segment_00E8A000") +DEFINE_DMA_ENTRY(segment_00E8C000, "segment_00E8C000") +DEFINE_DMA_ENTRY(segment_00E8F000, "segment_00E8F000") +DEFINE_DMA_ENTRY(segment_00E91000, "segment_00E91000") +DEFINE_DMA_ENTRY(segment_00E93000, "segment_00E93000") +DEFINE_DMA_ENTRY(segment_00E95000, "segment_00E95000") +DEFINE_DMA_ENTRY(segment_00E97000, "segment_00E97000") +DEFINE_DMA_ENTRY(segment_00E99000, "segment_00E99000") +DEFINE_DMA_ENTRY(segment_00E9C000, "segment_00E9C000") +DEFINE_DMA_ENTRY(segment_00E9E000, "segment_00E9E000") +DEFINE_DMA_ENTRY(segment_00EA0000, "segment_00EA0000") +DEFINE_DMA_ENTRY(segment_00EA2000, "segment_00EA2000") +DEFINE_DMA_ENTRY(segment_00EA4000, "segment_00EA4000") +DEFINE_DMA_ENTRY(segment_00EA6000, "segment_00EA6000") +DEFINE_DMA_ENTRY(segment_00EA8000, "segment_00EA8000") +DEFINE_DMA_ENTRY(segment_00EAA000, "segment_00EAA000") +DEFINE_DMA_ENTRY(segment_00EAC000, "segment_00EAC000") +DEFINE_DMA_ENTRY(segment_00EAE000, "segment_00EAE000") +DEFINE_DMA_ENTRY(segment_00EB0000, "segment_00EB0000") +DEFINE_DMA_ENTRY(segment_00EB3000, "segment_00EB3000") +DEFINE_DMA_ENTRY(segment_00EB5000, "segment_00EB5000") +DEFINE_DMA_ENTRY(segment_00EB8000, "segment_00EB8000") +DEFINE_DMA_ENTRY(segment_00EBA000, "segment_00EBA000") +DEFINE_DMA_ENTRY(segment_00EBC000, "segment_00EBC000") +DEFINE_DMA_ENTRY(segment_00EBE000, "segment_00EBE000") +DEFINE_DMA_ENTRY(segment_00EC0000, "segment_00EC0000") +DEFINE_DMA_ENTRY(segment_00EC3000, "segment_00EC3000") +DEFINE_DMA_ENTRY(segment_00EC5000, "segment_00EC5000") +DEFINE_DMA_ENTRY(segment_00EC7000, "segment_00EC7000") +DEFINE_DMA_ENTRY(segment_00EC9000, "segment_00EC9000") +DEFINE_DMA_ENTRY(segment_00ECB000, "segment_00ECB000") +DEFINE_DMA_ENTRY(segment_00ECD000, "segment_00ECD000") +DEFINE_DMA_ENTRY(segment_00ECF000, "segment_00ECF000") +DEFINE_DMA_ENTRY(segment_00ED1000, "segment_00ED1000") +DEFINE_DMA_ENTRY(segment_00ED3000, "segment_00ED3000") +DEFINE_DMA_ENTRY(segment_00ED5000, "segment_00ED5000") +DEFINE_DMA_ENTRY(segment_00ED7000, "segment_00ED7000") +DEFINE_DMA_ENTRY(segment_00ED9000, "segment_00ED9000") +DEFINE_DMA_ENTRY(segment_00EDB000, "segment_00EDB000") +DEFINE_DMA_ENTRY(segment_00EDD000, "segment_00EDD000") +DEFINE_DMA_ENTRY(segment_00EDF000, "segment_00EDF000") +DEFINE_DMA_ENTRY(segment_00EE1000, "segment_00EE1000") +DEFINE_DMA_ENTRY(segment_00EE3000, "segment_00EE3000") +DEFINE_DMA_ENTRY(segment_00EE6000, "segment_00EE6000") +DEFINE_DMA_ENTRY(segment_00EE8000, "segment_00EE8000") +DEFINE_DMA_ENTRY(segment_00EEA000, "segment_00EEA000") +DEFINE_DMA_ENTRY(segment_00EEC000, "segment_00EEC000") +DEFINE_DMA_ENTRY(segment_00EEE000, "segment_00EEE000") +DEFINE_DMA_ENTRY(segment_00EF0000, "segment_00EF0000") +DEFINE_DMA_ENTRY(segment_00EF2000, "segment_00EF2000") +DEFINE_DMA_ENTRY(segment_00EF4000, "segment_00EF4000") +DEFINE_DMA_ENTRY(segment_00EF6000, "segment_00EF6000") +DEFINE_DMA_ENTRY(segment_00EF8000, "segment_00EF8000") +DEFINE_DMA_ENTRY(segment_00EFA000, "segment_00EFA000") +DEFINE_DMA_ENTRY(segment_00EFC000, "segment_00EFC000") +DEFINE_DMA_ENTRY(segment_00EFE000, "segment_00EFE000") +DEFINE_DMA_ENTRY(segment_00F00000, "segment_00F00000") +DEFINE_DMA_ENTRY(segment_00F02000, "segment_00F02000") +DEFINE_DMA_ENTRY(segment_00F04000, "segment_00F04000") +DEFINE_DMA_ENTRY(segment_00F06000, "segment_00F06000") +DEFINE_DMA_ENTRY(segment_00F08000, "segment_00F08000") +DEFINE_DMA_ENTRY(segment_00F0A000, "segment_00F0A000") +DEFINE_DMA_ENTRY(segment_00F0D000, "segment_00F0D000") +DEFINE_DMA_ENTRY(segment_00F0F000, "segment_00F0F000") +DEFINE_DMA_ENTRY(segment_00F12000, "segment_00F12000") +DEFINE_DMA_ENTRY(segment_00F14000, "segment_00F14000") +DEFINE_DMA_ENTRY(segment_00F16000, "segment_00F16000") +DEFINE_DMA_ENTRY(segment_00F18000, "segment_00F18000") +DEFINE_DMA_ENTRY(segment_00F1A000, "segment_00F1A000") +DEFINE_DMA_ENTRY(segment_00F1D000, "segment_00F1D000") +DEFINE_DMA_ENTRY(segment_00F1F000, "segment_00F1F000") +DEFINE_DMA_ENTRY(segment_00F21000, "segment_00F21000") +DEFINE_DMA_ENTRY(segment_00F23000, "segment_00F23000") +DEFINE_DMA_ENTRY(segment_00F25000, "segment_00F25000") +DEFINE_DMA_ENTRY(segment_00F27000, "segment_00F27000") +DEFINE_DMA_ENTRY(segment_00F29000, "segment_00F29000") +DEFINE_DMA_ENTRY(segment_00F2C000, "segment_00F2C000") +DEFINE_DMA_ENTRY(segment_00F2E000, "segment_00F2E000") +DEFINE_DMA_ENTRY(segment_00F31000, "segment_00F31000") +DEFINE_DMA_ENTRY(segment_00F33000, "segment_00F33000") +DEFINE_DMA_ENTRY(segment_00F35000, "segment_00F35000") +DEFINE_DMA_ENTRY(segment_00F37000, "segment_00F37000") +DEFINE_DMA_ENTRY(segment_00F39000, "segment_00F39000") +DEFINE_DMA_ENTRY(segment_00F3B000, "segment_00F3B000") +DEFINE_DMA_ENTRY(segment_00F3D000, "segment_00F3D000") +DEFINE_DMA_ENTRY(segment_00F3F000, "segment_00F3F000") +DEFINE_DMA_ENTRY(segment_00F41000, "segment_00F41000") +DEFINE_DMA_ENTRY(segment_00F43000, "segment_00F43000") +DEFINE_DMA_ENTRY(segment_00F45000, "segment_00F45000") +DEFINE_DMA_ENTRY(segment_00F48000, "segment_00F48000") +DEFINE_DMA_ENTRY(segment_00F4A000, "segment_00F4A000") +DEFINE_DMA_ENTRY(segment_00F4C000, "segment_00F4C000") +DEFINE_DMA_ENTRY(segment_00F4E000, "segment_00F4E000") +DEFINE_DMA_ENTRY(segment_00F50000, "segment_00F50000") +DEFINE_DMA_ENTRY(segment_00F52000, "segment_00F52000") +DEFINE_DMA_ENTRY(segment_00F54000, "segment_00F54000") +DEFINE_DMA_ENTRY(segment_00F56000, "segment_00F56000") +DEFINE_DMA_ENTRY(segment_00F58000, "segment_00F58000") +DEFINE_DMA_ENTRY(segment_00F5A000, "segment_00F5A000") +DEFINE_DMA_ENTRY(segment_00F5C000, "segment_00F5C000") +DEFINE_DMA_ENTRY(segment_00F5E000, "segment_00F5E000") +DEFINE_DMA_ENTRY(segment_00F60000, "segment_00F60000") +DEFINE_DMA_ENTRY(segment_00F63000, "segment_00F63000") +DEFINE_DMA_ENTRY(segment_00F65000, "segment_00F65000") +DEFINE_DMA_ENTRY(segment_00F67000, "segment_00F67000") +DEFINE_DMA_ENTRY(segment_00F69000, "segment_00F69000") +DEFINE_DMA_ENTRY(segment_00F6B000, "segment_00F6B000") +DEFINE_DMA_ENTRY(segment_00F6D000, "segment_00F6D000") +DEFINE_DMA_ENTRY(segment_00F6F000, "segment_00F6F000") +DEFINE_DMA_ENTRY(segment_00F71000, "segment_00F71000") +DEFINE_DMA_ENTRY(segment_00F73000, "segment_00F73000") +DEFINE_DMA_ENTRY(segment_00F75000, "segment_00F75000") +DEFINE_DMA_ENTRY(segment_00F77000, "segment_00F77000") +DEFINE_DMA_ENTRY(segment_00F79000, "segment_00F79000") +DEFINE_DMA_ENTRY(segment_00F7B000, "segment_00F7B000") +DEFINE_DMA_ENTRY(segment_00F7D000, "segment_00F7D000") +DEFINE_DMA_ENTRY(segment_00F7F000, "segment_00F7F000") +DEFINE_DMA_ENTRY(segment_00F81000, "segment_00F81000") +DEFINE_DMA_ENTRY(segment_00F83000, "segment_00F83000") +DEFINE_DMA_ENTRY(segment_00F85000, "segment_00F85000") +DEFINE_DMA_ENTRY(segment_00F87000, "segment_00F87000") +DEFINE_DMA_ENTRY(segment_00F89000, "segment_00F89000") +DEFINE_DMA_ENTRY(segment_00F8C000, "segment_00F8C000") +DEFINE_DMA_ENTRY(segment_00F8E000, "segment_00F8E000") +DEFINE_DMA_ENTRY(segment_00F91000, "segment_00F91000") +DEFINE_DMA_ENTRY(segment_00F93000, "segment_00F93000") +DEFINE_DMA_ENTRY(segment_00F95000, "segment_00F95000") +DEFINE_DMA_ENTRY(segment_00F97000, "segment_00F97000") +DEFINE_DMA_ENTRY(segment_00F99000, "segment_00F99000") +DEFINE_DMA_ENTRY(segment_00F9B000, "segment_00F9B000") +DEFINE_DMA_ENTRY(segment_00F9D000, "segment_00F9D000") +DEFINE_DMA_ENTRY(segment_00FA0000, "segment_00FA0000") +DEFINE_DMA_ENTRY(segment_00FA2000, "segment_00FA2000") +DEFINE_DMA_ENTRY(segment_00FA4000, "segment_00FA4000") +DEFINE_DMA_ENTRY(segment_00FA6000, "segment_00FA6000") +DEFINE_DMA_ENTRY(segment_00FA8000, "segment_00FA8000") +DEFINE_DMA_ENTRY(segment_00FAA000, "segment_00FAA000") +DEFINE_DMA_ENTRY(segment_00FAC000, "segment_00FAC000") +DEFINE_DMA_ENTRY(segment_00FAF000, "segment_00FAF000") +DEFINE_DMA_ENTRY(segment_00FB1000, "segment_00FB1000") +DEFINE_DMA_ENTRY(segment_00FB3000, "segment_00FB3000") +DEFINE_DMA_ENTRY(segment_00FB4000, "segment_00FB4000") +DEFINE_DMA_ENTRY(segment_00FB7000, "segment_00FB7000") +DEFINE_DMA_ENTRY(segment_00FB9000, "segment_00FB9000") +DEFINE_DMA_ENTRY(segment_00FBB000, "segment_00FBB000") +DEFINE_DMA_ENTRY(segment_00FBD000, "segment_00FBD000") +DEFINE_DMA_ENTRY(segment_00FBF000, "segment_00FBF000") +DEFINE_DMA_ENTRY(segment_00FC1000, "segment_00FC1000") +DEFINE_DMA_ENTRY(segment_00FC3000, "segment_00FC3000") +DEFINE_DMA_ENTRY(segment_00FC5000, "segment_00FC5000") +DEFINE_DMA_ENTRY(segment_00FC8000, "segment_00FC8000") +DEFINE_DMA_ENTRY(segment_00FCA000, "segment_00FCA000") +DEFINE_DMA_ENTRY(segment_00FCC000, "segment_00FCC000") +DEFINE_DMA_ENTRY(segment_00FCE000, "segment_00FCE000") +DEFINE_DMA_ENTRY(segment_00FD0000, "segment_00FD0000") +DEFINE_DMA_ENTRY(segment_00FD2000, "segment_00FD2000") +DEFINE_DMA_ENTRY(segment_00FD4000, "segment_00FD4000") +DEFINE_DMA_ENTRY(segment_00FD6000, "segment_00FD6000") +DEFINE_DMA_ENTRY(segment_00FD9000, "segment_00FD9000") +DEFINE_DMA_ENTRY(segment_00FDB000, "segment_00FDB000") +DEFINE_DMA_ENTRY(segment_00FDE000, "segment_00FDE000") +DEFINE_DMA_ENTRY(segment_00FE0000, "segment_00FE0000") +DEFINE_DMA_ENTRY(segment_00FE3000, "segment_00FE3000") +DEFINE_DMA_ENTRY(segment_00FE5000, "segment_00FE5000") +DEFINE_DMA_ENTRY(segment_00FE7000, "segment_00FE7000") +DEFINE_DMA_ENTRY(segment_00FE9000, "segment_00FE9000") +DEFINE_DMA_ENTRY(segment_00FEB000, "segment_00FEB000") +DEFINE_DMA_ENTRY(segment_00FED000, "segment_00FED000") +DEFINE_DMA_ENTRY(segment_00FEF000, "segment_00FEF000") +DEFINE_DMA_ENTRY(segment_00FF2000, "segment_00FF2000") +DEFINE_DMA_ENTRY(segment_00FF4000, "segment_00FF4000") +DEFINE_DMA_ENTRY(segment_00FF6000, "segment_00FF6000") +DEFINE_DMA_ENTRY(segment_00FF8000, "segment_00FF8000") +DEFINE_DMA_ENTRY(segment_00FFA000, "segment_00FFA000") +DEFINE_DMA_ENTRY(segment_00FFC000, "segment_00FFC000") +DEFINE_DMA_ENTRY(segment_00FFE000, "segment_00FFE000") +DEFINE_DMA_ENTRY(segment_01000000, "segment_01000000") +DEFINE_DMA_ENTRY(segment_01003000, "segment_01003000") +DEFINE_DMA_ENTRY(segment_01005000, "segment_01005000") +DEFINE_DMA_ENTRY(segment_01007000, "segment_01007000") +DEFINE_DMA_ENTRY(segment_01009000, "segment_01009000") +DEFINE_DMA_ENTRY(segment_0100B000, "segment_0100B000") +DEFINE_DMA_ENTRY(segment_0100D000, "segment_0100D000") +DEFINE_DMA_ENTRY(segment_0100F000, "segment_0100F000") +DEFINE_DMA_ENTRY(segment_01011000, "segment_01011000") +DEFINE_DMA_ENTRY(segment_01014000, "segment_01014000") +DEFINE_DMA_ENTRY(segment_01016000, "segment_01016000") +DEFINE_DMA_ENTRY(segment_01019000, "segment_01019000") +DEFINE_DMA_ENTRY(segment_0101B000, "segment_0101B000") +DEFINE_DMA_ENTRY(segment_0101D000, "segment_0101D000") +DEFINE_DMA_ENTRY(segment_0101F000, "segment_0101F000") +DEFINE_DMA_ENTRY(segment_01021000, "segment_01021000") +DEFINE_DMA_ENTRY(segment_01023000, "segment_01023000") +DEFINE_DMA_ENTRY(segment_01025000, "segment_01025000") +DEFINE_DMA_ENTRY(segment_01027000, "segment_01027000") +DEFINE_DMA_ENTRY(segment_01029000, "segment_01029000") +DEFINE_DMA_ENTRY(segment_0102B000, "segment_0102B000") +DEFINE_DMA_ENTRY(segment_0102E000, "segment_0102E000") +DEFINE_DMA_ENTRY(segment_01030000, "segment_01030000") +DEFINE_DMA_ENTRY(segment_01033000, "segment_01033000") +DEFINE_DMA_ENTRY(segment_01035000, "segment_01035000") +DEFINE_DMA_ENTRY(segment_01037000, "segment_01037000") +DEFINE_DMA_ENTRY(segment_01039000, "segment_01039000") +DEFINE_DMA_ENTRY(segment_0103B000, "segment_0103B000") +DEFINE_DMA_ENTRY(segment_0103E000, "segment_0103E000") +DEFINE_DMA_ENTRY(segment_01040000, "segment_01040000") +DEFINE_DMA_ENTRY(segment_01042000, "segment_01042000") +DEFINE_DMA_ENTRY(segment_01044000, "segment_01044000") +DEFINE_DMA_ENTRY(segment_01046000, "segment_01046000") +DEFINE_DMA_ENTRY(segment_01048000, "segment_01048000") +DEFINE_DMA_ENTRY(segment_0104A000, "segment_0104A000") +DEFINE_DMA_ENTRY(segment_0104C000, "segment_0104C000") +DEFINE_DMA_ENTRY(segment_0104E000, "segment_0104E000") +DEFINE_DMA_ENTRY(segment_01050000, "segment_01050000") +DEFINE_DMA_ENTRY(segment_01052000, "segment_01052000") +DEFINE_DMA_ENTRY(segment_01054000, "segment_01054000") +DEFINE_DMA_ENTRY(segment_01056000, "segment_01056000") +DEFINE_DMA_ENTRY(segment_01058000, "segment_01058000") +DEFINE_DMA_ENTRY(segment_0105A000, "segment_0105A000") +DEFINE_DMA_ENTRY(segment_0105C000, "segment_0105C000") +DEFINE_DMA_ENTRY(segment_0105E000, "segment_0105E000") +DEFINE_DMA_ENTRY(segment_01060000, "segment_01060000") +DEFINE_DMA_ENTRY(segment_01062000, "segment_01062000") +DEFINE_DMA_ENTRY(segment_01065000, "segment_01065000") +DEFINE_DMA_ENTRY(segment_01067000, "segment_01067000") +DEFINE_DMA_ENTRY(segment_0106A000, "segment_0106A000") +DEFINE_DMA_ENTRY(segment_0106C000, "segment_0106C000") +DEFINE_DMA_ENTRY(segment_0106F000, "segment_0106F000") +DEFINE_DMA_ENTRY(segment_01071000, "segment_01071000") +DEFINE_DMA_ENTRY(segment_01074000, "segment_01074000") +DEFINE_DMA_ENTRY(segment_01076000, "segment_01076000") +DEFINE_DMA_ENTRY(segment_01079000, "segment_01079000") +DEFINE_DMA_ENTRY(segment_0107B000, "segment_0107B000") +DEFINE_DMA_ENTRY(segment_0107D000, "segment_0107D000") +DEFINE_DMA_ENTRY(segment_0107F000, "segment_0107F000") +DEFINE_DMA_ENTRY(segment_01081000, "segment_01081000") +DEFINE_DMA_ENTRY(segment_01083000, "segment_01083000") +DEFINE_DMA_ENTRY(segment_01085000, "segment_01085000") +DEFINE_DMA_ENTRY(segment_01087000, "segment_01087000") +DEFINE_DMA_ENTRY(segment_01089000, "segment_01089000") +DEFINE_DMA_ENTRY(segment_0108B000, "segment_0108B000") +DEFINE_DMA_ENTRY(segment_0108D000, "segment_0108D000") +DEFINE_DMA_ENTRY(segment_0108F000, "segment_0108F000") +DEFINE_DMA_ENTRY(segment_01091000, "segment_01091000") +DEFINE_DMA_ENTRY(segment_01094000, "segment_01094000") +DEFINE_DMA_ENTRY(segment_01096000, "segment_01096000") +DEFINE_DMA_ENTRY(segment_01098000, "segment_01098000") +DEFINE_DMA_ENTRY(segment_0109A000, "segment_0109A000") +DEFINE_DMA_ENTRY(segment_0109C000, "segment_0109C000") +DEFINE_DMA_ENTRY(segment_0109E000, "segment_0109E000") +DEFINE_DMA_ENTRY(segment_010A0000, "segment_010A0000") +DEFINE_DMA_ENTRY(segment_010A2000, "segment_010A2000") +DEFINE_DMA_ENTRY(segment_010A4000, "segment_010A4000") +DEFINE_DMA_ENTRY(segment_010A6000, "segment_010A6000") +DEFINE_DMA_ENTRY(segment_010A8000, "segment_010A8000") +DEFINE_DMA_ENTRY(segment_010AA000, "segment_010AA000") +DEFINE_DMA_ENTRY(segment_010AC000, "segment_010AC000") +DEFINE_DMA_ENTRY(segment_010AE000, "segment_010AE000") +DEFINE_DMA_ENTRY(segment_010B1000, "segment_010B1000") +DEFINE_DMA_ENTRY(segment_010B3000, "segment_010B3000") +DEFINE_DMA_ENTRY(segment_010B6000, "segment_010B6000") +DEFINE_DMA_ENTRY(segment_010B8000, "segment_010B8000") +DEFINE_DMA_ENTRY(segment_010BB000, "segment_010BB000") +DEFINE_DMA_ENTRY(segment_010BD000, "segment_010BD000") +DEFINE_DMA_ENTRY(segment_010BF000, "segment_010BF000") +DEFINE_DMA_ENTRY(segment_010C1000, "segment_010C1000") +DEFINE_DMA_ENTRY(segment_010C3000, "segment_010C3000") +DEFINE_DMA_ENTRY(segment_010C5000, "segment_010C5000") +DEFINE_DMA_ENTRY(segment_010C7000, "segment_010C7000") +DEFINE_DMA_ENTRY(segment_010C9000, "segment_010C9000") +DEFINE_DMA_ENTRY(segment_010CB000, "segment_010CB000") +DEFINE_DMA_ENTRY(segment_010CD000, "segment_010CD000") +DEFINE_DMA_ENTRY(segment_010CF000, "segment_010CF000") +DEFINE_DMA_ENTRY(segment_010D2000, "segment_010D2000") +DEFINE_DMA_ENTRY(segment_010D4000, "segment_010D4000") +DEFINE_DMA_ENTRY(segment_010D7000, "segment_010D7000") +DEFINE_DMA_ENTRY(segment_010D9000, "segment_010D9000") +DEFINE_DMA_ENTRY(segment_010DC000, "segment_010DC000") +DEFINE_DMA_ENTRY(segment_010DE000, "segment_010DE000") +DEFINE_DMA_ENTRY(segment_010E0000, "segment_010E0000") +DEFINE_DMA_ENTRY(segment_010E2000, "segment_010E2000") +DEFINE_DMA_ENTRY(segment_010E5000, "segment_010E5000") +DEFINE_DMA_ENTRY(segment_010E7000, "segment_010E7000") +DEFINE_DMA_ENTRY(segment_010EA000, "segment_010EA000") +DEFINE_DMA_ENTRY(segment_010EC000, "segment_010EC000") +DEFINE_DMA_ENTRY(segment_010EE000, "segment_010EE000") +DEFINE_DMA_ENTRY(segment_010F0000, "segment_010F0000") +DEFINE_DMA_ENTRY(segment_010F2000, "segment_010F2000") +DEFINE_DMA_ENTRY(segment_010F4000, "segment_010F4000") +DEFINE_DMA_ENTRY(segment_01100000, "segment_01100000") +DEFINE_DMA_ENTRY(segment_01101000, "segment_01101000") +DEFINE_DMA_ENTRY(segment_01102000, "segment_01102000") +DEFINE_DMA_ENTRY(segment_01103000, "segment_01103000") +DEFINE_DMA_ENTRY(segment_01106000, "segment_01106000") +DEFINE_DMA_ENTRY(segment_01107000, "segment_01107000") +DEFINE_DMA_ENTRY(segment_01108000, "segment_01108000") +DEFINE_DMA_ENTRY(segment_01109000, "segment_01109000") +DEFINE_DMA_ENTRY(segment_0110A000, "segment_0110A000") +DEFINE_DMA_ENTRY(segment_0110B000, "segment_0110B000") +DEFINE_DMA_ENTRY(segment_0110C000, "segment_0110C000") +DEFINE_DMA_ENTRY(segment_0110D000, "segment_0110D000") +DEFINE_DMA_ENTRY(segment_0110E000, "segment_0110E000") +DEFINE_DMA_ENTRY(segment_0110F000, "segment_0110F000") +DEFINE_DMA_ENTRY(segment_01110000, "segment_01110000") +DEFINE_DMA_ENTRY(segment_01111000, "segment_01111000") +DEFINE_DMA_ENTRY(segment_01112000, "segment_01112000") +DEFINE_DMA_ENTRY(segment_01113000, "segment_01113000") +DEFINE_DMA_ENTRY(segment_01114000, "segment_01114000") +DEFINE_DMA_ENTRY(segment_01115000, "segment_01115000") +DEFINE_DMA_ENTRY(segment_01116000, "segment_01116000") +DEFINE_DMA_ENTRY(segment_01117000, "segment_01117000") +DEFINE_DMA_ENTRY(segment_01118000, "segment_01118000") +DEFINE_DMA_ENTRY(segment_01119000, "segment_01119000") +DEFINE_DMA_ENTRY(segment_0111A000, "segment_0111A000") +DEFINE_DMA_ENTRY(segment_0111B000, "segment_0111B000") +DEFINE_DMA_ENTRY(segment_0111C000, "segment_0111C000") +DEFINE_DMA_ENTRY(segment_0111D000, "segment_0111D000") +DEFINE_DMA_ENTRY(segment_0111E000, "segment_0111E000") +DEFINE_DMA_ENTRY(segment_0111F000, "segment_0111F000") +DEFINE_DMA_ENTRY(segment_01120000, "segment_01120000") +DEFINE_DMA_ENTRY(segment_01121000, "segment_01121000") +DEFINE_DMA_ENTRY(segment_01122000, "segment_01122000") +DEFINE_DMA_ENTRY(segment_01123000, "segment_01123000") +DEFINE_DMA_ENTRY(segment_01124000, "segment_01124000") +DEFINE_DMA_ENTRY(segment_01125000, "segment_01125000") +DEFINE_DMA_ENTRY(segment_01126000, "segment_01126000") +DEFINE_DMA_ENTRY(segment_01127000, "segment_01127000") +DEFINE_DMA_ENTRY(segment_01128000, "segment_01128000") +DEFINE_DMA_ENTRY(segment_01129000, "segment_01129000") +DEFINE_DMA_ENTRY(segment_0112A000, "segment_0112A000") +DEFINE_DMA_ENTRY(segment_0112B000, "segment_0112B000") +DEFINE_DMA_ENTRY(segment_0112C000, "segment_0112C000") +DEFINE_DMA_ENTRY(segment_0112D000, "segment_0112D000") +DEFINE_DMA_ENTRY(segment_0112F000, "segment_0112F000") +DEFINE_DMA_ENTRY(segment_01130000, "segment_01130000") +DEFINE_DMA_ENTRY(segment_01131000, "segment_01131000") +DEFINE_DMA_ENTRY(segment_01134000, "segment_01134000") +DEFINE_DMA_ENTRY(segment_01135000, "segment_01135000") +DEFINE_DMA_ENTRY(segment_01136000, "segment_01136000") +DEFINE_DMA_ENTRY(segment_0113C000, "segment_0113C000") +DEFINE_DMA_ENTRY(segment_0113D000, "segment_0113D000") +DEFINE_DMA_ENTRY(segment_01147000, "segment_01147000") +DEFINE_DMA_ENTRY(segment_01148000, "segment_01148000") +DEFINE_DMA_ENTRY(segment_0114A000, "segment_0114A000") +DEFINE_DMA_ENTRY(segment_01188000, "segment_01188000") +DEFINE_DMA_ENTRY(segment_011AB000, "segment_011AB000") +DEFINE_DMA_ENTRY(segment_011E2000, "segment_011E2000") +DEFINE_DMA_ENTRY(segment_011E3000, "segment_011E3000") +DEFINE_DMA_ENTRY(segment_011E4000, "segment_011E4000") +DEFINE_DMA_ENTRY(segment_011E5000, "segment_011E5000") +DEFINE_DMA_ENTRY(segment_011E6000, "segment_011E6000") +DEFINE_DMA_ENTRY(segment_011E7000, "segment_011E7000") +DEFINE_DMA_ENTRY(segment_011E8000, "segment_011E8000") +DEFINE_DMA_ENTRY(segment_011E9000, "segment_011E9000") +DEFINE_DMA_ENTRY(segment_011EA000, "segment_011EA000") +DEFINE_DMA_ENTRY(segment_011EB000, "segment_011EB000") +DEFINE_DMA_ENTRY(segment_011EC000, "segment_011EC000") +DEFINE_DMA_ENTRY(segment_011ED000, "segment_011ED000") +DEFINE_DMA_ENTRY(segment_011EE000, "segment_011EE000") +DEFINE_DMA_ENTRY(segment_011EF000, "segment_011EF000") +DEFINE_DMA_ENTRY(segment_011F0000, "segment_011F0000") +DEFINE_DMA_ENTRY(segment_011F1000, "segment_011F1000") +DEFINE_DMA_ENTRY(segment_011F2000, "segment_011F2000") +DEFINE_DMA_ENTRY(segment_011F3000, "segment_011F3000") +DEFINE_DMA_ENTRY(segment_011F4000, "segment_011F4000") +DEFINE_DMA_ENTRY(segment_011F5000, "segment_011F5000") +DEFINE_DMA_ENTRY(segment_011F6000, "segment_011F6000") +DEFINE_DMA_ENTRY(segment_011F8000, "segment_011F8000") +DEFINE_DMA_ENTRY(segment_011FA000, "segment_011FA000") +DEFINE_DMA_ENTRY(segment_011FC000, "segment_011FC000") +DEFINE_DMA_ENTRY(segment_011FE000, "segment_011FE000") +DEFINE_DMA_ENTRY(segment_01200000, "segment_01200000") +DEFINE_DMA_ENTRY(segment_01202000, "segment_01202000") +DEFINE_DMA_ENTRY(segment_01203000, "segment_01203000") +DEFINE_DMA_ENTRY(segment_01205000, "segment_01205000") +DEFINE_DMA_ENTRY(segment_01207000, "segment_01207000") +DEFINE_DMA_ENTRY(segment_01209000, "segment_01209000") +DEFINE_DMA_ENTRY(segment_0120B000, "segment_0120B000") +DEFINE_DMA_ENTRY(segment_0120D000, "segment_0120D000") +DEFINE_DMA_ENTRY(segment_0120F000, "segment_0120F000") +DEFINE_DMA_ENTRY(segment_01211000, "segment_01211000") +DEFINE_DMA_ENTRY(segment_01213000, "segment_01213000") +DEFINE_DMA_ENTRY(segment_01215000, "segment_01215000") +DEFINE_DMA_ENTRY(segment_01217000, "segment_01217000") +DEFINE_DMA_ENTRY(segment_01218000, "segment_01218000") +DEFINE_DMA_ENTRY(segment_0121A000, "segment_0121A000") +DEFINE_DMA_ENTRY(segment_0121C000, "segment_0121C000") +DEFINE_DMA_ENTRY(segment_0121E000, "segment_0121E000") +DEFINE_DMA_ENTRY(segment_01220000, "segment_01220000") +DEFINE_DMA_ENTRY(segment_01222000, "segment_01222000") +DEFINE_DMA_ENTRY(segment_01224000, "segment_01224000") +DEFINE_DMA_ENTRY(segment_01226000, "segment_01226000") +DEFINE_DMA_ENTRY(segment_01228000, "segment_01228000") +DEFINE_DMA_ENTRY(segment_0122A000, "segment_0122A000") +DEFINE_DMA_ENTRY(segment_0122C000, "segment_0122C000") +DEFINE_DMA_ENTRY(segment_0122E000, "segment_0122E000") +DEFINE_DMA_ENTRY(segment_01230000, "segment_01230000") +DEFINE_DMA_ENTRY(segment_01232000, "segment_01232000") +DEFINE_DMA_ENTRY(segment_01234000, "segment_01234000") +DEFINE_DMA_ENTRY(segment_01236000, "segment_01236000") +DEFINE_DMA_ENTRY(segment_01238000, "segment_01238000") +DEFINE_DMA_ENTRY(segment_0123A000, "segment_0123A000") +DEFINE_DMA_ENTRY(segment_0123C000, "segment_0123C000") +DEFINE_DMA_ENTRY(segment_0123E000, "segment_0123E000") +DEFINE_DMA_ENTRY(segment_01240000, "segment_01240000") +DEFINE_DMA_ENTRY(segment_01242000, "segment_01242000") +DEFINE_DMA_ENTRY(segment_01244000, "segment_01244000") +DEFINE_DMA_ENTRY(segment_01245000, "segment_01245000") +DEFINE_DMA_ENTRY(segment_01247000, "segment_01247000") +DEFINE_DMA_ENTRY(segment_01249000, "segment_01249000") +DEFINE_DMA_ENTRY(segment_0124B000, "segment_0124B000") +DEFINE_DMA_ENTRY(segment_0124D000, "segment_0124D000") +DEFINE_DMA_ENTRY(segment_0124F000, "segment_0124F000") +DEFINE_DMA_ENTRY(segment_01251000, "segment_01251000") +DEFINE_DMA_ENTRY(segment_01253000, "segment_01253000") +DEFINE_DMA_ENTRY(segment_01255000, "segment_01255000") +DEFINE_DMA_ENTRY(segment_01257000, "segment_01257000") +DEFINE_DMA_ENTRY(segment_01259000, "segment_01259000") +DEFINE_DMA_ENTRY(segment_0125B000, "segment_0125B000") +DEFINE_DMA_ENTRY(segment_0125D000, "segment_0125D000") +DEFINE_DMA_ENTRY(segment_0125F000, "segment_0125F000") +DEFINE_DMA_ENTRY(segment_01261000, "segment_01261000") +DEFINE_DMA_ENTRY(segment_01263000, "segment_01263000") +DEFINE_DMA_ENTRY(segment_01265000, "segment_01265000") +DEFINE_DMA_ENTRY(segment_01267000, "segment_01267000") +DEFINE_DMA_ENTRY(segment_01269000, "segment_01269000") +DEFINE_DMA_ENTRY(segment_0126B000, "segment_0126B000") +DEFINE_DMA_ENTRY(segment_0126D000, "segment_0126D000") +DEFINE_DMA_ENTRY(segment_0126F000, "segment_0126F000") +DEFINE_DMA_ENTRY(segment_01271000, "segment_01271000") +DEFINE_DMA_ENTRY(segment_01273000, "segment_01273000") +DEFINE_DMA_ENTRY(segment_01275000, "segment_01275000") +DEFINE_DMA_ENTRY(segment_01277000, "segment_01277000") +DEFINE_DMA_ENTRY(segment_01279000, "segment_01279000") +DEFINE_DMA_ENTRY(segment_0127B000, "segment_0127B000") +DEFINE_DMA_ENTRY(segment_0127D000, "segment_0127D000") +DEFINE_DMA_ENTRY(segment_0127F000, "segment_0127F000") +DEFINE_DMA_ENTRY(segment_01281000, "segment_01281000") +DEFINE_DMA_ENTRY(segment_01283000, "segment_01283000") +DEFINE_DMA_ENTRY(segment_01285000, "segment_01285000") +DEFINE_DMA_ENTRY(segment_01287000, "segment_01287000") +DEFINE_DMA_ENTRY(segment_01289000, "segment_01289000") +DEFINE_DMA_ENTRY(segment_0128B000, "segment_0128B000") +DEFINE_DMA_ENTRY(segment_0128D000, "segment_0128D000") +DEFINE_DMA_ENTRY(segment_0128F000, "segment_0128F000") +DEFINE_DMA_ENTRY(segment_01291000, "segment_01291000") +DEFINE_DMA_ENTRY(segment_01293000, "segment_01293000") +DEFINE_DMA_ENTRY(segment_01295000, "segment_01295000") +DEFINE_DMA_ENTRY(segment_01297000, "segment_01297000") +DEFINE_DMA_ENTRY(segment_01298000, "segment_01298000") +DEFINE_DMA_ENTRY(segment_0129A000, "segment_0129A000") +DEFINE_DMA_ENTRY(segment_0129C000, "segment_0129C000") +DEFINE_DMA_ENTRY(segment_0129E000, "segment_0129E000") +DEFINE_DMA_ENTRY(segment_012A0000, "segment_012A0000") +DEFINE_DMA_ENTRY(segment_012A2000, "segment_012A2000") +DEFINE_DMA_ENTRY(segment_012A4000, "segment_012A4000") +DEFINE_DMA_ENTRY(segment_012A6000, "segment_012A6000") +DEFINE_DMA_ENTRY(segment_012A8000, "segment_012A8000") +DEFINE_DMA_ENTRY(segment_012AA000, "segment_012AA000") +DEFINE_DMA_ENTRY(segment_012AC000, "segment_012AC000") +DEFINE_DMA_ENTRY(segment_012B2000, "segment_012B2000") +DEFINE_DMA_ENTRY(segment_012B9000, "segment_012B9000") +DEFINE_DMA_ENTRY(segment_012BB000, "segment_012BB000") +DEFINE_DMA_ENTRY(segment_012C2000, "segment_012C2000") +DEFINE_DMA_ENTRY(segment_012C6000, "segment_012C6000") +DEFINE_DMA_ENTRY(segment_012C8000, "segment_012C8000") +DEFINE_DMA_ENTRY(segment_012CA000, "segment_012CA000") +DEFINE_DMA_ENTRY(segment_012CC000, "segment_012CC000") +DEFINE_DMA_ENTRY(segment_012CE000, "segment_012CE000") +DEFINE_DMA_ENTRY(segment_012D0000, "segment_012D0000") +DEFINE_DMA_ENTRY(segment_012D2000, "segment_012D2000") +DEFINE_DMA_ENTRY(segment_012D4000, "segment_012D4000") +DEFINE_DMA_ENTRY(segment_012D6000, "segment_012D6000") +DEFINE_DMA_ENTRY(segment_012D8000, "segment_012D8000") +DEFINE_DMA_ENTRY(segment_012DA000, "segment_012DA000") +DEFINE_DMA_ENTRY(segment_012DC000, "segment_012DC000") +DEFINE_DMA_ENTRY(segment_012DE000, "segment_012DE000") +DEFINE_DMA_ENTRY(segment_012E0000, "segment_012E0000") +DEFINE_DMA_ENTRY(segment_012E2000, "segment_012E2000") +DEFINE_DMA_ENTRY(segment_012E4000, "segment_012E4000") +DEFINE_DMA_ENTRY(segment_012E6000, "segment_012E6000") +DEFINE_DMA_ENTRY(segment_012E8000, "segment_012E8000") +DEFINE_DMA_ENTRY(segment_012EA000, "segment_012EA000") +DEFINE_DMA_ENTRY(segment_012EC000, "segment_012EC000") +DEFINE_DMA_ENTRY(segment_012EE000, "segment_012EE000") +DEFINE_DMA_ENTRY(segment_012F0000, "segment_012F0000") +DEFINE_DMA_ENTRY(segment_012F2000, "segment_012F2000") +DEFINE_DMA_ENTRY(segment_012F4000, "segment_012F4000") +DEFINE_DMA_ENTRY(segment_012F6000, "segment_012F6000") +DEFINE_DMA_ENTRY(segment_012F8000, "segment_012F8000") +DEFINE_DMA_ENTRY(segment_012FA000, "segment_012FA000") +DEFINE_DMA_ENTRY(segment_012FB000, "segment_012FB000") +DEFINE_DMA_ENTRY(segment_012FD000, "segment_012FD000") +DEFINE_DMA_ENTRY(segment_012FF000, "segment_012FF000") +DEFINE_DMA_ENTRY(segment_01301000, "segment_01301000") +DEFINE_DMA_ENTRY(segment_01303000, "segment_01303000") +DEFINE_DMA_ENTRY(segment_01305000, "segment_01305000") +DEFINE_DMA_ENTRY(segment_01307000, "segment_01307000") +DEFINE_DMA_ENTRY(segment_01309000, "segment_01309000") +DEFINE_DMA_ENTRY(segment_0130B000, "segment_0130B000") +DEFINE_DMA_ENTRY(segment_0130C000, "segment_0130C000") +DEFINE_DMA_ENTRY(segment_0130E000, "segment_0130E000") +DEFINE_DMA_ENTRY(segment_01310000, "segment_01310000") +DEFINE_DMA_ENTRY(segment_01312000, "segment_01312000") +DEFINE_DMA_ENTRY(segment_01314000, "segment_01314000") +DEFINE_DMA_ENTRY(segment_01316000, "segment_01316000") +DEFINE_DMA_ENTRY(segment_01318000, "segment_01318000") +DEFINE_DMA_ENTRY(segment_0131A000, "segment_0131A000") +DEFINE_DMA_ENTRY(segment_0131C000, "segment_0131C000") +DEFINE_DMA_ENTRY(segment_0131E000, "segment_0131E000") +DEFINE_DMA_ENTRY(segment_01320000, "segment_01320000") +DEFINE_DMA_ENTRY(segment_01322000, "segment_01322000") +DEFINE_DMA_ENTRY(segment_01324000, "segment_01324000") +DEFINE_DMA_ENTRY(segment_01326000, "segment_01326000") +DEFINE_DMA_ENTRY(segment_01328000, "segment_01328000") +DEFINE_DMA_ENTRY(segment_0132A000, "segment_0132A000") +DEFINE_DMA_ENTRY(segment_0132C000, "segment_0132C000") +DEFINE_DMA_ENTRY(segment_0132E000, "segment_0132E000") +DEFINE_DMA_ENTRY(segment_01330000, "segment_01330000") +DEFINE_DMA_ENTRY(segment_01331000, "segment_01331000") +DEFINE_DMA_ENTRY(segment_01333000, "segment_01333000") +DEFINE_DMA_ENTRY(segment_01334000, "segment_01334000") +DEFINE_DMA_ENTRY(segment_01335000, "segment_01335000") +DEFINE_DMA_ENTRY(segment_01336000, "segment_01336000") +DEFINE_DMA_ENTRY(segment_01337000, "segment_01337000") +DEFINE_DMA_ENTRY(segment_01338000, "segment_01338000") +DEFINE_DMA_ENTRY(segment_01339000, "segment_01339000") +DEFINE_DMA_ENTRY(segment_0133A000, "segment_0133A000") +DEFINE_DMA_ENTRY(segment_0133B000, "segment_0133B000") +DEFINE_DMA_ENTRY(segment_0133D000, "segment_0133D000") +DEFINE_DMA_ENTRY(segment_0133E000, "segment_0133E000") +DEFINE_DMA_ENTRY(segment_01340000, "segment_01340000") +DEFINE_DMA_ENTRY(segment_01342000, "segment_01342000") +DEFINE_DMA_ENTRY(segment_01344000, "segment_01344000") +DEFINE_DMA_ENTRY(segment_01345000, "segment_01345000") +DEFINE_DMA_ENTRY(segment_01347000, "segment_01347000") +DEFINE_DMA_ENTRY(segment_01349000, "segment_01349000") +DEFINE_DMA_ENTRY(segment_0134B000, "segment_0134B000") +DEFINE_DMA_ENTRY(segment_0134C000, "segment_0134C000") +DEFINE_DMA_ENTRY(segment_0134D000, "segment_0134D000") +DEFINE_DMA_ENTRY(segment_0134F000, "segment_0134F000") +DEFINE_DMA_ENTRY(segment_01350000, "segment_01350000") +DEFINE_DMA_ENTRY(segment_01352000, "segment_01352000") +DEFINE_DMA_ENTRY(segment_01353000, "segment_01353000") +DEFINE_DMA_ENTRY(segment_01355000, "segment_01355000") +DEFINE_DMA_ENTRY(segment_01357000, "segment_01357000") +DEFINE_DMA_ENTRY(segment_01359000, "segment_01359000") +DEFINE_DMA_ENTRY(segment_0135B000, "segment_0135B000") +DEFINE_DMA_ENTRY(segment_0135D000, "segment_0135D000") +DEFINE_DMA_ENTRY(segment_0135F000, "segment_0135F000") +DEFINE_DMA_ENTRY(segment_01361000, "segment_01361000") +DEFINE_DMA_ENTRY(segment_01363000, "segment_01363000") +DEFINE_DMA_ENTRY(segment_01365000, "segment_01365000") +DEFINE_DMA_ENTRY(segment_01367000, "segment_01367000") +DEFINE_DMA_ENTRY(segment_01369000, "segment_01369000") +DEFINE_DMA_ENTRY(segment_0136B000, "segment_0136B000") +DEFINE_DMA_ENTRY(segment_0136D000, "segment_0136D000") +DEFINE_DMA_ENTRY(segment_0136F000, "segment_0136F000") +DEFINE_DMA_ENTRY(segment_01371000, "segment_01371000") +DEFINE_DMA_ENTRY(segment_01373000, "segment_01373000") +DEFINE_DMA_ENTRY(segment_01375000, "segment_01375000") +DEFINE_DMA_ENTRY(segment_01377000, "segment_01377000") +DEFINE_DMA_ENTRY(segment_01379000, "segment_01379000") +DEFINE_DMA_ENTRY(segment_0137B000, "segment_0137B000") +DEFINE_DMA_ENTRY(segment_0137C000, "segment_0137C000") +DEFINE_DMA_ENTRY(segment_0137D000, "segment_0137D000") +DEFINE_DMA_ENTRY(segment_0137F000, "segment_0137F000") +DEFINE_DMA_ENTRY(segment_01381000, "segment_01381000") +DEFINE_DMA_ENTRY(segment_01383000, "segment_01383000") +DEFINE_DMA_ENTRY(segment_0138A000, "segment_0138A000") +DEFINE_DMA_ENTRY(segment_0138F000, "segment_0138F000") +DEFINE_DMA_ENTRY(segment_01390000, "segment_01390000") +DEFINE_DMA_ENTRY(segment_01393000, "segment_01393000") +DEFINE_DMA_ENTRY(segment_01397000, "segment_01397000") +DEFINE_DMA_ENTRY(segment_01398000, "segment_01398000") +DEFINE_DMA_ENTRY(segment_0139A000, "segment_0139A000") +DEFINE_DMA_ENTRY(segment_0139C000, "segment_0139C000") +DEFINE_DMA_ENTRY(segment_0139E000, "segment_0139E000") +DEFINE_DMA_ENTRY(segment_013A0000, "segment_013A0000") +DEFINE_DMA_ENTRY(segment_013A2000, "segment_013A2000") +DEFINE_DMA_ENTRY(segment_013A4000, "segment_013A4000") +DEFINE_DMA_ENTRY(segment_013A5000, "segment_013A5000") +DEFINE_DMA_ENTRY(segment_013A6000, "segment_013A6000") +DEFINE_DMA_ENTRY(segment_013A7000, "segment_013A7000") +DEFINE_DMA_ENTRY(segment_013A8000, "segment_013A8000") +DEFINE_DMA_ENTRY(segment_013A9000, "segment_013A9000") +DEFINE_DMA_ENTRY(segment_013AB000, "segment_013AB000") +DEFINE_DMA_ENTRY(segment_013AC000, "segment_013AC000") +DEFINE_DMA_ENTRY(segment_013AF000, "segment_013AF000") +DEFINE_DMA_ENTRY(segment_013B6000, "segment_013B6000") +DEFINE_DMA_ENTRY(segment_013BB000, "segment_013BB000") +DEFINE_DMA_ENTRY(segment_013BF000, "segment_013BF000") +DEFINE_DMA_ENTRY(segment_013C7000, "segment_013C7000") +DEFINE_DMA_ENTRY(segment_013CD000, "segment_013CD000") +DEFINE_DMA_ENTRY(segment_013D4000, "segment_013D4000") +DEFINE_DMA_ENTRY(segment_013DC000, "segment_013DC000") +DEFINE_DMA_ENTRY(segment_013E2000, "segment_013E2000") +DEFINE_DMA_ENTRY(segment_013E3000, "segment_013E3000") +DEFINE_DMA_ENTRY(segment_013E5000, "segment_013E5000") +DEFINE_DMA_ENTRY(segment_013E7000, "segment_013E7000") +DEFINE_DMA_ENTRY(segment_013E9000, "segment_013E9000") +DEFINE_DMA_ENTRY(segment_013EB000, "segment_013EB000") +DEFINE_DMA_ENTRY(segment_013EC000, "segment_013EC000") +DEFINE_DMA_ENTRY(segment_013F1000, "segment_013F1000") +DEFINE_DMA_ENTRY(segment_013F3000, "segment_013F3000") +DEFINE_DMA_ENTRY(segment_01408000, "segment_01408000") +DEFINE_DMA_ENTRY(segment_01409000, "segment_01409000") +DEFINE_DMA_ENTRY(segment_0140A000, "segment_0140A000") +DEFINE_DMA_ENTRY(segment_0140B000, "segment_0140B000") +DEFINE_DMA_ENTRY(segment_0140C000, "segment_0140C000") +DEFINE_DMA_ENTRY(segment_01410000, "segment_01410000") +DEFINE_DMA_ENTRY(segment_01427000, "segment_01427000") +DEFINE_DMA_ENTRY(segment_01428000, "segment_01428000") +DEFINE_DMA_ENTRY(segment_01429000, "segment_01429000") +DEFINE_DMA_ENTRY(segment_0142A000, "segment_0142A000") +DEFINE_DMA_ENTRY(segment_0142B000, "segment_0142B000") +DEFINE_DMA_ENTRY(segment_0142C000, "segment_0142C000") +DEFINE_DMA_ENTRY(segment_0142D000, "segment_0142D000") +DEFINE_DMA_ENTRY(segment_0142E000, "segment_0142E000") +DEFINE_DMA_ENTRY(segment_0142F000, "segment_0142F000") +DEFINE_DMA_ENTRY(segment_01430000, "segment_01430000") +DEFINE_DMA_ENTRY(segment_01431000, "segment_01431000") +DEFINE_DMA_ENTRY(segment_01432000, "segment_01432000") +DEFINE_DMA_ENTRY(segment_01434000, "segment_01434000") +DEFINE_DMA_ENTRY(segment_01435000, "segment_01435000") +DEFINE_DMA_ENTRY(segment_01436000, "segment_01436000") +DEFINE_DMA_ENTRY(segment_01437000, "segment_01437000") +DEFINE_DMA_ENTRY(segment_01438000, "segment_01438000") +DEFINE_DMA_ENTRY(segment_01439000, "segment_01439000") +DEFINE_DMA_ENTRY(segment_0143A000, "segment_0143A000") +DEFINE_DMA_ENTRY(segment_0143B000, "segment_0143B000") +DEFINE_DMA_ENTRY(segment_0143D000, "segment_0143D000") +DEFINE_DMA_ENTRY(segment_0143E000, "segment_0143E000") +DEFINE_DMA_ENTRY(segment_0143F000, "segment_0143F000") +DEFINE_DMA_ENTRY(segment_01440000, "segment_01440000") +DEFINE_DMA_ENTRY(segment_01441000, "segment_01441000") +DEFINE_DMA_ENTRY(segment_01442000, "segment_01442000") +DEFINE_DMA_ENTRY(segment_01443000, "segment_01443000") +DEFINE_DMA_ENTRY(segment_01444000, "segment_01444000") +DEFINE_DMA_ENTRY(segment_01445000, "segment_01445000") +DEFINE_DMA_ENTRY(segment_01446000, "segment_01446000") +DEFINE_DMA_ENTRY(segment_01447000, "segment_01447000") +DEFINE_DMA_ENTRY(segment_01448000, "segment_01448000") +DEFINE_DMA_ENTRY(segment_01449000, "segment_01449000") +DEFINE_DMA_ENTRY(segment_0144A000, "segment_0144A000") +DEFINE_DMA_ENTRY(segment_0144B000, "segment_0144B000") +DEFINE_DMA_ENTRY(segment_0144C000, "segment_0144C000") +DEFINE_DMA_ENTRY(segment_0144D000, "segment_0144D000") +DEFINE_DMA_ENTRY(segment_0144E000, "segment_0144E000") +DEFINE_DMA_ENTRY(segment_01450000, "segment_01450000") +DEFINE_DMA_ENTRY(segment_01451000, "segment_01451000") +DEFINE_DMA_ENTRY(segment_01452000, "segment_01452000") +DEFINE_DMA_ENTRY(segment_01453000, "segment_01453000") +DEFINE_DMA_ENTRY(segment_01454000, "segment_01454000") +DEFINE_DMA_ENTRY(segment_01455000, "segment_01455000") +DEFINE_DMA_ENTRY(segment_01456000, "segment_01456000") +DEFINE_DMA_ENTRY(segment_01458000, "segment_01458000") +DEFINE_DMA_ENTRY(segment_01459000, "segment_01459000") +DEFINE_DMA_ENTRY(segment_0145A000, "segment_0145A000") +DEFINE_DMA_ENTRY(segment_0145C000, "segment_0145C000") +DEFINE_DMA_ENTRY(segment_0145D000, "segment_0145D000") +DEFINE_DMA_ENTRY(segment_0145E000, "segment_0145E000") +DEFINE_DMA_ENTRY(segment_0145F000, "segment_0145F000") +DEFINE_DMA_ENTRY(segment_01460000, "segment_01460000") +DEFINE_DMA_ENTRY(segment_01461000, "segment_01461000") +DEFINE_DMA_ENTRY(segment_01462000, "segment_01462000") +DEFINE_DMA_ENTRY(segment_01463000, "segment_01463000") +DEFINE_DMA_ENTRY(segment_01464000, "segment_01464000") +DEFINE_DMA_ENTRY(segment_01465000, "segment_01465000") +DEFINE_DMA_ENTRY(segment_01466000, "segment_01466000") +DEFINE_DMA_ENTRY(segment_01467000, "segment_01467000") +DEFINE_DMA_ENTRY(segment_01468000, "segment_01468000") +DEFINE_DMA_ENTRY(segment_01469000, "segment_01469000") +DEFINE_DMA_ENTRY(segment_0146A000, "segment_0146A000") +DEFINE_DMA_ENTRY(segment_0146B000, "segment_0146B000") +DEFINE_DMA_ENTRY(segment_0146C000, "segment_0146C000") +DEFINE_DMA_ENTRY(segment_0146D000, "segment_0146D000") +DEFINE_DMA_ENTRY(segment_0146E000, "segment_0146E000") +DEFINE_DMA_ENTRY(segment_0146F000, "segment_0146F000") +DEFINE_DMA_ENTRY(segment_01470000, "segment_01470000") +DEFINE_DMA_ENTRY(segment_01471000, "segment_01471000") +DEFINE_DMA_ENTRY(segment_01472000, "segment_01472000") +DEFINE_DMA_ENTRY(segment_01473000, "segment_01473000") +DEFINE_DMA_ENTRY(segment_01474000, "segment_01474000") +DEFINE_DMA_ENTRY(segment_01475000, "segment_01475000") +DEFINE_DMA_ENTRY(segment_01476000, "segment_01476000") +DEFINE_DMA_ENTRY(segment_01477000, "segment_01477000") +DEFINE_DMA_ENTRY(segment_01478000, "segment_01478000") +DEFINE_DMA_ENTRY(segment_01479000, "segment_01479000") +DEFINE_DMA_ENTRY(segment_0147A000, "segment_0147A000") +DEFINE_DMA_ENTRY(segment_0147B000, "segment_0147B000") +DEFINE_DMA_ENTRY(segment_0147C000, "segment_0147C000") +DEFINE_DMA_ENTRY(segment_0147D000, "segment_0147D000") +DEFINE_DMA_ENTRY(segment_0147F000, "segment_0147F000") +DEFINE_DMA_ENTRY(segment_01480000, "segment_01480000") +DEFINE_DMA_ENTRY(segment_01481000, "segment_01481000") +DEFINE_DMA_ENTRY(segment_01482000, "segment_01482000") +DEFINE_DMA_ENTRY(segment_01484000, "segment_01484000") +DEFINE_DMA_ENTRY(segment_01486000, "segment_01486000") +DEFINE_DMA_ENTRY(segment_01488000, "segment_01488000") +DEFINE_DMA_ENTRY(segment_01489000, "segment_01489000") +DEFINE_DMA_ENTRY(segment_0148A000, "segment_0148A000") +DEFINE_DMA_ENTRY(segment_0148B000, "segment_0148B000") +DEFINE_DMA_ENTRY(segment_0148C000, "segment_0148C000") +DEFINE_DMA_ENTRY(segment_0148D000, "segment_0148D000") +DEFINE_DMA_ENTRY(segment_0148E000, "segment_0148E000") +DEFINE_DMA_ENTRY(segment_0148F000, "segment_0148F000") +DEFINE_DMA_ENTRY(segment_01490000, "segment_01490000") +DEFINE_DMA_ENTRY(segment_01491000, "segment_01491000") +DEFINE_DMA_ENTRY(segment_01492000, "segment_01492000") +DEFINE_DMA_ENTRY(segment_01493000, "segment_01493000") +DEFINE_DMA_ENTRY(segment_01495000, "segment_01495000") +DEFINE_DMA_ENTRY(segment_01496000, "segment_01496000") +DEFINE_DMA_ENTRY(segment_01497000, "segment_01497000") +DEFINE_DMA_ENTRY(segment_01498000, "segment_01498000") +DEFINE_DMA_ENTRY(segment_01499000, "segment_01499000") +DEFINE_DMA_ENTRY(segment_0149A000, "segment_0149A000") +DEFINE_DMA_ENTRY(segment_0149B000, "segment_0149B000") +DEFINE_DMA_ENTRY(segment_0149C000, "segment_0149C000") +DEFINE_DMA_ENTRY(segment_0149D000, "segment_0149D000") +DEFINE_DMA_ENTRY(segment_0149E000, "segment_0149E000") +DEFINE_DMA_ENTRY(segment_0149F000, "segment_0149F000") +DEFINE_DMA_ENTRY(segment_014A0000, "segment_014A0000") +DEFINE_DMA_ENTRY(segment_014A1000, "segment_014A1000") +DEFINE_DMA_ENTRY(segment_014A2000, "segment_014A2000") +DEFINE_DMA_ENTRY(segment_014A3000, "segment_014A3000") +DEFINE_DMA_ENTRY(segment_014A5000, "segment_014A5000") +DEFINE_DMA_ENTRY(segment_014A6000, "segment_014A6000") +DEFINE_DMA_ENTRY(segment_014A7000, "segment_014A7000") +DEFINE_DMA_ENTRY(segment_014A8000, "segment_014A8000") +DEFINE_DMA_ENTRY(segment_014AA000, "segment_014AA000") +DEFINE_DMA_ENTRY(segment_014AB000, "segment_014AB000") +DEFINE_DMA_ENTRY(segment_014AC000, "segment_014AC000") +DEFINE_DMA_ENTRY(segment_014AE000, "segment_014AE000") +DEFINE_DMA_ENTRY(segment_014AF000, "segment_014AF000") +DEFINE_DMA_ENTRY(segment_014B0000, "segment_014B0000") +DEFINE_DMA_ENTRY(segment_014B1000, "segment_014B1000") +DEFINE_DMA_ENTRY(segment_014B2000, "segment_014B2000") +DEFINE_DMA_ENTRY(segment_014B3000, "segment_014B3000") +DEFINE_DMA_ENTRY(segment_014B4000, "segment_014B4000") +DEFINE_DMA_ENTRY(segment_014B6000, "segment_014B6000") +DEFINE_DMA_ENTRY(segment_014B7000, "segment_014B7000") +DEFINE_DMA_ENTRY(segment_014B8000, "segment_014B8000") +DEFINE_DMA_ENTRY(segment_014B9000, "segment_014B9000") +DEFINE_DMA_ENTRY(segment_014BA000, "segment_014BA000") +DEFINE_DMA_ENTRY(segment_014BB000, "segment_014BB000") +DEFINE_DMA_ENTRY(segment_014BC000, "segment_014BC000") +DEFINE_DMA_ENTRY(segment_014BD000, "segment_014BD000") +DEFINE_DMA_ENTRY(segment_014BE000, "segment_014BE000") +DEFINE_DMA_ENTRY(segment_014BF000, "segment_014BF000") +DEFINE_DMA_ENTRY(segment_014C0000, "segment_014C0000") +DEFINE_DMA_ENTRY(segment_014C1000, "segment_014C1000") +DEFINE_DMA_ENTRY(segment_014C2000, "segment_014C2000") +DEFINE_DMA_ENTRY(segment_014C3000, "segment_014C3000") +DEFINE_DMA_ENTRY(segment_014C4000, "segment_014C4000") +DEFINE_DMA_ENTRY(segment_014C5000, "segment_014C5000") +DEFINE_DMA_ENTRY(segment_014C6000, "segment_014C6000") +DEFINE_DMA_ENTRY(segment_014C7000, "segment_014C7000") +DEFINE_DMA_ENTRY(segment_014C8000, "segment_014C8000") +DEFINE_DMA_ENTRY(segment_014C9000, "segment_014C9000") +DEFINE_DMA_ENTRY(segment_014CA000, "segment_014CA000") +DEFINE_DMA_ENTRY(segment_014CB000, "segment_014CB000") +DEFINE_DMA_ENTRY(segment_014CC000, "segment_014CC000") +DEFINE_DMA_ENTRY(segment_014CD000, "segment_014CD000") +DEFINE_DMA_ENTRY(segment_014CF000, "segment_014CF000") +DEFINE_DMA_ENTRY(segment_014D0000, "segment_014D0000") +DEFINE_DMA_ENTRY(segment_014D1000, "segment_014D1000") +DEFINE_DMA_ENTRY(segment_014D2000, "segment_014D2000") +DEFINE_DMA_ENTRY(segment_014D3000, "segment_014D3000") +DEFINE_DMA_ENTRY(segment_014D4000, "segment_014D4000") +DEFINE_DMA_ENTRY(segment_014D5000, "segment_014D5000") +DEFINE_DMA_ENTRY(segment_014D6000, "segment_014D6000") +DEFINE_DMA_ENTRY(segment_014D7000, "segment_014D7000") +DEFINE_DMA_ENTRY(segment_014D8000, "segment_014D8000") +DEFINE_DMA_ENTRY(segment_014D9000, "segment_014D9000") +DEFINE_DMA_ENTRY(segment_014DA000, "segment_014DA000") +DEFINE_DMA_ENTRY(segment_014DB000, "segment_014DB000") +DEFINE_DMA_ENTRY(segment_014DC000, "segment_014DC000") +DEFINE_DMA_ENTRY(segment_014DE000, "segment_014DE000") +DEFINE_DMA_ENTRY(segment_014E0000, "segment_014E0000") +DEFINE_DMA_ENTRY(segment_014E1000, "segment_014E1000") +DEFINE_DMA_ENTRY(segment_014E2000, "segment_014E2000") +DEFINE_DMA_ENTRY(segment_014E3000, "segment_014E3000") +DEFINE_DMA_ENTRY(segment_014E4000, "segment_014E4000") +DEFINE_DMA_ENTRY(segment_014E6000, "segment_014E6000") +DEFINE_DMA_ENTRY(segment_014E7000, "segment_014E7000") +DEFINE_DMA_ENTRY(segment_014E8000, "segment_014E8000") +DEFINE_DMA_ENTRY(segment_014E9000, "segment_014E9000") +DEFINE_DMA_ENTRY(segment_014EA000, "segment_014EA000") +DEFINE_DMA_ENTRY(segment_014EB000, "segment_014EB000") +DEFINE_DMA_ENTRY(segment_014EC000, "segment_014EC000") +DEFINE_DMA_ENTRY(segment_014ED000, "segment_014ED000") +DEFINE_DMA_ENTRY(segment_014EE000, "segment_014EE000") +DEFINE_DMA_ENTRY(segment_014EF000, "segment_014EF000") +DEFINE_DMA_ENTRY(segment_014F0000, "segment_014F0000") +DEFINE_DMA_ENTRY(segment_014F1000, "segment_014F1000") +DEFINE_DMA_ENTRY(segment_014F2000, "segment_014F2000") +DEFINE_DMA_ENTRY(segment_014F3000, "segment_014F3000") +DEFINE_DMA_ENTRY(segment_014F4000, "segment_014F4000") +DEFINE_DMA_ENTRY(segment_014F5000, "segment_014F5000") +DEFINE_DMA_ENTRY(segment_014F6000, "segment_014F6000") +DEFINE_DMA_ENTRY(segment_014F7000, "segment_014F7000") +DEFINE_DMA_ENTRY(segment_014F8000, "segment_014F8000") +DEFINE_DMA_ENTRY(segment_014F9000, "segment_014F9000") +DEFINE_DMA_ENTRY(segment_014FA000, "segment_014FA000") +DEFINE_DMA_ENTRY(segment_014FC000, "segment_014FC000") +DEFINE_DMA_ENTRY(segment_014FD000, "segment_014FD000") +DEFINE_DMA_ENTRY(segment_014FE000, "segment_014FE000") +DEFINE_DMA_ENTRY(segment_01500000, "segment_01500000") +DEFINE_DMA_ENTRY(segment_01502000, "segment_01502000") +DEFINE_DMA_ENTRY(segment_01503000, "segment_01503000") +DEFINE_DMA_ENTRY(segment_01504000, "segment_01504000") +DEFINE_DMA_ENTRY(segment_01506000, "segment_01506000") +DEFINE_DMA_ENTRY(segment_01508000, "segment_01508000") +DEFINE_DMA_ENTRY(segment_01509000, "segment_01509000") +DEFINE_DMA_ENTRY(segment_0150A000, "segment_0150A000") +DEFINE_DMA_ENTRY(segment_0150B000, "segment_0150B000") +DEFINE_DMA_ENTRY(segment_0150C000, "segment_0150C000") +DEFINE_DMA_ENTRY(segment_0150D000, "segment_0150D000") +DEFINE_DMA_ENTRY(segment_0150E000, "segment_0150E000") +DEFINE_DMA_ENTRY(segment_0150F000, "segment_0150F000") +DEFINE_DMA_ENTRY(segment_01510000, "segment_01510000") +DEFINE_DMA_ENTRY(segment_01511000, "segment_01511000") +DEFINE_DMA_ENTRY(segment_01512000, "segment_01512000") +DEFINE_DMA_ENTRY(segment_01513000, "segment_01513000") +DEFINE_DMA_ENTRY(segment_01514000, "segment_01514000") +DEFINE_DMA_ENTRY(segment_01515000, "segment_01515000") +DEFINE_DMA_ENTRY(segment_01516000, "segment_01516000") +DEFINE_DMA_ENTRY(segment_01517000, "segment_01517000") +DEFINE_DMA_ENTRY(segment_01518000, "segment_01518000") +DEFINE_DMA_ENTRY(segment_01519000, "segment_01519000") +DEFINE_DMA_ENTRY(segment_0151A000, "segment_0151A000") +DEFINE_DMA_ENTRY(segment_0151B000, "segment_0151B000") +DEFINE_DMA_ENTRY(segment_0151C000, "segment_0151C000") +DEFINE_DMA_ENTRY(segment_0151D000, "segment_0151D000") +DEFINE_DMA_ENTRY(segment_0151E000, "segment_0151E000") +DEFINE_DMA_ENTRY(segment_0151F000, "segment_0151F000") +DEFINE_DMA_ENTRY(segment_01520000, "segment_01520000") +DEFINE_DMA_ENTRY(segment_01521000, "segment_01521000") +DEFINE_DMA_ENTRY(segment_01522000, "segment_01522000") +DEFINE_DMA_ENTRY(segment_01523000, "segment_01523000") +DEFINE_DMA_ENTRY(segment_01524000, "segment_01524000") +DEFINE_DMA_ENTRY(segment_01525000, "segment_01525000") +DEFINE_DMA_ENTRY(segment_01526000, "segment_01526000") +DEFINE_DMA_ENTRY(segment_01527000, "segment_01527000") +DEFINE_DMA_ENTRY(segment_01528000, "segment_01528000") +DEFINE_DMA_ENTRY(segment_01529000, "segment_01529000") +DEFINE_DMA_ENTRY(segment_0152A000, "segment_0152A000") +DEFINE_DMA_ENTRY(segment_0152B000, "segment_0152B000") +DEFINE_DMA_ENTRY(segment_0152C000, "segment_0152C000") +DEFINE_DMA_ENTRY(segment_0152D000, "segment_0152D000") +DEFINE_DMA_ENTRY(segment_0152E000, "segment_0152E000") +DEFINE_DMA_ENTRY(segment_0152F000, "segment_0152F000") +DEFINE_DMA_ENTRY(segment_01530000, "segment_01530000") +DEFINE_DMA_ENTRY(segment_01531000, "segment_01531000") +DEFINE_DMA_ENTRY(segment_01532000, "segment_01532000") +DEFINE_DMA_ENTRY(segment_01533000, "segment_01533000") +DEFINE_DMA_ENTRY(segment_01534000, "segment_01534000") +DEFINE_DMA_ENTRY(segment_01535000, "segment_01535000") +DEFINE_DMA_ENTRY(segment_01536000, "segment_01536000") +DEFINE_DMA_ENTRY(segment_01537000, "segment_01537000") +DEFINE_DMA_ENTRY(segment_01538000, "segment_01538000") +DEFINE_DMA_ENTRY(segment_01539000, "segment_01539000") +DEFINE_DMA_ENTRY(segment_0153A000, "segment_0153A000") +DEFINE_DMA_ENTRY(segment_0153B000, "segment_0153B000") +DEFINE_DMA_ENTRY(segment_0153D000, "segment_0153D000") +DEFINE_DMA_ENTRY(segment_0153E000, "segment_0153E000") +DEFINE_DMA_ENTRY(segment_0153F000, "segment_0153F000") +DEFINE_DMA_ENTRY(segment_01540000, "segment_01540000") +DEFINE_DMA_ENTRY(segment_01541000, "segment_01541000") +DEFINE_DMA_ENTRY(segment_01542000, "segment_01542000") +DEFINE_DMA_ENTRY(segment_01543000, "segment_01543000") +DEFINE_DMA_ENTRY(segment_01544000, "segment_01544000") +DEFINE_DMA_ENTRY(segment_01545000, "segment_01545000") +DEFINE_DMA_ENTRY(segment_01546000, "segment_01546000") +DEFINE_DMA_ENTRY(segment_01547000, "segment_01547000") +DEFINE_DMA_ENTRY(segment_01548000, "segment_01548000") +DEFINE_DMA_ENTRY(segment_01549000, "segment_01549000") +DEFINE_DMA_ENTRY(segment_0154A000, "segment_0154A000") +DEFINE_DMA_ENTRY(segment_0154B000, "segment_0154B000") +DEFINE_DMA_ENTRY(segment_0154C000, "segment_0154C000") +DEFINE_DMA_ENTRY(segment_0154D000, "segment_0154D000") +DEFINE_DMA_ENTRY(segment_0154E000, "segment_0154E000") +DEFINE_DMA_ENTRY(segment_0154F000, "segment_0154F000") +DEFINE_DMA_ENTRY(segment_01550000, "segment_01550000") +DEFINE_DMA_ENTRY(segment_01552000, "segment_01552000") +DEFINE_DMA_ENTRY(segment_01553000, "segment_01553000") +DEFINE_DMA_ENTRY(segment_01554000, "segment_01554000") +DEFINE_DMA_ENTRY(segment_01555000, "segment_01555000") +DEFINE_DMA_ENTRY(segment_01556000, "segment_01556000") +DEFINE_DMA_ENTRY(segment_01557000, "segment_01557000") +DEFINE_DMA_ENTRY(segment_01559000, "segment_01559000") +DEFINE_DMA_ENTRY(segment_0155A000, "segment_0155A000") +DEFINE_DMA_ENTRY(segment_0155B000, "segment_0155B000") +DEFINE_DMA_ENTRY(segment_0155C000, "segment_0155C000") +DEFINE_DMA_ENTRY(segment_0155D000, "segment_0155D000") +DEFINE_DMA_ENTRY(segment_0155E000, "segment_0155E000") +DEFINE_DMA_ENTRY(segment_0155F000, "segment_0155F000") +DEFINE_DMA_ENTRY(segment_01560000, "segment_01560000") +DEFINE_DMA_ENTRY(segment_01561000, "segment_01561000") +DEFINE_DMA_ENTRY(segment_01562000, "segment_01562000") +DEFINE_DMA_ENTRY(segment_01563000, "segment_01563000") +DEFINE_DMA_ENTRY(segment_01564000, "segment_01564000") +DEFINE_DMA_ENTRY(segment_01565000, "segment_01565000") +DEFINE_DMA_ENTRY(segment_01566000, "segment_01566000") +DEFINE_DMA_ENTRY(segment_01567000, "segment_01567000") +DEFINE_DMA_ENTRY(segment_01568000, "segment_01568000") +DEFINE_DMA_ENTRY(segment_01569000, "segment_01569000") +DEFINE_DMA_ENTRY(segment_0156A000, "segment_0156A000") +DEFINE_DMA_ENTRY(segment_0156B000, "segment_0156B000") +DEFINE_DMA_ENTRY(segment_0156C000, "segment_0156C000") +DEFINE_DMA_ENTRY(segment_0156D000, "segment_0156D000") +DEFINE_DMA_ENTRY(segment_0156E000, "segment_0156E000") +DEFINE_DMA_ENTRY(segment_0156F000, "segment_0156F000") +DEFINE_DMA_ENTRY(segment_01570000, "segment_01570000") +DEFINE_DMA_ENTRY(segment_01571000, "segment_01571000") +DEFINE_DMA_ENTRY(segment_01572000, "segment_01572000") +DEFINE_DMA_ENTRY(segment_01573000, "segment_01573000") +DEFINE_DMA_ENTRY(segment_01574000, "segment_01574000") +DEFINE_DMA_ENTRY(segment_01575000, "segment_01575000") +DEFINE_DMA_ENTRY(segment_01576000, "segment_01576000") +DEFINE_DMA_ENTRY(segment_01577000, "segment_01577000") +DEFINE_DMA_ENTRY(segment_01578000, "segment_01578000") +DEFINE_DMA_ENTRY(segment_01579000, "segment_01579000") +DEFINE_DMA_ENTRY(segment_0157A000, "segment_0157A000") +DEFINE_DMA_ENTRY(segment_0157C000, "segment_0157C000") +DEFINE_DMA_ENTRY(segment_0157D000, "segment_0157D000") +DEFINE_DMA_ENTRY(segment_0157E000, "segment_0157E000") +DEFINE_DMA_ENTRY(segment_0157F000, "segment_0157F000") +DEFINE_DMA_ENTRY(segment_01580000, "segment_01580000") +DEFINE_DMA_ENTRY(segment_01581000, "segment_01581000") +DEFINE_DMA_ENTRY(segment_01582000, "segment_01582000") +DEFINE_DMA_ENTRY(segment_01583000, "segment_01583000") +DEFINE_DMA_ENTRY(segment_01584000, "segment_01584000") +DEFINE_DMA_ENTRY(segment_01585000, "segment_01585000") +DEFINE_DMA_ENTRY(segment_01587000, "segment_01587000") +DEFINE_DMA_ENTRY(segment_01588000, "segment_01588000") +DEFINE_DMA_ENTRY(segment_01589000, "segment_01589000") +DEFINE_DMA_ENTRY(segment_0158A000, "segment_0158A000") +DEFINE_DMA_ENTRY(segment_0158B000, "segment_0158B000") +DEFINE_DMA_ENTRY(segment_0158C000, "segment_0158C000") +DEFINE_DMA_ENTRY(segment_0158E000, "segment_0158E000") +DEFINE_DMA_ENTRY(segment_01590000, "segment_01590000") +DEFINE_DMA_ENTRY(segment_01591000, "segment_01591000") +DEFINE_DMA_ENTRY(segment_01592000, "segment_01592000") +DEFINE_DMA_ENTRY(segment_01593000, "segment_01593000") +DEFINE_DMA_ENTRY(segment_01595000, "segment_01595000") +DEFINE_DMA_ENTRY(segment_01596000, "segment_01596000") +DEFINE_DMA_ENTRY(segment_01597000, "segment_01597000") +DEFINE_DMA_ENTRY(segment_01598000, "segment_01598000") +DEFINE_DMA_ENTRY(segment_01599000, "segment_01599000") +DEFINE_DMA_ENTRY(segment_0159A000, "segment_0159A000") +DEFINE_DMA_ENTRY(segment_0159B000, "segment_0159B000") +DEFINE_DMA_ENTRY(segment_0159C000, "segment_0159C000") +DEFINE_DMA_ENTRY(segment_0159D000, "segment_0159D000") +DEFINE_DMA_ENTRY(segment_0159F000, "segment_0159F000") +DEFINE_DMA_ENTRY(segment_015A0000, "segment_015A0000") +DEFINE_DMA_ENTRY(segment_015A1000, "segment_015A1000") +DEFINE_DMA_ENTRY(segment_015A2000, "segment_015A2000") +DEFINE_DMA_ENTRY(segment_015A3000, "segment_015A3000") +DEFINE_DMA_ENTRY(segment_015A5000, "segment_015A5000") +DEFINE_DMA_ENTRY(segment_015A6000, "segment_015A6000") +DEFINE_DMA_ENTRY(segment_015A7000, "segment_015A7000") +DEFINE_DMA_ENTRY(segment_015A8000, "segment_015A8000") +DEFINE_DMA_ENTRY(segment_015A9000, "segment_015A9000") +DEFINE_DMA_ENTRY(segment_015AA000, "segment_015AA000") +DEFINE_DMA_ENTRY(segment_015AC000, "segment_015AC000") +DEFINE_DMA_ENTRY(segment_015AD000, "segment_015AD000") +DEFINE_DMA_ENTRY(segment_015AE000, "segment_015AE000") +DEFINE_DMA_ENTRY(segment_015AF000, "segment_015AF000") +DEFINE_DMA_ENTRY(segment_015B1000, "segment_015B1000") +DEFINE_DMA_ENTRY(segment_015B2000, "segment_015B2000") +DEFINE_DMA_ENTRY(segment_015B3000, "segment_015B3000") +DEFINE_DMA_ENTRY(segment_015B4000, "segment_015B4000") +DEFINE_DMA_ENTRY(segment_015B5000, "segment_015B5000") +DEFINE_DMA_ENTRY(segment_015B6000, "segment_015B6000") +DEFINE_DMA_ENTRY(segment_015B7000, "segment_015B7000") +DEFINE_DMA_ENTRY(segment_015B8000, "segment_015B8000") +DEFINE_DMA_ENTRY(segment_015B9000, "segment_015B9000") +DEFINE_DMA_ENTRY(segment_015BA000, "segment_015BA000") +DEFINE_DMA_ENTRY(segment_015BB000, "segment_015BB000") +DEFINE_DMA_ENTRY(segment_015BC000, "segment_015BC000") +DEFINE_DMA_ENTRY(segment_015BD000, "segment_015BD000") +DEFINE_DMA_ENTRY(segment_015BE000, "segment_015BE000") +DEFINE_DMA_ENTRY(segment_015BF000, "segment_015BF000") +DEFINE_DMA_ENTRY(segment_015C0000, "segment_015C0000") +DEFINE_DMA_ENTRY(segment_015C1000, "segment_015C1000") +DEFINE_DMA_ENTRY(segment_015C2000, "segment_015C2000") +DEFINE_DMA_ENTRY(segment_015C3000, "segment_015C3000") +DEFINE_DMA_ENTRY(segment_015C4000, "segment_015C4000") +DEFINE_DMA_ENTRY(segment_015C5000, "segment_015C5000") +DEFINE_DMA_ENTRY(segment_015C6000, "segment_015C6000") +DEFINE_DMA_ENTRY(segment_015C8000, "segment_015C8000") +DEFINE_DMA_ENTRY(segment_015CA000, "segment_015CA000") +DEFINE_DMA_ENTRY(segment_015CB000, "segment_015CB000") +DEFINE_DMA_ENTRY(segment_015CD000, "segment_015CD000") +DEFINE_DMA_ENTRY(segment_015CE000, "segment_015CE000") +DEFINE_DMA_ENTRY(segment_015CF000, "segment_015CF000") +DEFINE_DMA_ENTRY(segment_015D0000, "segment_015D0000") +DEFINE_DMA_ENTRY(segment_015D1000, "segment_015D1000") +DEFINE_DMA_ENTRY(segment_015D2000, "segment_015D2000") +DEFINE_DMA_ENTRY(segment_015D3000, "segment_015D3000") +DEFINE_DMA_ENTRY(segment_015D4000, "segment_015D4000") +DEFINE_DMA_ENTRY(segment_015D6000, "segment_015D6000") +DEFINE_DMA_ENTRY(segment_015D8000, "segment_015D8000") +DEFINE_DMA_ENTRY(segment_015DA000, "segment_015DA000") +DEFINE_DMA_ENTRY(segment_015DC000, "segment_015DC000") +DEFINE_DMA_ENTRY(segment_015DE000, "segment_015DE000") +DEFINE_DMA_ENTRY(segment_015E0000, "segment_015E0000") +DEFINE_DMA_ENTRY(segment_015E2000, "segment_015E2000") +DEFINE_DMA_ENTRY(segment_015E4000, "segment_015E4000") +DEFINE_DMA_ENTRY(segment_015E6000, "segment_015E6000") +DEFINE_DMA_ENTRY(segment_015E8000, "segment_015E8000") +DEFINE_DMA_ENTRY(segment_015EA000, "segment_015EA000") +DEFINE_DMA_ENTRY(segment_015EC000, "segment_015EC000") +DEFINE_DMA_ENTRY(segment_015EE000, "segment_015EE000") +DEFINE_DMA_ENTRY(segment_015F0000, "segment_015F0000") +DEFINE_DMA_ENTRY(segment_015F2000, "segment_015F2000") +DEFINE_DMA_ENTRY(segment_015F4000, "segment_015F4000") +DEFINE_DMA_ENTRY(segment_015F6000, "segment_015F6000") +DEFINE_DMA_ENTRY(segment_015F8000, "segment_015F8000") +DEFINE_DMA_ENTRY(segment_015FA000, "segment_015FA000") +DEFINE_DMA_ENTRY(segment_015FC000, "segment_015FC000") +DEFINE_DMA_ENTRY(segment_015FE000, "segment_015FE000") +DEFINE_DMA_ENTRY(segment_01600000, "segment_01600000") +DEFINE_DMA_ENTRY(segment_01602000, "segment_01602000") +DEFINE_DMA_ENTRY(segment_01604000, "segment_01604000") +DEFINE_DMA_ENTRY(segment_01606000, "segment_01606000") +DEFINE_DMA_ENTRY(segment_01608000, "segment_01608000") +DEFINE_DMA_ENTRY(segment_0160A000, "segment_0160A000") +DEFINE_DMA_ENTRY(segment_0160C000, "segment_0160C000") +DEFINE_DMA_ENTRY(segment_0160E000, "segment_0160E000") +DEFINE_DMA_ENTRY(segment_01610000, "segment_01610000") +DEFINE_DMA_ENTRY(segment_01612000, "segment_01612000") +DEFINE_DMA_ENTRY(segment_01614000, "segment_01614000") +DEFINE_DMA_ENTRY(segment_01616000, "segment_01616000") +DEFINE_DMA_ENTRY(segment_01618000, "segment_01618000") +DEFINE_DMA_ENTRY(segment_0161A000, "segment_0161A000") +DEFINE_DMA_ENTRY(segment_0161C000, "segment_0161C000") +DEFINE_DMA_ENTRY(segment_0161E000, "segment_0161E000") +DEFINE_DMA_ENTRY(segment_01620000, "segment_01620000") +DEFINE_DMA_ENTRY(segment_01622000, "segment_01622000") +DEFINE_DMA_ENTRY(segment_01624000, "segment_01624000") +DEFINE_DMA_ENTRY(segment_01626000, "segment_01626000") +DEFINE_DMA_ENTRY(segment_01628000, "segment_01628000") +DEFINE_DMA_ENTRY(segment_0162A000, "segment_0162A000") +DEFINE_DMA_ENTRY(segment_0162C000, "segment_0162C000") +DEFINE_DMA_ENTRY(segment_0162E000, "segment_0162E000") +DEFINE_DMA_ENTRY(segment_01630000, "segment_01630000") +DEFINE_DMA_ENTRY(segment_01632000, "segment_01632000") +DEFINE_DMA_ENTRY(segment_01634000, "segment_01634000") +DEFINE_DMA_ENTRY(segment_01636000, "segment_01636000") +DEFINE_DMA_ENTRY(segment_01638000, "segment_01638000") +DEFINE_DMA_ENTRY(segment_0163A000, "segment_0163A000") +DEFINE_DMA_ENTRY(segment_0163C000, "segment_0163C000") +DEFINE_DMA_ENTRY(segment_0163E000, "segment_0163E000") +DEFINE_DMA_ENTRY(segment_01640000, "segment_01640000") +DEFINE_DMA_ENTRY(segment_01642000, "segment_01642000") +DEFINE_DMA_ENTRY(segment_01644000, "segment_01644000") +DEFINE_DMA_ENTRY(segment_01646000, "segment_01646000") +DEFINE_DMA_ENTRY(segment_01648000, "segment_01648000") +DEFINE_DMA_ENTRY(segment_0164A000, "segment_0164A000") +DEFINE_DMA_ENTRY(segment_0164C000, "segment_0164C000") +DEFINE_DMA_ENTRY(segment_0164E000, "segment_0164E000") +DEFINE_DMA_ENTRY(segment_01650000, "segment_01650000") +DEFINE_DMA_ENTRY(segment_01652000, "segment_01652000") +DEFINE_DMA_ENTRY(segment_01654000, "segment_01654000") +DEFINE_DMA_ENTRY(segment_01656000, "segment_01656000") +DEFINE_DMA_ENTRY(segment_01658000, "segment_01658000") +DEFINE_DMA_ENTRY(segment_0165A000, "segment_0165A000") +DEFINE_DMA_ENTRY(segment_0165C000, "segment_0165C000") +DEFINE_DMA_ENTRY(segment_0165E000, "segment_0165E000") +DEFINE_DMA_ENTRY(segment_01660000, "segment_01660000") +DEFINE_DMA_ENTRY(segment_01662000, "segment_01662000") +DEFINE_DMA_ENTRY(segment_01664000, "segment_01664000") +DEFINE_DMA_ENTRY(segment_01666000, "segment_01666000") +DEFINE_DMA_ENTRY(segment_01668000, "segment_01668000") +DEFINE_DMA_ENTRY(segment_0166A000, "segment_0166A000") +DEFINE_DMA_ENTRY(segment_0166C000, "segment_0166C000") +DEFINE_DMA_ENTRY(segment_0166E000, "segment_0166E000") +DEFINE_DMA_ENTRY(segment_01670000, "segment_01670000") +DEFINE_DMA_ENTRY(segment_01672000, "segment_01672000") +DEFINE_DMA_ENTRY(segment_01674000, "segment_01674000") +DEFINE_DMA_ENTRY(segment_01676000, "segment_01676000") +DEFINE_DMA_ENTRY(segment_01678000, "segment_01678000") +DEFINE_DMA_ENTRY(segment_0167A000, "segment_0167A000") +DEFINE_DMA_ENTRY(segment_0167C000, "segment_0167C000") +DEFINE_DMA_ENTRY(segment_0167E000, "segment_0167E000") +DEFINE_DMA_ENTRY(segment_01680000, "segment_01680000") +DEFINE_DMA_ENTRY(segment_01682000, "segment_01682000") +DEFINE_DMA_ENTRY(segment_01684000, "segment_01684000") +DEFINE_DMA_ENTRY(segment_01686000, "segment_01686000") +DEFINE_DMA_ENTRY(segment_01688000, "segment_01688000") +DEFINE_DMA_ENTRY(segment_0168A000, "segment_0168A000") +DEFINE_DMA_ENTRY(segment_0168C000, "segment_0168C000") +DEFINE_DMA_ENTRY(segment_0168E000, "segment_0168E000") +DEFINE_DMA_ENTRY(segment_01690000, "segment_01690000") +DEFINE_DMA_ENTRY(segment_01692000, "segment_01692000") +DEFINE_DMA_ENTRY(segment_01694000, "segment_01694000") +DEFINE_DMA_ENTRY(segment_01696000, "segment_01696000") +DEFINE_DMA_ENTRY(segment_01698000, "segment_01698000") +DEFINE_DMA_ENTRY(segment_0169A000, "segment_0169A000") +DEFINE_DMA_ENTRY(segment_0169C000, "segment_0169C000") +DEFINE_DMA_ENTRY(segment_0169E000, "segment_0169E000") +DEFINE_DMA_ENTRY(segment_016A0000, "segment_016A0000") +DEFINE_DMA_ENTRY(segment_016A2000, "segment_016A2000") +DEFINE_DMA_ENTRY(segment_016A4000, "segment_016A4000") +DEFINE_DMA_ENTRY(segment_016A6000, "segment_016A6000") +DEFINE_DMA_ENTRY(segment_016A8000, "segment_016A8000") +DEFINE_DMA_ENTRY(segment_016AA000, "segment_016AA000") +DEFINE_DMA_ENTRY(segment_016AC000, "segment_016AC000") +DEFINE_DMA_ENTRY(segment_016AE000, "segment_016AE000") +DEFINE_DMA_ENTRY(segment_016B0000, "segment_016B0000") +DEFINE_DMA_ENTRY(segment_016B2000, "segment_016B2000") +DEFINE_DMA_ENTRY(segment_016B4000, "segment_016B4000") +DEFINE_DMA_ENTRY(segment_016B6000, "segment_016B6000") +DEFINE_DMA_ENTRY(segment_016B8000, "segment_016B8000") +DEFINE_DMA_ENTRY(segment_016BA000, "segment_016BA000") +DEFINE_DMA_ENTRY(segment_016BC000, "segment_016BC000") +DEFINE_DMA_ENTRY(segment_016BE000, "segment_016BE000") +DEFINE_DMA_ENTRY(segment_016C0000, "segment_016C0000") +DEFINE_DMA_ENTRY(segment_016C2000, "segment_016C2000") +DEFINE_DMA_ENTRY(segment_016C4000, "segment_016C4000") +DEFINE_DMA_ENTRY(segment_016C6000, "segment_016C6000") +DEFINE_DMA_ENTRY(segment_016C8000, "segment_016C8000") +DEFINE_DMA_ENTRY(segment_016CA000, "segment_016CA000") +DEFINE_DMA_ENTRY(segment_016CC000, "segment_016CC000") +DEFINE_DMA_ENTRY(segment_016CE000, "segment_016CE000") +DEFINE_DMA_ENTRY(segment_016D0000, "segment_016D0000") +DEFINE_DMA_ENTRY(segment_016D2000, "segment_016D2000") +DEFINE_DMA_ENTRY(segment_016D3000, "segment_016D3000") +DEFINE_DMA_ENTRY(segment_016D4000, "segment_016D4000") +DEFINE_DMA_ENTRY(segment_016D5000, "segment_016D5000") +DEFINE_DMA_ENTRY(segment_016D6000, "segment_016D6000") +DEFINE_DMA_ENTRY(segment_016D7000, "segment_016D7000") +DEFINE_DMA_ENTRY(segment_016D8000, "segment_016D8000") +DEFINE_DMA_ENTRY(segment_016D9000, "segment_016D9000") +DEFINE_DMA_ENTRY(segment_016DA000, "segment_016DA000") +DEFINE_DMA_ENTRY(segment_016DB000, "segment_016DB000") +DEFINE_DMA_ENTRY(segment_016DC000, "segment_016DC000") +DEFINE_DMA_ENTRY(segment_016DD000, "segment_016DD000") +DEFINE_DMA_ENTRY(segment_016DE000, "segment_016DE000") +DEFINE_DMA_ENTRY(segment_016E0000, "segment_016E0000") +DEFINE_DMA_ENTRY(segment_016E2000, "segment_016E2000") +DEFINE_DMA_ENTRY(segment_016E4000, "segment_016E4000") +DEFINE_DMA_ENTRY(segment_016E6000, "segment_016E6000") +DEFINE_DMA_ENTRY(segment_016E8000, "segment_016E8000") +DEFINE_DMA_ENTRY(segment_016EA000, "segment_016EA000") +DEFINE_DMA_ENTRY(segment_016EC000, "segment_016EC000") +DEFINE_DMA_ENTRY(segment_016EE000, "segment_016EE000") +DEFINE_DMA_ENTRY(segment_016F0000, "segment_016F0000") +DEFINE_DMA_ENTRY(segment_016F2000, "segment_016F2000") +DEFINE_DMA_ENTRY(segment_016F4000, "segment_016F4000") +DEFINE_DMA_ENTRY(segment_016F6000, "segment_016F6000") +DEFINE_DMA_ENTRY(segment_016F8000, "segment_016F8000") +DEFINE_DMA_ENTRY(segment_016FA000, "segment_016FA000") +DEFINE_DMA_ENTRY(segment_016FC000, "segment_016FC000") +DEFINE_DMA_ENTRY(segment_016FE000, "segment_016FE000") +DEFINE_DMA_ENTRY(segment_01700000, "segment_01700000") +DEFINE_DMA_ENTRY(segment_01702000, "segment_01702000") +DEFINE_DMA_ENTRY(segment_01703000, "segment_01703000") +DEFINE_DMA_ENTRY(segment_01704000, "segment_01704000") +DEFINE_DMA_ENTRY(segment_01705000, "segment_01705000") +DEFINE_DMA_ENTRY(segment_01706000, "segment_01706000") +DEFINE_DMA_ENTRY(segment_01708000, "segment_01708000") +DEFINE_DMA_ENTRY(segment_01709000, "segment_01709000") +DEFINE_DMA_ENTRY(segment_0170A000, "segment_0170A000") +DEFINE_DMA_ENTRY(segment_0170B000, "segment_0170B000") +DEFINE_DMA_ENTRY(segment_0170D000, "segment_0170D000") +DEFINE_DMA_ENTRY(segment_0170F000, "segment_0170F000") +DEFINE_DMA_ENTRY(segment_01710000, "segment_01710000") +DEFINE_DMA_ENTRY(segment_01711000, "segment_01711000") +DEFINE_DMA_ENTRY(segment_01712000, "segment_01712000") +DEFINE_DMA_ENTRY(segment_01713000, "segment_01713000") +DEFINE_DMA_ENTRY(segment_01714000, "segment_01714000") +DEFINE_DMA_ENTRY(segment_01715000, "segment_01715000") +DEFINE_DMA_ENTRY(segment_01716000, "segment_01716000") +DEFINE_DMA_ENTRY(segment_01717000, "segment_01717000") +DEFINE_DMA_ENTRY(segment_01718000, "segment_01718000") +DEFINE_DMA_ENTRY(segment_01719000, "segment_01719000") +DEFINE_DMA_ENTRY(segment_0171A000, "segment_0171A000") +DEFINE_DMA_ENTRY(segment_0171B000, "segment_0171B000") +DEFINE_DMA_ENTRY(segment_0171C000, "segment_0171C000") +DEFINE_DMA_ENTRY(segment_0171D000, "segment_0171D000") +DEFINE_DMA_ENTRY(segment_0171E000, "segment_0171E000") +DEFINE_DMA_ENTRY(segment_0171F000, "segment_0171F000") +DEFINE_DMA_ENTRY(segment_01720000, "segment_01720000") +DEFINE_DMA_ENTRY(segment_01721000, "segment_01721000") +DEFINE_DMA_ENTRY(segment_01722000, "segment_01722000") +DEFINE_DMA_ENTRY(segment_01723000, "segment_01723000") +DEFINE_DMA_ENTRY(segment_01724000, "segment_01724000") +DEFINE_DMA_ENTRY(segment_01725000, "segment_01725000") +DEFINE_DMA_ENTRY(segment_01726000, "segment_01726000") +DEFINE_DMA_ENTRY(segment_01727000, "segment_01727000") +DEFINE_DMA_ENTRY(segment_01728000, "segment_01728000") +DEFINE_DMA_ENTRY(segment_01729000, "segment_01729000") +DEFINE_DMA_ENTRY(segment_0172A000, "segment_0172A000") +DEFINE_DMA_ENTRY(segment_0172B000, "segment_0172B000") +DEFINE_DMA_ENTRY(segment_0172C000, "segment_0172C000") +DEFINE_DMA_ENTRY(segment_0172D000, "segment_0172D000") +DEFINE_DMA_ENTRY(segment_0172E000, "segment_0172E000") +DEFINE_DMA_ENTRY(segment_0172F000, "segment_0172F000") +DEFINE_DMA_ENTRY(segment_01730000, "segment_01730000") +DEFINE_DMA_ENTRY(segment_01731000, "segment_01731000") +DEFINE_DMA_ENTRY(segment_01732000, "segment_01732000") +DEFINE_DMA_ENTRY(segment_01733000, "segment_01733000") +DEFINE_DMA_ENTRY(segment_01734000, "segment_01734000") +DEFINE_DMA_ENTRY(segment_01735000, "segment_01735000") +DEFINE_DMA_ENTRY(segment_01736000, "segment_01736000") +DEFINE_DMA_ENTRY(segment_01737000, "segment_01737000") +DEFINE_DMA_ENTRY(segment_01739000, "segment_01739000") +DEFINE_DMA_ENTRY(segment_0173A000, "segment_0173A000") +DEFINE_DMA_ENTRY(segment_0173B000, "segment_0173B000") +DEFINE_DMA_ENTRY(segment_0173C000, "segment_0173C000") +DEFINE_DMA_ENTRY(segment_0173D000, "segment_0173D000") +DEFINE_DMA_ENTRY(segment_0173E000, "segment_0173E000") +DEFINE_DMA_ENTRY(segment_01740000, "segment_01740000") +DEFINE_DMA_ENTRY(segment_01741000, "segment_01741000") +DEFINE_DMA_ENTRY(segment_01742000, "segment_01742000") +DEFINE_DMA_ENTRY(segment_01743000, "segment_01743000") +DEFINE_DMA_ENTRY(segment_01744000, "segment_01744000") +DEFINE_DMA_ENTRY(segment_01746000, "segment_01746000") +DEFINE_DMA_ENTRY(segment_01747000, "segment_01747000") +DEFINE_DMA_ENTRY(segment_01748000, "segment_01748000") +DEFINE_DMA_ENTRY(segment_01749000, "segment_01749000") +DEFINE_DMA_ENTRY(segment_0174A000, "segment_0174A000") +DEFINE_DMA_ENTRY(segment_0174B000, "segment_0174B000") +DEFINE_DMA_ENTRY(segment_0174C000, "segment_0174C000") +DEFINE_DMA_ENTRY(segment_0174D000, "segment_0174D000") +DEFINE_DMA_ENTRY(segment_0174E000, "segment_0174E000") +DEFINE_DMA_ENTRY(segment_0174F000, "segment_0174F000") +DEFINE_DMA_ENTRY(segment_01751000, "segment_01751000") +DEFINE_DMA_ENTRY(segment_01752000, "segment_01752000") +DEFINE_DMA_ENTRY(segment_01754000, "segment_01754000") +DEFINE_DMA_ENTRY(segment_01755000, "segment_01755000") +DEFINE_DMA_ENTRY(segment_01756000, "segment_01756000") +DEFINE_DMA_ENTRY(segment_01757000, "segment_01757000") +DEFINE_DMA_ENTRY(segment_01758000, "segment_01758000") +DEFINE_DMA_ENTRY(segment_01759000, "segment_01759000") +DEFINE_DMA_ENTRY(segment_0175A000, "segment_0175A000") +DEFINE_DMA_ENTRY(segment_0175B000, "segment_0175B000") +DEFINE_DMA_ENTRY(segment_0175C000, "segment_0175C000") +DEFINE_DMA_ENTRY(segment_0175D000, "segment_0175D000") +DEFINE_DMA_ENTRY(segment_0175E000, "segment_0175E000") +DEFINE_DMA_ENTRY(segment_0175F000, "segment_0175F000") +DEFINE_DMA_ENTRY(segment_01760000, "segment_01760000") +DEFINE_DMA_ENTRY(segment_01761000, "segment_01761000") +DEFINE_DMA_ENTRY(segment_01762000, "segment_01762000") +DEFINE_DMA_ENTRY(segment_01763000, "segment_01763000") +DEFINE_DMA_ENTRY(segment_01764000, "segment_01764000") +DEFINE_DMA_ENTRY(segment_01765000, "segment_01765000") +DEFINE_DMA_ENTRY(segment_01766000, "segment_01766000") +DEFINE_DMA_ENTRY(segment_01767000, "segment_01767000") +DEFINE_DMA_ENTRY(segment_01769000, "segment_01769000") +DEFINE_DMA_ENTRY(segment_0176A000, "segment_0176A000") +DEFINE_DMA_ENTRY(segment_0176C000, "segment_0176C000") +DEFINE_DMA_ENTRY(segment_0176D000, "segment_0176D000") +DEFINE_DMA_ENTRY(segment_0176E000, "segment_0176E000") +DEFINE_DMA_ENTRY(segment_0176F000, "segment_0176F000") +DEFINE_DMA_ENTRY(segment_01770000, "segment_01770000") +DEFINE_DMA_ENTRY(segment_01771000, "segment_01771000") +DEFINE_DMA_ENTRY(segment_01772000, "segment_01772000") +DEFINE_DMA_ENTRY(segment_01773000, "segment_01773000") +DEFINE_DMA_ENTRY(segment_01774000, "segment_01774000") +DEFINE_DMA_ENTRY(segment_01775000, "segment_01775000") +DEFINE_DMA_ENTRY(segment_01776000, "segment_01776000") +DEFINE_DMA_ENTRY(segment_01777000, "segment_01777000") +DEFINE_DMA_ENTRY(segment_01779000, "segment_01779000") +DEFINE_DMA_ENTRY(segment_0177A000, "segment_0177A000") +DEFINE_DMA_ENTRY(segment_0177B000, "segment_0177B000") +DEFINE_DMA_ENTRY(segment_0177C000, "segment_0177C000") +DEFINE_DMA_ENTRY(segment_0177D000, "segment_0177D000") +DEFINE_DMA_ENTRY(segment_0177E000, "segment_0177E000") +DEFINE_DMA_ENTRY(segment_0177F000, "segment_0177F000") +DEFINE_DMA_ENTRY(segment_01780000, "segment_01780000") +DEFINE_DMA_ENTRY(segment_01781000, "segment_01781000") +DEFINE_DMA_ENTRY(segment_01782000, "segment_01782000") +DEFINE_DMA_ENTRY(segment_01783000, "segment_01783000") +DEFINE_DMA_ENTRY(segment_01784000, "segment_01784000") +DEFINE_DMA_ENTRY(segment_01785000, "segment_01785000") +DEFINE_DMA_ENTRY(segment_01786000, "segment_01786000") +DEFINE_DMA_ENTRY(segment_01787000, "segment_01787000") +DEFINE_DMA_ENTRY(segment_01788000, "segment_01788000") +DEFINE_DMA_ENTRY(segment_01789000, "segment_01789000") +DEFINE_DMA_ENTRY(segment_0178A000, "segment_0178A000") +DEFINE_DMA_ENTRY(segment_0178B000, "segment_0178B000") +DEFINE_DMA_ENTRY(segment_0178C000, "segment_0178C000") +DEFINE_DMA_ENTRY(segment_0178D000, "segment_0178D000") +DEFINE_DMA_ENTRY(segment_0178E000, "segment_0178E000") +DEFINE_DMA_ENTRY(segment_0178F000, "segment_0178F000") +DEFINE_DMA_ENTRY(segment_01790000, "segment_01790000") +DEFINE_DMA_ENTRY(segment_01791000, "segment_01791000") +DEFINE_DMA_ENTRY(segment_01792000, "segment_01792000") +DEFINE_DMA_ENTRY(segment_01793000, "segment_01793000") +DEFINE_DMA_ENTRY(segment_01794000, "segment_01794000") +DEFINE_DMA_ENTRY(segment_01795000, "segment_01795000") +DEFINE_DMA_ENTRY(segment_01796000, "segment_01796000") +DEFINE_DMA_ENTRY(segment_01797000, "segment_01797000") +DEFINE_DMA_ENTRY(segment_01798000, "segment_01798000") +DEFINE_DMA_ENTRY(segment_0179A000, "segment_0179A000") +DEFINE_DMA_ENTRY(segment_0179B000, "segment_0179B000") +DEFINE_DMA_ENTRY(segment_0179C000, "segment_0179C000") +DEFINE_DMA_ENTRY(segment_0179E000, "segment_0179E000") +DEFINE_DMA_ENTRY(segment_0179F000, "segment_0179F000") +DEFINE_DMA_ENTRY(segment_017A1000, "segment_017A1000") +DEFINE_DMA_ENTRY(segment_0182A000, "segment_0182A000") +DEFINE_DMA_ENTRY(segment_0186F000, "segment_0186F000") +DEFINE_DMA_ENTRY(segment_01871000, "segment_01871000") +DEFINE_DMA_ENTRY(segment_01880000, "segment_01880000") +DEFINE_DMA_ENTRY(segment_01884000, "segment_01884000") +DEFINE_DMA_ENTRY(segment_01888000, "segment_01888000") +DEFINE_DMA_ENTRY(segment_0188C000, "segment_0188C000") +DEFINE_DMA_ENTRY(segment_0188D000, "segment_0188D000") +DEFINE_DMA_ENTRY(segment_0188E000, "segment_0188E000") +DEFINE_DMA_ENTRY(segment_0188F000, "segment_0188F000") +DEFINE_DMA_ENTRY(segment_01890000, "segment_01890000") +DEFINE_DMA_ENTRY(segment_01891000, "segment_01891000") +DEFINE_DMA_ENTRY(segment_01892000, "segment_01892000") +DEFINE_DMA_ENTRY(segment_01893000, "segment_01893000") +DEFINE_DMA_ENTRY(segment_01894000, "segment_01894000") +DEFINE_DMA_ENTRY(segment_01895000, "segment_01895000") +DEFINE_DMA_ENTRY(segment_01896000, "segment_01896000") +DEFINE_DMA_ENTRY(segment_01897000, "segment_01897000") +DEFINE_DMA_ENTRY(segment_01898000, "segment_01898000") +DEFINE_DMA_ENTRY(segment_01899000, "segment_01899000") +DEFINE_DMA_ENTRY(segment_0189A000, "segment_0189A000") +DEFINE_DMA_ENTRY(segment_0189B000, "segment_0189B000") +DEFINE_DMA_ENTRY(segment_0189C000, "segment_0189C000") +DEFINE_DMA_ENTRY(segment_0189D000, "segment_0189D000") +DEFINE_DMA_ENTRY(segment_0189E000, "segment_0189E000") +DEFINE_DMA_ENTRY(segment_0189F000, "segment_0189F000") +DEFINE_DMA_ENTRY(segment_018A0000, "segment_018A0000") +DEFINE_DMA_ENTRY(segment_018A1000, "segment_018A1000") +DEFINE_DMA_ENTRY(segment_018A2000, "segment_018A2000") +DEFINE_DMA_ENTRY(segment_018A3000, "segment_018A3000") +DEFINE_DMA_ENTRY(segment_018A4000, "segment_018A4000") +DEFINE_DMA_ENTRY(segment_018A5000, "segment_018A5000") +DEFINE_DMA_ENTRY(segment_018A6000, "segment_018A6000") +DEFINE_DMA_ENTRY(segment_018A7000, "segment_018A7000") +DEFINE_DMA_ENTRY(segment_018A8000, "segment_018A8000") +DEFINE_DMA_ENTRY(segment_018A9000, "segment_018A9000") +DEFINE_DMA_ENTRY(segment_018AA000, "segment_018AA000") +DEFINE_DMA_ENTRY(segment_018AB000, "segment_018AB000") +DEFINE_DMA_ENTRY(segment_018AC000, "segment_018AC000") +DEFINE_DMA_ENTRY(segment_018AD000, "segment_018AD000") +DEFINE_DMA_ENTRY(segment_018AE000, "segment_018AE000") +DEFINE_DMA_ENTRY(segment_018AF000, "segment_018AF000") +DEFINE_DMA_ENTRY(segment_018B0000, "segment_018B0000") +DEFINE_DMA_ENTRY(segment_018B1000, "segment_018B1000") +DEFINE_DMA_ENTRY(segment_018B2000, "segment_018B2000") +DEFINE_DMA_ENTRY(segment_018B3000, "segment_018B3000") +DEFINE_DMA_ENTRY(segment_018B4000, "segment_018B4000") +DEFINE_DMA_ENTRY(segment_018B5000, "segment_018B5000") +DEFINE_DMA_ENTRY(segment_018B6000, "segment_018B6000") +DEFINE_DMA_ENTRY(segment_018B7000, "segment_018B7000") +DEFINE_DMA_ENTRY(segment_018B8000, "segment_018B8000") +DEFINE_DMA_ENTRY(segment_018B9000, "segment_018B9000") +DEFINE_DMA_ENTRY(segment_018BA000, "segment_018BA000") +DEFINE_DMA_ENTRY(segment_018BB000, "segment_018BB000") +DEFINE_DMA_ENTRY(segment_018BC000, "segment_018BC000") +DEFINE_DMA_ENTRY(segment_018C4000, "segment_018C4000") +DEFINE_DMA_ENTRY(segment_018C7000, "segment_018C7000") +DEFINE_DMA_ENTRY(segment_018C8000, "segment_018C8000") +DEFINE_DMA_ENTRY(segment_018C9000, "segment_018C9000") +DEFINE_DMA_ENTRY(segment_018CA000, "segment_018CA000") +DEFINE_DMA_ENTRY(segment_018CB000, "segment_018CB000") +DEFINE_DMA_ENTRY(segment_018CC000, "segment_018CC000") +DEFINE_DMA_ENTRY(segment_018CD000, "segment_018CD000") +DEFINE_DMA_ENTRY(segment_018CE000, "segment_018CE000") +DEFINE_DMA_ENTRY(segment_018CF000, "segment_018CF000") +DEFINE_DMA_ENTRY(segment_018D0000, "segment_018D0000") +DEFINE_DMA_ENTRY(segment_018D1000, "segment_018D1000") +DEFINE_DMA_ENTRY(segment_018D2000, "segment_018D2000") +DEFINE_DMA_ENTRY(segment_018D3000, "segment_018D3000") +DEFINE_DMA_ENTRY(segment_018D4000, "segment_018D4000") +DEFINE_DMA_ENTRY(segment_018D5000, "segment_018D5000") +DEFINE_DMA_ENTRY(segment_018D6000, "segment_018D6000") +DEFINE_DMA_ENTRY(segment_018D7000, "segment_018D7000") +DEFINE_DMA_ENTRY(segment_018D8000, "segment_018D8000") +DEFINE_DMA_ENTRY(segment_018D9000, "segment_018D9000") +DEFINE_DMA_ENTRY(segment_018DA000, "segment_018DA000") +DEFINE_DMA_ENTRY(segment_018DB000, "segment_018DB000") +DEFINE_DMA_ENTRY(segment_018DC000, "segment_018DC000") +DEFINE_DMA_ENTRY(segment_018DD000, "segment_018DD000") +DEFINE_DMA_ENTRY(segment_018DE000, "segment_018DE000") +DEFINE_DMA_ENTRY(segment_018DF000, "segment_018DF000") +DEFINE_DMA_ENTRY(segment_018E0000, "segment_018E0000") +DEFINE_DMA_ENTRY(segment_018E1000, "segment_018E1000") +DEFINE_DMA_ENTRY(segment_018E2000, "segment_018E2000") +DEFINE_DMA_ENTRY(segment_018E3000, "segment_018E3000") +DEFINE_DMA_ENTRY(segment_018E4000, "segment_018E4000") +DEFINE_DMA_ENTRY(segment_018E5000, "segment_018E5000") +DEFINE_DMA_ENTRY(segment_018E6000, "segment_018E6000") +DEFINE_DMA_ENTRY(segment_018E7000, "segment_018E7000") +DEFINE_DMA_ENTRY(segment_018E8000, "segment_018E8000") +DEFINE_DMA_ENTRY(segment_018E9000, "segment_018E9000") +DEFINE_DMA_ENTRY(segment_018EA000, "segment_018EA000") +DEFINE_DMA_ENTRY(segment_018EB000, "segment_018EB000") +DEFINE_DMA_ENTRY(segment_018EC000, "segment_018EC000") +DEFINE_DMA_ENTRY(segment_018ED000, "segment_018ED000") +DEFINE_DMA_ENTRY(segment_018EE000, "segment_018EE000") +DEFINE_DMA_ENTRY(segment_018EF000, "segment_018EF000") +DEFINE_DMA_ENTRY(segment_018F0000, "segment_018F0000") +DEFINE_DMA_ENTRY(segment_018F1000, "segment_018F1000") +DEFINE_DMA_ENTRY(segment_018F2000, "segment_018F2000") +DEFINE_DMA_ENTRY(segment_018F3000, "segment_018F3000") +DEFINE_DMA_ENTRY(segment_018F4000, "segment_018F4000") +DEFINE_DMA_ENTRY(segment_018F5000, "segment_018F5000") +DEFINE_DMA_ENTRY(segment_018F6000, "segment_018F6000") +DEFINE_DMA_ENTRY(segment_018F7000, "segment_018F7000") +DEFINE_DMA_ENTRY(segment_018F8000, "segment_018F8000") +DEFINE_DMA_ENTRY(segment_018F9000, "segment_018F9000") +DEFINE_DMA_ENTRY(segment_018FA000, "segment_018FA000") +DEFINE_DMA_ENTRY(segment_018FB000, "segment_018FB000") +DEFINE_DMA_ENTRY(segment_018FC000, "segment_018FC000") +DEFINE_DMA_ENTRY(segment_018FD000, "segment_018FD000") +DEFINE_DMA_ENTRY(segment_018FE000, "segment_018FE000") +DEFINE_DMA_ENTRY(segment_018FF000, "segment_018FF000") +DEFINE_DMA_ENTRY(segment_01900000, "segment_01900000") +DEFINE_DMA_ENTRY(segment_01901000, "segment_01901000") +DEFINE_DMA_ENTRY(segment_01902000, "segment_01902000") +DEFINE_DMA_ENTRY(segment_01903000, "segment_01903000") +DEFINE_DMA_ENTRY(segment_01904000, "segment_01904000") +DEFINE_DMA_ENTRY(segment_01905000, "segment_01905000") +DEFINE_DMA_ENTRY(segment_01906000, "segment_01906000") +DEFINE_DMA_ENTRY(anime_model_1_static, "anime_model_1_static") +DEFINE_DMA_ENTRY(anime_model_2_static, "anime_model_2_static") +DEFINE_DMA_ENTRY(anime_model_3_static, "anime_model_3_static") +DEFINE_DMA_ENTRY(anime_model_4_static, "anime_model_4_static") +DEFINE_DMA_ENTRY(anime_model_5_static, "anime_model_5_static") +DEFINE_DMA_ENTRY(anime_model_6_static, "anime_model_6_static") +DEFINE_DMA_ENTRY(anime_texture_1_static, "anime_texture_1_static") +DEFINE_DMA_ENTRY(anime_texture_2_static, "anime_texture_2_static") +DEFINE_DMA_ENTRY(anime_texture_3_static, "anime_texture_3_static") +DEFINE_DMA_ENTRY(anime_texture_4_static, "anime_texture_4_static") +DEFINE_DMA_ENTRY(anime_texture_5_static, "anime_texture_5_static") +DEFINE_DMA_ENTRY(anime_texture_6_static, "anime_texture_6_static") +DEFINE_DMA_ENTRY(softsprite_matrix_static, "softsprite_matrix_static") diff --git a/include/z_std_dma.h b/include/z_std_dma.h index 36a4051..e152956 100644 --- a/include/z_std_dma.h +++ b/include/z_std_dma.h @@ -2,6 +2,16 @@ #define Z_STD_DMA_H #include "ultra64.h" +#include "other_types.h" + +typedef struct DmaEntry { + /* 0x0 */ RomOffset vromStart; + /* 0x4 */ RomOffset vromEnd; + /* 0x8 */ RomOffset romStart; + /* 0xC */ RomOffset romEnd; +} DmaEntry; // size = 0x10 + +extern DmaEntry gDmaDataTable[]; // void func_800263F0_jp(); // void DmaMgr_DmaRomToRam(); diff --git a/src/dmadata/dmadata.c b/src/dmadata/dmadata.c new file mode 100644 index 0000000..45d5030 --- /dev/null +++ b/src/dmadata/dmadata.c @@ -0,0 +1,21 @@ +#include "segment_symbols.h" +#include "z_std_dma.h" + +// Linker symbol declarations (used in the table below) +#define DEFINE_DMA_ENTRY(name, _nameString) DECLARE_ROM_SEGMENT(name); + +#include "tables/dmadata_table.h" + +#undef DEFINE_DMA_ENTRY + +// dmadata Table definition +#define DEFINE_DMA_ENTRY(name, _1) { SEGMENT_ROM_START(name), SEGMENT_ROM_END(name), SEGMENT_ROM_START(name), 0 }, + +DmaEntry gDmaDataTable[] = { +#include "tables/dmadata_table.h" + { 0 }, +}; + +#undef DEFINE_DMA_ENTRY + +u8 sDmaDataPadding[0xF0] = { 0 }; diff --git a/tools/Makefile b/tools/Makefile index 2e155fc..308b437 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -18,6 +18,8 @@ IDO_7_1_DIR := ido/$(DETECTED_OS)/7.1 IDO_7_1 := $(IDO_7_1_DIR)/cc all: $(IDO_5_3) $(IDO_7_1) + $(MAKE) -C fado + $(MAKE) -C z64compress clean: $(RM) -rf $(IDO_5_3_DIR) $(IDO_7_1_DIR) diff --git a/tools/z64compress/.editorconfig b/tools/z64compress/.editorconfig new file mode 100644 index 0000000..342ff35 --- /dev/null +++ b/tools/z64compress/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true + +# Matches multiple files with brace expansion notation +[*.{c,h,ch}] +charset = utf-8 +indent_style = tab +indent_size = 3 +trim_trailing_whitespace = false + +[*.md] +trim_trailing_whitespace = false diff --git a/tools/z64compress/.gitignore b/tools/z64compress/.gitignore new file mode 100644 index 0000000..6a47e05 --- /dev/null +++ b/tools/z64compress/.gitignore @@ -0,0 +1,3 @@ +bin/ +o/ +z64compress diff --git a/tools/z64compress/.gitrepo b/tools/z64compress/.gitrepo new file mode 100644 index 0000000..dd77cbd --- /dev/null +++ b/tools/z64compress/.gitrepo @@ -0,0 +1,12 @@ +; DO NOT EDIT (unless you know what you are doing) +; +; This subdirectory is a git "subrepo", and this file is maintained by the +; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme +; +[subrepo] + remote = git@github.com:z64tools/z64compress.git + branch = 5da3132606e4fd427a8d72b8428e4f921cd6e56f + commit = 5da3132606e4fd427a8d72b8428e4f921cd6e56f + parent = f9be35e4bc4894d44e23cd349992c6d369e9e623 + method = merge + cmdver = 0.4.3 diff --git a/tools/z64compress/LICENSE b/tools/z64compress/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/tools/z64compress/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/tools/z64compress/Makefile b/tools/z64compress/Makefile new file mode 100644 index 0000000..f16167c --- /dev/null +++ b/tools/z64compress/Makefile @@ -0,0 +1,47 @@ +CC := gcc +CFLAGS := -DNDEBUG -s -Os -flto -Wall -Wextra + +# Target platform, specify with TARGET= on the command line, linux64 is default. +# Currently supported: linux64, linux32, win32 +TARGET ?= linux64 + +ifeq ($(TARGET),linux32) + TARGET_CFLAGS := -m32 +else ifeq ($(TARGET),win32) +# If using a cross compiler, specify the compiler executable on the command line. +# make TARGET=win32 CC=~/c/mxe/usr/bin/i686-w64-mingw32.static-gcc + TARGET_LIBS := -mconsole -municode +else ifneq ($(TARGET),linux64) + $(error Supported targets: linux64, linux32, win32) +endif + +# Whether to use native optimizations, specify with NATIVE_OPT=0/1 on the command line, default is 0. +# This is not supported by all compilers which is particularly an issue on Mac, and may inhibit tests. +NATIVE_OPT ?= 0 +ifeq ($(NATIVE_OPT),1) + TARGET_CFLAGS += -march=native -mtune=native +endif + +OBJ_DIR := o/$(TARGET) + +$(OBJ_DIR)/src/enc/%.o: CFLAGS := -DNDEBUG -s -Ofast -flto -Wall + +SRC_DIRS := $(shell find src -type d) +C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) +O_FILES := $(foreach f,$(C_FILES:.c=.o),$(OBJ_DIR)/$f) + +# Make build directories +$(shell mkdir -p $(foreach dir,$(SRC_DIRS),$(OBJ_DIR)/$(dir))) + +.PHONY: all clean + +all: z64compress + +z64compress: $(O_FILES) + $(CC) $(TARGET_CFLAGS) $(CFLAGS) $(O_FILES) -lm -lpthread $(TARGET_LIBS) -o z64compress + +$(OBJ_DIR)/%.o: %.c + $(CC) -c $(TARGET_CFLAGS) $(CFLAGS) $< -o $@ + +clean: + $(RM) -rf z64compress bin o diff --git a/tools/z64compress/README.md b/tools/z64compress/README.md new file mode 100644 index 0000000..1731a8a --- /dev/null +++ b/tools/z64compress/README.md @@ -0,0 +1,94 @@ +# z64compress + +`z64compress` is a program for compressing Zelda 64 roms: be they retail, hacked traditionally, or custom-built from the [`Ocarina of Time`](https://github.com/zeldaret/oot) or [`Majora's Mask`](https://github.com/zeldaret/mm) reverse engineering projects. It is written in highly efficient C and leverages the power of multithreading to make compression as fast as possible. To reduce overhead on subsequent compressions, an optional cache directory can be specified. + +In addition to the default `yaz`, it supports some faster and more compact algorithms such as `lzo`, `ucl`, and `aplib`. In order to use these, grab patches or code from my [`z64enc` repository](https://github.com/z64me/z64enc). + +If you add an algorithm, please make sure `valgrind` reports no memory leaks or other errors before making a pull request. Thank you! + +(By the way, `valgrind` works better without the `-march=native -mtune=native` optimizations, so turn those off when testing `valgrind`.) + +## Usage +This is a command line application. Learn from these common examples and adapt the arguments to your needs: +``` + compressing oot debug + --in "path/to/in.z64" + --out "path/to/out.z64" + --mb 32 + --codec yaz + --cache "path/to/cache" + --dma "0x12F70,1548" + --compress "9-14,28-END" + --threads 4 + + compressing oot ntsc 1.0 + --in "path/to/in.z64" + --out "path/to/out.z64" + --mb 32 + --codec yaz + --cache "path/to/cache" + --dma "0x7430,1526" + --compress "10-14,27-END" + --threads 4 + + compressing mm usa + --in "path/to/in.z64" + --out "path/to/out.z64" + --mb 32 + --codec yaz + --cache "path/to/cache" + --dma "0x1A500,1568" + --compress "10-14,23,24,31-END" + --skip "1127" + --repack "15-20,22" + --threads 4 +``` + +## Arguments +``` + --in uncompressed input rom + + --out compressed output rom + + --matching attempt matching compression at the cost of + some optimizations and reduced performance + + --mb how many mb the compressed rom should be + + --codec currently supported codecs + yaz + ucl + lzo + aplib + * to use non-yaz codecs, find patches + and code on my z64enc repo + + --cache is optional and won't be created if + no path is specified (having a cache + makes subsequent compressions faster) + * pro-tip: linux users who don't want a + cache to persist across power cycles + can use the path "/tmp/z64compress" + + --dma specify dmadata address and count + + --compress enable compression on specified files + + --skip disable compression on specified files + + --repack handles Majora's Mask archives + + --threads optional multithreading; + exclude this argument to disable it + + --only-stdout reserve stderr for errors and print + everything else to stdout + + arguments are executed as they + are parsed, so order matters! +``` + +## Building +I have included shell scripts for building Linux and Windows binaries. Windows binaries are built using a cross compiler ([I recommend `MXE`](https://mxe.cc/)). + +Alternatively, a Makefile-based build system is provided. Choose the target platform with `make TARGET=linux64|linux32|win32`, default is linux64. If building for windows with a cross compiler, specify the compiler executable with `make TARGET=win32 CC=/path/to/executable`. diff --git a/tools/z64compress/release-linux.sh b/tools/z64compress/release-linux.sh new file mode 100755 index 0000000..24f4cb2 --- /dev/null +++ b/tools/z64compress/release-linux.sh @@ -0,0 +1,14 @@ +# build compression functions (slow) +gcc -DNDEBUG -s -Ofast -flto -lm -c -Wall -march=native -mtune=native src/enc/*.c src/enc/lzo/*.c src/enc/ucl/comp/*.c src/enc/apultra/*.c +mkdir -p o +mv *.o o + +# build everything else +gcc -o z64compress -DNDEBUG src/*.c o/*.o -Wall -Wextra -s -Os -flto -lpthread -march=native -mtune=native + +# move to bin directory +mkdir -p bin/linux64 +mv z64compress bin/linux64 + + + diff --git a/tools/z64compress/release-linux32.sh b/tools/z64compress/release-linux32.sh new file mode 100755 index 0000000..9f413e2 --- /dev/null +++ b/tools/z64compress/release-linux32.sh @@ -0,0 +1,14 @@ +# build compression functions (slow) +gcc -m32 -DNDEBUG -s -Ofast -flto -lm -c -Wall -march=native -mtune=native src/enc/*.c src/enc/lzo/*.c src/enc/ucl/comp/*.c src/enc/apultra/*.c +mkdir -p o +mv *.o o + +# build everything else +gcc -m32 -o z64compress -DNDEBUG src/*.c o/*.o -Wall -Wextra -s -Os -flto -lpthread -march=native -mtune=native + +# move to bin directory +mkdir -p bin/linux32 +mv z64compress bin/linux32 + + + diff --git a/tools/z64compress/release-win32.sh b/tools/z64compress/release-win32.sh new file mode 100755 index 0000000..5b11581 --- /dev/null +++ b/tools/z64compress/release-win32.sh @@ -0,0 +1,12 @@ +# build compression functions (slow) +~/c/mxe/usr/bin/i686-w64-mingw32.static-gcc -DNDEBUG -s -Ofast -flto -lm -c -Wall src/enc/*.c src/enc/lzo/*.c src/enc/ucl/comp/*.c src/enc/apultra/*.c +mkdir -p o +mv *.o o + +# build everything else +~/c/mxe/usr/bin/i686-w64-mingw32.static-gcc -o z64compress.exe -DNDEBUG src/*.c o/*.o -Wall -Wextra -s -Os -flto -lpthread -mconsole -municode + +# move to bin directory +mkdir -p bin/win32 +mv z64compress.exe bin/win32 + diff --git a/tools/z64compress/src/enc/aplib.c b/tools/z64compress/src/enc/aplib.c new file mode 100644 index 0000000..e4aa95f --- /dev/null +++ b/tools/z64compress/src/enc/aplib.c @@ -0,0 +1,48 @@ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include "apultra/libapultra.h" + +static void compression_progress(long long nOriginalSize, long long nCompressedSize) { + /* do nothing */ +} + +int +aplenc( + void *_src + , unsigned src_sz + , void *_dst + , unsigned *dst_sz + , void *_ctx +) +{ + unsigned char *src = _src; + unsigned char *dst = _dst; + int nMaxCompressedSize = apultra_get_max_compressed_size(src_sz); + apultra_stats stats; + + int hlen = 8; /* header length; required due to MM's archives */ + memset(dst, 0, hlen); + memcpy(dst, "APL0", 4); + dst[4] = (src_sz >> 24); + dst[5] = (src_sz >> 16); + dst[6] = (src_sz >> 8); + dst[7] = (src_sz >> 0); + + *dst_sz = apultra_compress( + src + , dst + hlen + , src_sz + , nMaxCompressedSize + , 0 /* flags */ + , 0 /* nMaxWindowSize */ + , 0 /* nDictionarySize */ + , compression_progress + , &stats + ); + + *dst_sz = *dst_sz + hlen; + + return 0; +} + diff --git a/tools/z64compress/src/enc/apultra/apultra.c b/tools/z64compress/src/enc/apultra/apultra.c new file mode 100644 index 0000000..a61d6b4 --- /dev/null +++ b/tools/z64compress/src/enc/apultra/apultra.c @@ -0,0 +1,1225 @@ +#if 0
+/*
+ * apultra.c - command line compression utility for the apultra library
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef _WIN32
+#include <windows.h>
+#include <sys/timeb.h>
+#else
+#include <sys/time.h>
+#endif
+#include "libapultra.h"
+
+#define OPT_VERBOSE 1
+#define OPT_STATS 2
+#define OPT_BACKWARD 4
+
+#define TOOL_VERSION "1.4.1"
+
+/*---------------------------------------------------------------------------*/
+
+#ifdef _WIN32
+LARGE_INTEGER hpc_frequency;
+BOOL hpc_available = FALSE;
+#endif
+
+static void do_init_time() {
+#ifdef _WIN32
+ hpc_frequency.QuadPart = 0;
+ hpc_available = QueryPerformanceFrequency(&hpc_frequency);
+#endif
+}
+
+static long long do_get_time() {
+ long long nTime;
+
+#ifdef _WIN32
+ if (hpc_available) {
+ LARGE_INTEGER nCurTime;
+
+ /* Use HPC hardware for best precision */
+ QueryPerformanceCounter(&nCurTime);
+ nTime = (long long)(nCurTime.QuadPart * 1000000LL / hpc_frequency.QuadPart);
+ }
+ else {
+ struct _timeb tb;
+ _ftime(&tb);
+
+ nTime = ((long long)tb.time * 1000LL + (long long)tb.millitm) * 1000LL;
+ }
+#else
+ struct timeval tm;
+ gettimeofday(&tm, NULL);
+
+ nTime = (long long)tm.tv_sec * 1000000LL + (long long)tm.tv_usec;
+#endif
+ return nTime;
+}
+
+static void do_reverse_buffer(unsigned char *pBuffer, size_t nBufferSize) {
+ size_t nMidPoint = nBufferSize / 2;
+ size_t i, j;
+
+ for (i = 0, j = nBufferSize - 1; i < nMidPoint; i++, j--) {
+ unsigned char c = pBuffer[i];
+ pBuffer[i] = pBuffer[j];
+ pBuffer[j] = c;
+ }
+}
+
+/*---------------------------------------------------------------------------*/
+
+static void compression_progress(long long nOriginalSize, long long nCompressedSize) {
+ if (nOriginalSize >= 512 * 1024) {
+ fprintf(stdout, "\r%lld => %lld (%g %%) \b\b\b\b\b", nOriginalSize, nCompressedSize, (double)(nCompressedSize * 100.0 / nOriginalSize));
+ fflush(stdout);
+ }
+}
+
+static int do_compress(const char *pszInFilename, const char *pszOutFilename, const char *pszDictionaryFilename, const unsigned int nOptions, const unsigned int nMaxWindowSize) {
+ long long nStartTime = 0LL, nEndTime = 0LL;
+ size_t nOriginalSize = 0L, nCompressedSize = 0L, nMaxCompressedSize;
+ int nFlags = 0;
+ apultra_stats stats;
+ unsigned char *pDecompressedData;
+ unsigned char *pCompressedData;
+
+ if (nOptions & OPT_VERBOSE) {
+ nStartTime = do_get_time();
+ }
+
+ FILE* f_dict = NULL;
+ size_t nDictionarySize = 0;
+ if (pszDictionaryFilename) {
+ /* Open the dictionary */
+ f_dict = fopen(pszDictionaryFilename, "rb");
+ if (!f_dict) {
+ fprintf(stderr, "error opening dictionary '%s' for reading\n", pszDictionaryFilename);
+ return 100;
+ }
+
+ /* Get dictionary size */
+ fseek(f_dict, 0, SEEK_END);
+ nDictionarySize = (size_t)ftell(f_dict);
+ fseek(f_dict, 0, SEEK_SET);
+
+ if (nDictionarySize > BLOCK_SIZE) nDictionarySize = BLOCK_SIZE;
+ }
+
+ /* Read the whole original file in memory */
+
+ FILE *f_in = fopen(pszInFilename, "rb");
+ if (!f_in) {
+ if (f_dict) fclose(f_dict);
+ fprintf(stderr, "error opening '%s' for reading\n", pszInFilename);
+ return 100;
+ }
+
+ fseek(f_in, 0, SEEK_END);
+ nOriginalSize = (size_t)ftell(f_in);
+ fseek(f_in, 0, SEEK_SET);
+
+ pDecompressedData = (unsigned char*)malloc(nDictionarySize + nOriginalSize);
+ if (!pDecompressedData) {
+ fclose(f_in);
+ if (f_dict) fclose(f_dict);
+ fprintf(stderr, "out of memory for reading '%s', %zd bytes needed\n", pszInFilename, nOriginalSize);
+ return 100;
+ }
+
+ if (f_dict) {
+ /* Read dictionary data */
+ if (fread(pDecompressedData + ((nOptions & OPT_BACKWARD) ? nOriginalSize : 0), 1, nDictionarySize, f_dict) != nDictionarySize) {
+ free(pDecompressedData);
+ fclose(f_in);
+ fclose(f_dict);
+ fprintf(stderr, "I/O error while reading dictionary '%s'\n", pszDictionaryFilename);
+ return 100;
+ }
+
+ fclose(f_dict);
+ f_dict = NULL;
+ }
+
+ /* Read input file data */
+ if (fread(pDecompressedData + ((nOptions & OPT_BACKWARD) ? 0 : nDictionarySize), 1, nOriginalSize, f_in) != nOriginalSize) {
+ free(pDecompressedData);
+ fclose(f_in);
+ fprintf(stderr, "I/O error while reading '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ fclose(f_in);
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pDecompressedData, nDictionarySize + nOriginalSize);
+
+ /* Allocate max compressed size */
+
+ nMaxCompressedSize = apultra_get_max_compressed_size(nDictionarySize + nOriginalSize);
+
+ pCompressedData = (unsigned char*)malloc(nMaxCompressedSize);
+ if (!pCompressedData) {
+ free(pDecompressedData);
+ fprintf(stderr, "out of memory for compressing '%s', %zd bytes needed\n", pszInFilename, nMaxCompressedSize);
+ return 100;
+ }
+
+ memset(pCompressedData, 0, nMaxCompressedSize);
+
+ nCompressedSize = apultra_compress(pDecompressedData, pCompressedData, nDictionarySize + nOriginalSize, nMaxCompressedSize, nFlags, nMaxWindowSize, nDictionarySize, compression_progress, &stats);
+
+ if ((nOptions & OPT_VERBOSE)) {
+ nEndTime = do_get_time();
+ }
+
+ if (nCompressedSize == -1) {
+ free(pCompressedData);
+ free(pDecompressedData);
+ fprintf(stderr, "compression error for '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pCompressedData, nCompressedSize);
+
+ if (pszOutFilename) {
+ FILE *f_out;
+
+ /* Write whole compressed file out */
+
+ f_out = fopen(pszOutFilename, "wb");
+ if (f_out) {
+ fwrite(pCompressedData, 1, nCompressedSize, f_out);
+ fclose(f_out);
+ }
+ }
+
+ free(pCompressedData);
+ free(pDecompressedData);
+
+ if ((nOptions & OPT_VERBOSE)) {
+ double fDelta = ((double)(nEndTime - nStartTime)) / 1000000.0;
+ double fSpeed = ((double)nOriginalSize / 1048576.0) / fDelta;
+ fprintf(stdout, "\rCompressed '%s' in %g seconds, %.02g Mb/s, %d tokens (%g bytes/token), %d into %d bytes ==> %g %%\n",
+ pszInFilename, fDelta, fSpeed, stats.commands_divisor, (double)nOriginalSize / (double)stats.commands_divisor,
+ (int)nOriginalSize, (int)nCompressedSize, (double)(nCompressedSize * 100.0 / nOriginalSize));
+ }
+
+ if (nOptions & OPT_STATS) {
+ fprintf(stdout, "Tokens: literals: %d short matches: %d normal matches: %d large matches: %d rep matches: %d EOD: %d\n",
+ stats.num_literals, stats.num_4bit_matches, stats.num_7bit_matches, stats.num_variable_matches, stats.num_rep_matches, stats.num_eod);
+ if (stats.match_divisor > 0) {
+ fprintf(stdout, "Offsets: min: %d avg: %d max: %d count: %d\n", stats.min_offset, (int)(stats.total_offsets / (long long)stats.match_divisor), stats.max_offset, stats.match_divisor);
+ fprintf(stdout, "Match lens: min: %d avg: %d max: %d count: %d\n", stats.min_match_len, stats.total_match_lens / stats.match_divisor, stats.max_match_len, stats.match_divisor);
+ }
+ else {
+ fprintf(stdout, "Offsets: none\n");
+ fprintf(stdout, "Match lens: none\n");
+ }
+ if (stats.rle1_divisor > 0) {
+ fprintf(stdout, "RLE1 lens: min: %d avg: %d max: %d count: %d\n", stats.min_rle1_len, stats.total_rle1_lens / stats.rle1_divisor, stats.max_rle1_len, stats.rle1_divisor);
+ }
+ else {
+ fprintf(stdout, "RLE1 lens: none\n");
+ }
+ if (stats.rle2_divisor > 0) {
+ fprintf(stdout, "RLE2 lens: min: %d avg: %d max: %d count: %d\n", stats.min_rle2_len, stats.total_rle2_lens / stats.rle2_divisor, stats.max_rle2_len, stats.rle2_divisor);
+ }
+ else {
+ fprintf(stdout, "RLE2 lens: none\n");
+ }
+ fprintf(stdout, "Safe distance: %d (0x%X)\n", stats.safe_dist, stats.safe_dist);
+ }
+ return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+
+static int do_decompress(const char *pszInFilename, const char *pszOutFilename, const char *pszDictionaryFilename, const unsigned int nOptions) {
+ long long nStartTime = 0LL, nEndTime = 0LL;
+ size_t nCompressedSize, nMaxDecompressedSize, nOriginalSize;
+ unsigned char *pCompressedData;
+ unsigned char *pDecompressedData;
+ int nFlags = 0;
+
+ /* Read the whole compressed file in memory */
+
+ FILE *f_in = fopen(pszInFilename, "rb");
+ if (!f_in) {
+ fprintf(stderr, "error opening '%s' for reading\n", pszInFilename);
+ return 100;
+ }
+
+ fseek(f_in, 0, SEEK_END);
+ nCompressedSize = (size_t)ftell(f_in);
+ fseek(f_in, 0, SEEK_SET);
+
+ pCompressedData = (unsigned char*)malloc(nCompressedSize);
+ if (!pCompressedData) {
+ fclose(f_in);
+ fprintf(stderr, "out of memory for reading '%s', %zd bytes needed\n", pszInFilename, nCompressedSize);
+ return 100;
+ }
+
+ if (fread(pCompressedData, 1, nCompressedSize, f_in) != nCompressedSize) {
+ free(pCompressedData);
+ fclose(f_in);
+ fprintf(stderr, "I/O error while reading '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ fclose(f_in);
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pCompressedData, nCompressedSize);
+
+ /* Get max decompressed size */
+
+ nMaxDecompressedSize = apultra_get_max_decompressed_size(pCompressedData, nCompressedSize, nFlags);
+ if (nMaxDecompressedSize == -1) {
+ free(pCompressedData);
+ fprintf(stderr, "invalid compressed format for file '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ FILE* f_dict = NULL;
+ size_t nDictionarySize = 0;
+ if (pszDictionaryFilename) {
+ /* Open the dictionary */
+ f_dict = fopen(pszDictionaryFilename, "rb");
+ if (!f_dict) {
+ fprintf(stderr, "error opening dictionary '%s' for reading\n", pszDictionaryFilename);
+ return 100;
+ }
+
+ /* Get dictionary size */
+ fseek(f_dict, 0, SEEK_END);
+ nDictionarySize = (size_t)ftell(f_dict);
+ fseek(f_dict, 0, SEEK_SET);
+
+ if (nDictionarySize > BLOCK_SIZE) nDictionarySize = BLOCK_SIZE;
+ }
+
+ /* Allocate max decompressed size */
+
+ pDecompressedData = (unsigned char*)malloc(nDictionarySize + nMaxDecompressedSize);
+ if (!pDecompressedData) {
+ free(pCompressedData);
+ if (f_dict) fclose(f_dict);
+ fprintf(stderr, "out of memory for decompressing '%s', %zd bytes needed\n", pszInFilename, nMaxDecompressedSize);
+ return 100;
+ }
+
+ memset(pDecompressedData, 0, nDictionarySize + nMaxDecompressedSize);
+
+ if (f_dict) {
+ /* Read dictionary data */
+ if (fread(pDecompressedData, 1, nDictionarySize, f_dict) != nDictionarySize) {
+ free(pDecompressedData);
+ fclose(f_in);
+ fclose(f_dict);
+ fprintf(stderr, "I/O error while reading dictionary '%s'\n", pszDictionaryFilename);
+ return 100;
+ }
+
+ fclose(f_dict);
+ f_dict = NULL;
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pDecompressedData, nDictionarySize);
+ }
+
+ if (nOptions & OPT_VERBOSE) {
+ nStartTime = do_get_time();
+ }
+
+ nOriginalSize = apultra_decompress(pCompressedData, pDecompressedData, nCompressedSize, nMaxDecompressedSize, nDictionarySize, nFlags);
+ if (nOriginalSize == -1) {
+ free(pDecompressedData);
+ free(pCompressedData);
+
+ fprintf(stderr, "decompression error for '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pDecompressedData + nDictionarySize, nOriginalSize);
+
+ if (pszOutFilename) {
+ FILE *f_out;
+
+ /* Write whole decompressed file out */
+
+ f_out = fopen(pszOutFilename, "wb");
+ if (f_out) {
+ fwrite(pDecompressedData + nDictionarySize, 1, nOriginalSize, f_out);
+ fclose(f_out);
+ }
+ }
+
+ free(pDecompressedData);
+ free(pCompressedData);
+
+ if (nOptions & OPT_VERBOSE) {
+ nEndTime = do_get_time();
+ double fDelta = ((double)(nEndTime - nStartTime)) / 1000000.0;
+ double fSpeed = ((double)nOriginalSize / 1048576.0) / fDelta;
+ fprintf(stdout, "Decompressed '%s' in %g seconds, %g Mb/s\n",
+ pszInFilename, fDelta, fSpeed);
+ }
+
+ return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+
+static int do_compare(const char *pszInFilename, const char *pszOutFilename, const char *pszDictionaryFilename, const unsigned int nOptions) {
+ long long nStartTime = 0LL, nEndTime = 0LL;
+ size_t nCompressedSize, nMaxDecompressedSize, nOriginalSize, nDecompressedSize;
+ unsigned char *pCompressedData = NULL;
+ unsigned char *pOriginalData = NULL;
+ unsigned char *pDecompressedData = NULL;
+ int nFlags = 0;
+
+ /* Read the whole compressed file in memory */
+
+ FILE *f_in = fopen(pszInFilename, "rb");
+ if (!f_in) {
+ fprintf(stderr, "error opening '%s' for reading\n", pszInFilename);
+ return 100;
+ }
+
+ fseek(f_in, 0, SEEK_END);
+ nCompressedSize = (size_t)ftell(f_in);
+ fseek(f_in, 0, SEEK_SET);
+
+ pCompressedData = (unsigned char*)malloc(nCompressedSize);
+ if (!pCompressedData) {
+ fclose(f_in);
+ fprintf(stderr, "out of memory for reading '%s', %zd bytes needed\n", pszInFilename, nCompressedSize);
+ return 100;
+ }
+
+ if (fread(pCompressedData, 1, nCompressedSize, f_in) != nCompressedSize) {
+ free(pCompressedData);
+ fclose(f_in);
+ fprintf(stderr, "I/O error while reading '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ fclose(f_in);
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pCompressedData, nCompressedSize);
+
+ /* Read the whole original file in memory */
+
+ f_in = fopen(pszOutFilename, "rb");
+ if (!f_in) {
+ free(pCompressedData);
+ fprintf(stderr, "error opening '%s' for reading\n", pszInFilename);
+ return 100;
+ }
+
+ fseek(f_in, 0, SEEK_END);
+ nOriginalSize = (size_t)ftell(f_in);
+ fseek(f_in, 0, SEEK_SET);
+
+ pOriginalData = (unsigned char*)malloc(nOriginalSize);
+ if (!pOriginalData) {
+ fclose(f_in);
+ free(pCompressedData);
+ fprintf(stderr, "out of memory for reading '%s', %zd bytes needed\n", pszInFilename, nOriginalSize);
+ return 100;
+ }
+
+ if (fread(pOriginalData, 1, nOriginalSize, f_in) != nOriginalSize) {
+ free(pOriginalData);
+ fclose(f_in);
+ free(pCompressedData);
+ fprintf(stderr, "I/O error while reading '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ fclose(f_in);
+
+ /* Get max decompressed size */
+
+ nMaxDecompressedSize = apultra_get_max_decompressed_size(pCompressedData, nCompressedSize, nFlags);
+ if (nMaxDecompressedSize == -1) {
+ free(pOriginalData);
+ free(pCompressedData);
+ fprintf(stderr, "invalid compressed format for file '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ FILE* f_dict = NULL;
+ size_t nDictionarySize = 0;
+ if (pszDictionaryFilename) {
+ /* Open the dictionary */
+ f_dict = fopen(pszDictionaryFilename, "rb");
+ if (!f_dict) {
+ fprintf(stderr, "error opening dictionary '%s' for reading\n", pszDictionaryFilename);
+ return 100;
+ }
+
+ /* Get dictionary size */
+ fseek(f_dict, 0, SEEK_END);
+ nDictionarySize = (size_t)ftell(f_dict);
+ fseek(f_dict, 0, SEEK_SET);
+
+ if (nDictionarySize > BLOCK_SIZE) nDictionarySize = BLOCK_SIZE;
+ }
+
+ /* Allocate max decompressed size */
+
+ pDecompressedData = (unsigned char*)malloc(nDictionarySize + nMaxDecompressedSize);
+ if (!pDecompressedData) {
+ free(pOriginalData);
+ free(pCompressedData);
+ if (f_dict) fclose(f_dict);
+ fprintf(stderr, "out of memory for decompressing '%s', %zd bytes needed\n", pszInFilename, nMaxDecompressedSize);
+ return 100;
+ }
+
+ memset(pDecompressedData, 0, nDictionarySize + nMaxDecompressedSize);
+
+ if (f_dict) {
+ /* Read dictionary data */
+ if (fread(pDecompressedData, 1, nDictionarySize, f_dict) != nDictionarySize) {
+ free(pDecompressedData);
+ fclose(f_in);
+ fclose(f_dict);
+ fprintf(stderr, "I/O error while reading dictionary '%s'\n", pszDictionaryFilename);
+ return 100;
+ }
+
+ fclose(f_dict);
+ f_dict = NULL;
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pDecompressedData, nDictionarySize);
+ }
+
+ if (nOptions & OPT_VERBOSE) {
+ nStartTime = do_get_time();
+ }
+
+ nDecompressedSize = apultra_decompress(pCompressedData, pDecompressedData, nCompressedSize, nMaxDecompressedSize, nDictionarySize, nFlags);
+ if (nDecompressedSize == -1) {
+ free(pDecompressedData);
+ free(pOriginalData);
+ free(pCompressedData);
+
+ fprintf(stderr, "decompression error for '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pDecompressedData + nDictionarySize, nDecompressedSize);
+
+ if (nDecompressedSize != nOriginalSize || memcmp(pDecompressedData + nDictionarySize, pOriginalData, nOriginalSize)) {
+ fprintf(stderr, "error comparing compressed file '%s' with original '%s'\n", pszInFilename, pszOutFilename);
+ return 100;
+ }
+
+ free(pDecompressedData);
+ free(pOriginalData);
+ free(pCompressedData);
+
+ if (nOptions & OPT_VERBOSE) {
+ nEndTime = do_get_time();
+ double fDelta = ((double)(nEndTime - nStartTime)) / 1000000.0;
+ double fSpeed = ((double)nOriginalSize / 1048576.0) / fDelta;
+ fprintf(stdout, "Compared '%s' in %g seconds, %g Mb/s\n",
+ pszInFilename, fDelta, fSpeed);
+ }
+
+ return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+
+static void generate_compressible_data(unsigned char *pBuffer, size_t nBufferSize, unsigned int nSeed, int nNumLiteralValues, float fMatchProbability) {
+ size_t nIndex = 0;
+ int nMatchProbability = (int)(fMatchProbability * 1023.0f);
+
+ srand(nSeed);
+
+ if (nIndex >= nBufferSize) return;
+ pBuffer[nIndex++] = rand() % nNumLiteralValues;
+
+ while (nIndex < nBufferSize) {
+ if ((rand() & 1023) >= nMatchProbability) {
+ size_t nLiteralCount = rand() & 127;
+ if (nLiteralCount > (nBufferSize - nIndex))
+ nLiteralCount = nBufferSize - nIndex;
+
+ while (nLiteralCount--)
+ pBuffer[nIndex++] = rand() % nNumLiteralValues;
+ }
+ else {
+ size_t nMatchLength = MIN_MATCH_SIZE + (rand() & 1023);
+ size_t nMatchOffset;
+
+ if (nMatchLength > (nBufferSize - nIndex))
+ nMatchLength = nBufferSize - nIndex;
+ if (nMatchLength > nIndex)
+ nMatchLength = nIndex;
+
+ if (nMatchLength < nIndex)
+ nMatchOffset = rand() % (nIndex - nMatchLength);
+ else
+ nMatchOffset = 0;
+
+ while (nMatchLength--) {
+ pBuffer[nIndex] = pBuffer[nIndex - nMatchOffset];
+ nIndex++;
+ }
+ }
+ }
+}
+
+static void xor_data(unsigned char *pBuffer, size_t nBufferSize, unsigned int nSeed, float fXorProbability) {
+ size_t nIndex = 0;
+ int nXorProbability = (int)(fXorProbability * 1023.0f);
+
+ srand(nSeed);
+
+ if (nIndex >= nBufferSize) return;
+
+ while (nIndex < nBufferSize) {
+ if ((rand() & 1023) < nXorProbability) {
+ pBuffer[nIndex] ^= 0xff;
+ }
+ nIndex++;
+ }
+}
+
+static int do_self_test(const unsigned int nOptions, const unsigned int nMaxWindowSize, const int nIsQuickTest) {
+ unsigned char *pGeneratedData;
+ unsigned char *pCompressedData;
+ unsigned char *pTmpCompressedData;
+ unsigned char *pTmpDecompressedData;
+ size_t nGeneratedDataSize;
+ size_t nMaxCompressedDataSize;
+ unsigned int nSeed = 123;
+ int nFlags = 0;
+ int i;
+
+ pGeneratedData = (unsigned char*)malloc(4 * BLOCK_SIZE);
+ if (!pGeneratedData) {
+ fprintf(stderr, "out of memory, %d bytes needed\n", 4 * BLOCK_SIZE);
+ return 100;
+ }
+
+ nMaxCompressedDataSize = apultra_get_max_compressed_size(4 * BLOCK_SIZE);
+ pCompressedData = (unsigned char*)malloc(nMaxCompressedDataSize);
+ if (!pCompressedData) {
+ free(pGeneratedData);
+ pGeneratedData = NULL;
+
+ fprintf(stderr, "out of memory, %zd bytes needed\n", nMaxCompressedDataSize);
+ return 100;
+ }
+
+ pTmpCompressedData = (unsigned char*)malloc(nMaxCompressedDataSize);
+ if (!pTmpCompressedData) {
+ free(pCompressedData);
+ pCompressedData = NULL;
+ free(pGeneratedData);
+ pGeneratedData = NULL;
+
+ fprintf(stderr, "out of memory, %zd bytes needed\n", nMaxCompressedDataSize);
+ return 100;
+ }
+
+ pTmpDecompressedData = (unsigned char*)malloc(4 * BLOCK_SIZE);
+ if (!pTmpDecompressedData) {
+ free(pTmpCompressedData);
+ pTmpCompressedData = NULL;
+ free(pCompressedData);
+ pCompressedData = NULL;
+ free(pGeneratedData);
+ pGeneratedData = NULL;
+
+ fprintf(stderr, "out of memory, %d bytes needed\n", 4 * BLOCK_SIZE);
+ return 100;
+ }
+
+ memset(pGeneratedData, 0, 4 * BLOCK_SIZE);
+ memset(pCompressedData, 0, nMaxCompressedDataSize);
+ memset(pTmpCompressedData, 0, nMaxCompressedDataSize);
+
+ /* Test compressing with a too small buffer to do anything, expect to fail cleanly */
+ for (i = 0; i < 12; i++) {
+ generate_compressible_data(pGeneratedData, i, nSeed, 256, 0.5f);
+ apultra_compress(pGeneratedData, pCompressedData, i, i, nFlags, nMaxWindowSize, 0 /* dictionary size */, NULL, NULL);
+ }
+
+ size_t nDataSizeStep = 128;
+ float fProbabilitySizeStep = nIsQuickTest ? 0.005f : 0.0005f;
+
+ for (nGeneratedDataSize = 1024; nGeneratedDataSize <= (nIsQuickTest ? 1024U : (4U * BLOCK_SIZE)); nGeneratedDataSize += nDataSizeStep) {
+ float fMatchProbability;
+
+ fprintf(stdout, "size %zd", nGeneratedDataSize);
+ for (fMatchProbability = 0; fMatchProbability <= 0.995f; fMatchProbability += fProbabilitySizeStep) {
+ int nNumLiteralValues[12] = { 1, 2, 3, 15, 30, 56, 96, 137, 178, 191, 255, 256 };
+ float fXorProbability;
+
+ fputc('.', stdout);
+ fflush(stdout);
+
+ for (i = 0; i < 12; i++) {
+ /* Generate data to compress */
+ generate_compressible_data(pGeneratedData, nGeneratedDataSize, nSeed, nNumLiteralValues[i], fMatchProbability);
+
+ /* Try to compress it, expected to succeed */
+ size_t nActualCompressedSize = apultra_compress(pGeneratedData, pCompressedData, nGeneratedDataSize, apultra_get_max_compressed_size(nGeneratedDataSize),
+ nFlags, nMaxWindowSize, 0 /* dictionary size */, NULL, NULL);
+ if (nActualCompressedSize == -1 || nActualCompressedSize < (1 + 1 + 1 /* footer */)) {
+ free(pTmpDecompressedData);
+ pTmpDecompressedData = NULL;
+ free(pTmpCompressedData);
+ pTmpCompressedData = NULL;
+ free(pCompressedData);
+ pCompressedData = NULL;
+ free(pGeneratedData);
+ pGeneratedData = NULL;
+
+ fprintf(stderr, "\nself-test: error compressing size %zd, seed %d, match probability %f, literals range %d\n", nGeneratedDataSize, nSeed, fMatchProbability, nNumLiteralValues[i]);
+ return 100;
+ }
+
+ /* Try to decompress it, expected to succeed */
+ size_t nActualDecompressedSize;
+ nActualDecompressedSize = apultra_decompress(pCompressedData, pTmpDecompressedData, nActualCompressedSize, nGeneratedDataSize, 0 /* dictionary size */, nFlags);
+ if (nActualDecompressedSize == -1) {
+ free(pTmpDecompressedData);
+ pTmpDecompressedData = NULL;
+ free(pTmpCompressedData);
+ pTmpCompressedData = NULL;
+ free(pCompressedData);
+ pCompressedData = NULL;
+ free(pGeneratedData);
+ pGeneratedData = NULL;
+
+ fprintf(stderr, "\nself-test: error decompressing size %zd, seed %d, match probability %f, literals range %d\n", nGeneratedDataSize, nSeed, fMatchProbability, nNumLiteralValues[i]);
+ return 100;
+ }
+
+ if (memcmp(pGeneratedData, pTmpDecompressedData, nGeneratedDataSize)) {
+ free(pTmpDecompressedData);
+ pTmpDecompressedData = NULL;
+ free(pTmpCompressedData);
+ pTmpCompressedData = NULL;
+ free(pCompressedData);
+ pCompressedData = NULL;
+ free(pGeneratedData);
+ pGeneratedData = NULL;
+
+ fprintf(stderr, "\nself-test: error comparing decompressed and original data, size %zd, seed %d, match probability %f, literals range %d\n", nGeneratedDataSize, nSeed, fMatchProbability, nNumLiteralValues[i]);
+ return 100;
+ }
+
+ /* Try to decompress corrupted data, expected to fail cleanly, without crashing or corrupting memory outside the output buffer */
+ for (fXorProbability = 0.05f; fXorProbability <= 0.5f; fXorProbability += 0.05f) {
+ memcpy(pTmpCompressedData, pCompressedData, nActualCompressedSize);
+ xor_data(pTmpCompressedData, nActualCompressedSize, nSeed, fXorProbability);
+ apultra_decompress(pTmpCompressedData, pGeneratedData, nActualCompressedSize, nGeneratedDataSize, 0 /* dictionary size */, nFlags);
+ }
+ }
+
+ nSeed++;
+ }
+
+ fputc(10, stdout);
+ fflush(stdout);
+
+ nDataSizeStep <<= 1;
+ if (nDataSizeStep > (128 * 4096))
+ nDataSizeStep = 128 * 4096;
+ fProbabilitySizeStep *= 1.25;
+ if (fProbabilitySizeStep > (0.0005f * 4096))
+ fProbabilitySizeStep = 0.0005f * 4096;
+ }
+
+ free(pTmpDecompressedData);
+ pTmpDecompressedData = NULL;
+
+ free(pTmpCompressedData);
+ pTmpCompressedData = NULL;
+
+ free(pCompressedData);
+ pCompressedData = NULL;
+
+ free(pGeneratedData);
+ pGeneratedData = NULL;
+
+ fprintf(stdout, "All tests passed.\n");
+ return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+
+static int do_compr_benchmark(const char *pszInFilename, const char *pszOutFilename, const char *pszDictionaryFilename, const unsigned int nOptions, const unsigned int nMaxWindowSize) {
+ size_t nFileSize, nMaxCompressedSize;
+ unsigned char *pFileData;
+ unsigned char *pCompressedData;
+ int nFlags = 0;
+ int i;
+
+ if (pszDictionaryFilename) {
+ fprintf(stderr, "in-memory benchmarking does not support dictionaries\n");
+ return 100;
+ }
+
+ /* Read the whole original file in memory */
+
+ FILE *f_in = fopen(pszInFilename, "rb");
+ if (!f_in) {
+ fprintf(stderr, "error opening '%s' for reading\n", pszInFilename);
+ return 100;
+ }
+
+ fseek(f_in, 0, SEEK_END);
+ nFileSize = (size_t)ftell(f_in);
+ fseek(f_in, 0, SEEK_SET);
+
+ pFileData = (unsigned char*)malloc(nFileSize);
+ if (!pFileData) {
+ fclose(f_in);
+ fprintf(stderr, "out of memory for reading '%s', %zd bytes needed\n", pszInFilename, nFileSize);
+ return 100;
+ }
+
+ if (fread(pFileData, 1, nFileSize, f_in) != nFileSize) {
+ free(pFileData);
+ fclose(f_in);
+ fprintf(stderr, "I/O error while reading '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ fclose(f_in);
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pFileData, nFileSize);
+
+ /* Allocate max compressed size */
+
+ nMaxCompressedSize = apultra_get_max_compressed_size(nFileSize);
+
+ pCompressedData = (unsigned char*)malloc(nMaxCompressedSize + 2048);
+ if (!pCompressedData) {
+ free(pFileData);
+ fprintf(stderr, "out of memory for compressing '%s', %zd bytes needed\n", pszInFilename, nMaxCompressedSize);
+ return 100;
+ }
+
+ memset(pCompressedData + 1024, 0, nMaxCompressedSize);
+
+ long long nBestCompTime = -1;
+
+ size_t nActualCompressedSize = 0;
+ size_t nRightGuardPos = nMaxCompressedSize;
+
+ for (i = 0; i < 5; i++) {
+ unsigned char nGuard = 0x33 + i;
+ int j;
+
+ /* Write guard bytes around the output buffer, to help check for writes outside of it by the compressor */
+ memset(pCompressedData, nGuard, 1024);
+ memset(pCompressedData + 1024 + nRightGuardPos, nGuard, 1024);
+
+ long long t0 = do_get_time();
+ nActualCompressedSize = apultra_compress(pFileData, pCompressedData + 1024, nFileSize, nRightGuardPos, nFlags, nMaxWindowSize, 0 /* dictionary size */, NULL, NULL);
+ long long t1 = do_get_time();
+ if (nActualCompressedSize == -1) {
+ free(pCompressedData);
+ free(pFileData);
+ fprintf(stderr, "compression error\n");
+ return 100;
+ }
+
+ long long nCurDecTime = t1 - t0;
+ if (nBestCompTime == -1 || nBestCompTime > nCurDecTime)
+ nBestCompTime = nCurDecTime;
+
+ /* Check guard bytes before the output buffer */
+ for (j = 0; j < 1024; j++) {
+ if (pCompressedData[j] != nGuard) {
+ free(pCompressedData);
+ free(pFileData);
+ fprintf(stderr, "error, wrote outside of output buffer at %d!\n", j - 1024);
+ return 100;
+ }
+ }
+
+ /* Check guard bytes after the output buffer */
+ for (j = 0; j < 1024; j++) {
+ if (pCompressedData[1024 + nRightGuardPos + j] != nGuard) {
+ free(pCompressedData);
+ free(pFileData);
+ fprintf(stderr, "error, wrote outside of output buffer at %d!\n", j);
+ return 100;
+ }
+ }
+
+ nRightGuardPos = nActualCompressedSize;
+ }
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pCompressedData + 1024, nActualCompressedSize);
+
+ if (pszOutFilename) {
+ FILE *f_out;
+
+ /* Write whole compressed file out */
+
+ f_out = fopen(pszOutFilename, "wb");
+ if (f_out) {
+ fwrite(pCompressedData + 1024, 1, nActualCompressedSize, f_out);
+ fclose(f_out);
+ }
+ }
+
+ free(pCompressedData);
+ free(pFileData);
+
+ fprintf(stdout, "compressed size: %zd bytes\n", nActualCompressedSize);
+ fprintf(stdout, "compression time: %lld microseconds (%g Mb/s)\n", nBestCompTime, ((double)nActualCompressedSize / 1024.0) / ((double)nBestCompTime / 1000.0));
+
+ return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+
+static int do_dec_benchmark(const char *pszInFilename, const char *pszOutFilename, const char *pszDictionaryFilename, const unsigned int nOptions) {
+ size_t nFileSize, nMaxDecompressedSize;
+ unsigned char *pFileData;
+ unsigned char *pDecompressedData;
+ int nFlags = 0;
+ int i;
+
+ if (pszDictionaryFilename) {
+ fprintf(stderr, "in-memory benchmarking does not support dictionaries\n");
+ return 100;
+ }
+
+ /* Read the whole compressed file in memory */
+
+ FILE *f_in = fopen(pszInFilename, "rb");
+ if (!f_in) {
+ fprintf(stderr, "error opening '%s' for reading\n", pszInFilename);
+ return 100;
+ }
+
+ fseek(f_in, 0, SEEK_END);
+ nFileSize = (size_t)ftell(f_in);
+ fseek(f_in, 0, SEEK_SET);
+
+ pFileData = (unsigned char*)malloc(nFileSize);
+ if (!pFileData) {
+ fclose(f_in);
+ fprintf(stderr, "out of memory for reading '%s', %zd bytes needed\n", pszInFilename, nFileSize);
+ return 100;
+ }
+
+ if (fread(pFileData, 1, nFileSize, f_in) != nFileSize) {
+ free(pFileData);
+ fclose(f_in);
+ fprintf(stderr, "I/O error while reading '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ fclose(f_in);
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pFileData, nFileSize);
+
+ /* Allocate max decompressed size */
+
+ nMaxDecompressedSize = apultra_get_max_decompressed_size(pFileData, nFileSize, nFlags);
+ if (nMaxDecompressedSize == -1) {
+ free(pFileData);
+ fprintf(stderr, "invalid compressed format for file '%s'\n", pszInFilename);
+ return 100;
+ }
+
+ pDecompressedData = (unsigned char*)malloc(nMaxDecompressedSize);
+ if (!pDecompressedData) {
+ free(pFileData);
+ fprintf(stderr, "out of memory for decompressing '%s', %zd bytes needed\n", pszInFilename, nMaxDecompressedSize);
+ return 100;
+ }
+
+ memset(pDecompressedData, 0, nMaxDecompressedSize);
+
+ long long nBestDecTime = -1;
+
+ size_t nActualDecompressedSize = 0;
+ for (i = 0; i < 50; i++) {
+ long long t0 = do_get_time();
+ nActualDecompressedSize = apultra_decompress(pFileData, pDecompressedData, nFileSize, nMaxDecompressedSize, 0 /* dictionary size */, nFlags);
+ long long t1 = do_get_time();
+ if (nActualDecompressedSize == -1) {
+ free(pDecompressedData);
+ free(pFileData);
+ fprintf(stderr, "decompression error\n");
+ return 100;
+ }
+
+ long long nCurDecTime = t1 - t0;
+ if (nBestDecTime == -1 || nBestDecTime > nCurDecTime)
+ nBestDecTime = nCurDecTime;
+ }
+
+ if (nOptions & OPT_BACKWARD)
+ do_reverse_buffer(pDecompressedData, nActualDecompressedSize);
+
+ if (pszOutFilename) {
+ FILE *f_out;
+
+ /* Write whole decompressed file out */
+
+ f_out = fopen(pszOutFilename, "wb");
+ if (f_out) {
+ fwrite(pDecompressedData, 1, nActualDecompressedSize, f_out);
+ fclose(f_out);
+ }
+ }
+
+ free(pDecompressedData);
+ free(pFileData);
+
+ fprintf(stdout, "decompressed size: %zd bytes\n", nActualDecompressedSize);
+ fprintf(stdout, "decompression time: %lld microseconds (%g Mb/s)\n", nBestDecTime, ((double)nActualDecompressedSize / 1024.0) / ((double)nBestDecTime / 1000.0));
+
+ return 0;
+}
+
+/*---------------------------------------------------------------------------*/
+
+int main(int argc, char **argv) {
+ int i;
+ const char *pszInFilename = NULL;
+ const char *pszOutFilename = NULL;
+ const char *pszDictionaryFilename = NULL;
+ int nArgsError = 0;
+ int nCommandDefined = 0;
+ int nVerifyCompression = 0;
+ char cCommand = 'z';
+ unsigned int nOptions = 0;
+ unsigned int nMaxWindowSize = 0;
+
+ for (i = 1; i < argc; i++) {
+ if (!strcmp(argv[i], "-d")) {
+ if (!nCommandDefined) {
+ nCommandDefined = 1;
+ cCommand = 'd';
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-z")) {
+ if (!nCommandDefined) {
+ nCommandDefined = 1;
+ cCommand = 'z';
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-c")) {
+ if (!nVerifyCompression) {
+ nVerifyCompression = 1;
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-cbench")) {
+ if (!nCommandDefined) {
+ nCommandDefined = 1;
+ cCommand = 'B';
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-dbench")) {
+ if (!nCommandDefined) {
+ nCommandDefined = 1;
+ cCommand = 'b';
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-test")) {
+ if (!nCommandDefined) {
+ nCommandDefined = 1;
+ cCommand = 't';
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-quicktest")) {
+ if (!nCommandDefined) {
+ nCommandDefined = 1;
+ cCommand = 'T';
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-D")) {
+ if (!pszDictionaryFilename && (i + 1) < argc) {
+ pszDictionaryFilename = argv[i + 1];
+ i++;
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strncmp(argv[i], "-D", 2)) {
+ if (!pszDictionaryFilename) {
+ pszDictionaryFilename = argv[i] + 2;
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-v")) {
+ if ((nOptions & OPT_VERBOSE) == 0) {
+ nOptions |= OPT_VERBOSE;
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-w")) {
+ if (!nMaxWindowSize && (i + 1) < argc) {
+ char *pEnd = NULL;
+ nMaxWindowSize = (int)strtol(argv[i + 1], &pEnd, 10);
+ if (pEnd && pEnd != argv[i + 1] && (nMaxWindowSize >= 16 && nMaxWindowSize <= 0x200000)) {
+ i++;
+ }
+ else {
+ nArgsError = 1;
+ }
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strncmp(argv[i], "-w", 2)) {
+ if (!nMaxWindowSize) {
+ char *pEnd = NULL;
+ nMaxWindowSize = (int)strtol(argv[i] + 2, &pEnd, 10);
+ if (!(pEnd && pEnd != (argv[i] + 2) && (nMaxWindowSize >= 16 && nMaxWindowSize <= 0x200000))) {
+ nArgsError = 1;
+ }
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-stats")) {
+ if ((nOptions & OPT_STATS) == 0) {
+ nOptions |= OPT_STATS;
+ }
+ else
+ nArgsError = 1;
+ }
+ else if (!strcmp(argv[i], "-b")) {
+ if ((nOptions & OPT_BACKWARD) == 0) {
+ nOptions |= OPT_BACKWARD;
+ }
+ else
+ nArgsError = 1;
+ }
+ else {
+ if (!pszInFilename)
+ pszInFilename = argv[i];
+ else {
+ if (!pszOutFilename)
+ pszOutFilename = argv[i];
+ else
+ nArgsError = 1;
+ }
+ }
+ }
+
+ if (!nArgsError && cCommand == 't') {
+ return do_self_test(nOptions, nMaxWindowSize, 0);
+ }
+ else if (!nArgsError && cCommand == 'T') {
+ return do_self_test(nOptions, nMaxWindowSize, 1);
+ }
+
+ if (nArgsError || !pszInFilename || !pszOutFilename) {
+ fprintf(stderr, "apultra command-line tool v" TOOL_VERSION " by Emmanuel Marty and spke\n");
+ fprintf(stderr, "usage: %s [-c] [-d] [-v] [-b] <infile> <outfile>\n", argv[0]);
+ fprintf(stderr, " -c: check resulting stream after compressing\n");
+ fprintf(stderr, " -d: decompress (default: compress)\n");
+ fprintf(stderr, " -b: backwards compression or decompression\n");
+ fprintf(stderr, " -w <size>: maximum window size, in bytes (16..2097152), defaults to maximum\n");
+ fprintf(stderr, " -D <file>: use dictionary file\n");
+ fprintf(stderr, " -cbench: benchmark in-memory compression\n");
+ fprintf(stderr, " -dbench: benchmark in-memory decompression\n");
+ fprintf(stderr, " -test: run full automated self-tests\n");
+ fprintf(stderr, "-quicktest: run quick automated self-tests\n");
+ fprintf(stderr, " -stats: show compressed data stats\n");
+ fprintf(stderr, " -v: be verbose\n");
+ return 100;
+ }
+
+ do_init_time();
+
+ if (cCommand == 'z') {
+ int nResult = do_compress(pszInFilename, pszOutFilename, pszDictionaryFilename, nOptions, nMaxWindowSize);
+ if (nResult == 0 && nVerifyCompression) {
+ return do_compare(pszOutFilename, pszInFilename, pszDictionaryFilename, nOptions);
+ } else {
+ return nResult;
+ }
+ }
+ else if (cCommand == 'd') {
+ return do_decompress(pszInFilename, pszOutFilename, pszDictionaryFilename, nOptions);
+ }
+ else if (cCommand == 'B') {
+ return do_compr_benchmark(pszInFilename, pszOutFilename, pszDictionaryFilename, nOptions, nMaxWindowSize);
+ }
+ else if (cCommand == 'b') {
+ return do_dec_benchmark(pszInFilename, pszOutFilename, pszDictionaryFilename, nOptions);
+ }
+ else {
+ return 100;
+ }
+}
+#endif
diff --git a/tools/z64compress/src/enc/apultra/divsufsort.c b/tools/z64compress/src/enc/apultra/divsufsort.c new file mode 100644 index 0000000..3a1c753 --- /dev/null +++ b/tools/z64compress/src/enc/apultra/divsufsort.c @@ -0,0 +1,460 @@ +/* + * divsufsort.c for libdivsufsort + * Copyright (c) 2003-2008 Yuta Mori All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "divsufsort_private.h" +#ifdef _OPENMP +# include <omp.h> +#endif + + +/*- Private Functions -*/ + +/* Sorts suffixes of type B*. */ +static +saidx_t +sort_typeBstar(const sauchar_t *T, saidx_t *SA, + saidx_t *bucket_A, saidx_t *bucket_B, + saidx_t n) { + saidx_t *PAb, *ISAb, *buf; +#ifdef _OPENMP + saidx_t *curbuf; + saidx_t l; +#endif + saidx_t i, j, k, t, m, bufsize; + saint_t c0, c1; +#ifdef _OPENMP + saint_t d0, d1; + int tmp; +#endif + + /* Initialize bucket arrays. */ + for(i = 0; i < BUCKET_A_SIZE; ++i) { bucket_A[i] = 0; } + for(i = 0; i < BUCKET_B_SIZE; ++i) { bucket_B[i] = 0; } + + /* Count the number of occurrences of the first one or two characters of each + type A, B and B* suffix. Moreover, store the beginning position of all + type B* suffixes into the array SA. */ + for(i = n - 1, m = n, c0 = T[n - 1]; 0 <= i;) { + /* type A suffix. */ + do { ++BUCKET_A(c1 = c0); } while((0 <= --i) && ((c0 = T[i]) >= c1)); + if(0 <= i) { + /* type B* suffix. */ + ++BUCKET_BSTAR(c0, c1); + SA[--m] = i; + /* type B suffix. */ + for(--i, c1 = c0; (0 <= i) && ((c0 = T[i]) <= c1); --i, c1 = c0) { + ++BUCKET_B(c0, c1); + } + } + } + m = n - m; +/* +note: + A type B* suffix is lexicographically smaller than a type B suffix that + begins with the same first two characters. +*/ + + /* Calculate the index of start/end point of each bucket. */ + for(c0 = 0, i = 0, j = 0; c0 < ALPHABET_SIZE; ++c0) { + t = i + BUCKET_A(c0); + BUCKET_A(c0) = i + j; /* start point */ + i = t + BUCKET_B(c0, c0); + for(c1 = c0 + 1; c1 < ALPHABET_SIZE; ++c1) { + j += BUCKET_BSTAR(c0, c1); + BUCKET_BSTAR(c0, c1) = j; /* end point */ + i += BUCKET_B(c0, c1); + } + } + + if(0 < m) { + /* Sort the type B* suffixes by their first two characters. */ + PAb = SA + n - m; ISAb = SA + m; + for(i = m - 2; 0 <= i; --i) { + t = PAb[i], c0 = T[t], c1 = T[t + 1]; + SA[--BUCKET_BSTAR(c0, c1)] = i; + } + t = PAb[m - 1], c0 = T[t], c1 = T[t + 1]; + SA[--BUCKET_BSTAR(c0, c1)] = m - 1; + + /* Sort the type B* substrings using sssort. */ +#ifdef _OPENMP + tmp = omp_get_max_threads(); + buf = SA + m, bufsize = (n - (2 * m)) / tmp; + c0 = ALPHABET_SIZE - 2, c1 = ALPHABET_SIZE - 1, j = m; +#pragma omp parallel default(shared) private(curbuf, k, l, d0, d1, tmp) + { + tmp = omp_get_thread_num(); + curbuf = buf + tmp * bufsize; + k = 0; + for(;;) { + #pragma omp critical(sssort_lock) + { + if(0 < (l = j)) { + d0 = c0, d1 = c1; + do { + k = BUCKET_BSTAR(d0, d1); + if(--d1 <= d0) { + d1 = ALPHABET_SIZE - 1; + if(--d0 < 0) { break; } + } + } while(((l - k) <= 1) && (0 < (l = k))); + c0 = d0, c1 = d1, j = k; + } + } + if(l == 0) { break; } + sssort(T, PAb, SA + k, SA + l, + curbuf, bufsize, 2, n, *(SA + k) == (m - 1)); + } + } +#else + buf = SA + m, bufsize = n - (2 * m); + for(c0 = ALPHABET_SIZE - 2, j = m; 0 < j; --c0) { + for(c1 = ALPHABET_SIZE - 1; c0 < c1; j = i, --c1) { + i = BUCKET_BSTAR(c0, c1); + if(1 < (j - i)) { + sssort(T, PAb, SA + i, SA + j, + buf, bufsize, 2, n, *(SA + i) == (m - 1)); + } + } + } +#endif + + /* Compute ranks of type B* substrings. */ + for(i = m - 1; 0 <= i; --i) { + if(0 <= SA[i]) { + j = i; + do { ISAb[SA[i]] = i; } while((0 <= --i) && (0 <= SA[i])); + SA[i + 1] = i - j; + if(i <= 0) { break; } + } + j = i; + do { ISAb[SA[i] = ~SA[i]] = j; } while(SA[--i] < 0); + ISAb[SA[i]] = j; + } + + /* Construct the inverse suffix array of type B* suffixes using trsort. */ + trsort(ISAb, SA, m, 1); + + /* Set the sorted order of tyoe B* suffixes. */ + for(i = n - 1, j = m, c0 = T[n - 1]; 0 <= i;) { + for(--i, c1 = c0; (0 <= i) && ((c0 = T[i]) >= c1); --i, c1 = c0) { } + if(0 <= i) { + t = i; + for(--i, c1 = c0; (0 <= i) && ((c0 = T[i]) <= c1); --i, c1 = c0) { } + SA[ISAb[--j]] = ((t == 0) || (1 < (t - i))) ? t : ~t; + } + } + + /* Calculate the index of start/end point of each bucket. */ + BUCKET_B(ALPHABET_SIZE - 1, ALPHABET_SIZE - 1) = n; /* end point */ + for(c0 = ALPHABET_SIZE - 2, k = m - 1; 0 <= c0; --c0) { + i = BUCKET_A(c0 + 1) - 1; + for(c1 = ALPHABET_SIZE - 1; c0 < c1; --c1) { + t = i - BUCKET_B(c0, c1); + BUCKET_B(c0, c1) = i; /* end point */ + + /* Move all type B* suffixes to the correct position. */ + for(i = t, j = BUCKET_BSTAR(c0, c1); + j <= k; + --i, --k) { SA[i] = SA[k]; } + } + BUCKET_BSTAR(c0, c0 + 1) = i - BUCKET_B(c0, c0) + 1; /* start point */ + BUCKET_B(c0, c0) = i; /* end point */ + } + } + + return m; +} + +/* Constructs the suffix array by using the sorted order of type B* suffixes. */ +static +void +construct_SA(const sauchar_t *T, saidx_t *SA, + saidx_t *bucket_A, saidx_t *bucket_B, + saidx_t n, saidx_t m) { + saidx_t *i, *j, *k; + saidx_t s; + saint_t c0, c1, c2; + + if(0 < m) { + /* Construct the sorted order of type B suffixes by using + the sorted order of type B* suffixes. */ + for(c1 = ALPHABET_SIZE - 2; 0 <= c1; --c1) { + /* Scan the suffix array from right to left. */ + for(i = SA + BUCKET_BSTAR(c1, c1 + 1), + j = SA + BUCKET_A(c1 + 1) - 1, k = NULL, c2 = -1; + i <= j; + --j) { + if(0 < (s = *j)) { + assert(T[s] == c1); + assert(((s + 1) < n) && (T[s] <= T[s + 1])); + assert(T[s - 1] <= T[s]); + *j = ~s; + c0 = T[--s]; + if((0 < s) && (T[s - 1] > c0)) { s = ~s; } + if(c0 != c2) { + if(0 <= c2) { BUCKET_B(c2, c1) = k - SA; } + k = SA + BUCKET_B(c2 = c0, c1); + } + assert(k < j); + *k-- = s; + } else { + assert(((s == 0) && (T[s] == c1)) || (s < 0)); + *j = ~s; + } + } + } + } + + /* Construct the suffix array by using + the sorted order of type B suffixes. */ + k = SA + BUCKET_A(c2 = T[n - 1]); + *k++ = (T[n - 2] < c2) ? ~(n - 1) : (n - 1); + /* Scan the suffix array from left to right. */ + for(i = SA, j = SA + n; i < j; ++i) { + if(0 < (s = *i)) { + assert(T[s - 1] >= T[s]); + c0 = T[--s]; + if((s == 0) || (T[s - 1] < c0)) { s = ~s; } + if(c0 != c2) { + BUCKET_A(c2) = k - SA; + k = SA + BUCKET_A(c2 = c0); + } + assert(i < k); + *k++ = s; + } else { + assert(s < 0); + *i = ~s; + } + } +} + +#if 0 +/* Constructs the burrows-wheeler transformed string directly + by using the sorted order of type B* suffixes. */ +static +saidx_t +construct_BWT(const sauchar_t *T, saidx_t *SA, + saidx_t *bucket_A, saidx_t *bucket_B, + saidx_t n, saidx_t m) { + saidx_t *i, *j, *k, *orig; + saidx_t s; + saint_t c0, c1, c2; + + if(0 < m) { + /* Construct the sorted order of type B suffixes by using + the sorted order of type B* suffixes. */ + for(c1 = ALPHABET_SIZE - 2; 0 <= c1; --c1) { + /* Scan the suffix array from right to left. */ + for(i = SA + BUCKET_BSTAR(c1, c1 + 1), + j = SA + BUCKET_A(c1 + 1) - 1, k = NULL, c2 = -1; + i <= j; + --j) { + if(0 < (s = *j)) { + assert(T[s] == c1); + assert(((s + 1) < n) && (T[s] <= T[s + 1])); + assert(T[s - 1] <= T[s]); + c0 = T[--s]; + *j = ~((saidx_t)c0); + if((0 < s) && (T[s - 1] > c0)) { s = ~s; } + if(c0 != c2) { + if(0 <= c2) { BUCKET_B(c2, c1) = k - SA; } + k = SA + BUCKET_B(c2 = c0, c1); + } + assert(k < j); + *k-- = s; + } else if(s != 0) { + *j = ~s; +#ifndef NDEBUG + } else { + assert(T[s] == c1); +#endif + } + } + } + } + + /* Construct the BWTed string by using + the sorted order of type B suffixes. */ + k = SA + BUCKET_A(c2 = T[n - 1]); + *k++ = (T[n - 2] < c2) ? ~((saidx_t)T[n - 2]) : (n - 1); + /* Scan the suffix array from left to right. */ + for(i = SA, j = SA + n, orig = SA; i < j; ++i) { + if(0 < (s = *i)) { + assert(T[s - 1] >= T[s]); + c0 = T[--s]; + *i = c0; + if((0 < s) && (T[s - 1] < c0)) { s = ~((saidx_t)T[s - 1]); } + if(c0 != c2) { + BUCKET_A(c2) = k - SA; + k = SA + BUCKET_A(c2 = c0); + } + assert(i < k); + *k++ = s; + } else if(s != 0) { + *i = ~s; + } else { + orig = i; + } + } + + return orig - SA; +} +#endif + +/*---------------------------------------------------------------------------*/ + +/** + * Initialize suffix array context + * + * @return 0 for success, or non-zero in case of an error + */ +int divsufsort_init(divsufsort_ctx_t *ctx) { + ctx->bucket_A = (saidx_t *)malloc(BUCKET_A_SIZE * sizeof(saidx_t)); + ctx->bucket_B = NULL; + + if (ctx->bucket_A) { + ctx->bucket_B = (saidx_t *)malloc(BUCKET_B_SIZE * sizeof(saidx_t)); + + if (ctx->bucket_B) + return 0; + } + + divsufsort_destroy(ctx); + return -1; +} + +/** + * Destroy suffix array context + * + * @param ctx suffix array context to destroy + */ +void divsufsort_destroy(divsufsort_ctx_t *ctx) { + if (ctx->bucket_B) { + free(ctx->bucket_B); + ctx->bucket_B = NULL; + } + + if (ctx->bucket_A) { + free(ctx->bucket_A); + ctx->bucket_A = NULL; + } +} + +/*- Function -*/ + +saint_t +divsufsort_build_array(divsufsort_ctx_t *ctx, const sauchar_t *T, saidx_t *SA, saidx_t n) { + saidx_t m; + saint_t err = 0; + + /* Check arguments. */ + if((T == NULL) || (SA == NULL) || (n < 0)) { return -1; } + else if(n == 0) { return 0; } + else if(n == 1) { SA[0] = 0; return 0; } + else if(n == 2) { m = (T[0] < T[1]); SA[m ^ 1] = 0, SA[m] = 1; return 0; } + + /* Suffixsort. */ + if((ctx->bucket_A != NULL) && (ctx->bucket_B != NULL)) { + m = sort_typeBstar(T, SA, ctx->bucket_A, ctx->bucket_B, n); + construct_SA(T, SA, ctx->bucket_A, ctx->bucket_B, n, m); + } else { + err = -2; + } + + return err; +} + +#if 0 +saidx_t +divbwt(const sauchar_t *T, sauchar_t *U, saidx_t *A, saidx_t n) { + saidx_t *B; + saidx_t *bucket_A, *bucket_B; + saidx_t m, pidx, i; + + /* Check arguments. */ + if((T == NULL) || (U == NULL) || (n < 0)) { return -1; } + else if(n <= 1) { if(n == 1) { U[0] = T[0]; } return n; } + + if((B = A) == NULL) { B = (saidx_t *)malloc((size_t)(n + 1) * sizeof(saidx_t)); } + bucket_A = (saidx_t *)malloc(BUCKET_A_SIZE * sizeof(saidx_t)); + bucket_B = (saidx_t *)malloc(BUCKET_B_SIZE * sizeof(saidx_t)); + + /* Burrows-Wheeler Transform. */ + if((B != NULL) && (bucket_A != NULL) && (bucket_B != NULL)) { + m = sort_typeBstar(T, B, bucket_A, bucket_B, n); + pidx = construct_BWT(T, B, bucket_A, bucket_B, n, m); + + /* Copy to output string. */ + U[0] = T[n - 1]; + for(i = 0; i < pidx; ++i) { U[i + 1] = (sauchar_t)B[i]; } + for(i += 1; i < n; ++i) { U[i] = (sauchar_t)B[i]; } + pidx += 1; + } else { + pidx = -2; + } + + free(bucket_B); + free(bucket_A); + if(A == NULL) { free(B); } + + return pidx; +} + +const char * +divsufsort_version(void) { + return PROJECT_VERSION_FULL; +} +#endif + +saint_t +divsufsort(const sauchar_t *T, saidx_t *SA, saidx_t n) { + saidx_t *bucket_A, *bucket_B; + saidx_t m; + saint_t err = 0; + + /* Check arguments. */ + if((T == NULL) || (SA == NULL) || (n < 0)) { return -1; } + else if(n == 0) { return 0; } + else if(n == 1) { SA[0] = 0; return 0; } + else if(n == 2) { m = (T[0] < T[1]); SA[m ^ 1] = 0, SA[m] = 1; return 0; } + + bucket_A = (saidx_t *)malloc(BUCKET_A_SIZE * sizeof(saidx_t)); + bucket_B = (saidx_t *)malloc(BUCKET_B_SIZE * sizeof(saidx_t)); + + /* Suffixsort. */ + if((bucket_A != NULL) && (bucket_B != NULL)) { + m = sort_typeBstar(T, SA, bucket_A, bucket_B, n); + construct_SA(T, SA, bucket_A, bucket_B, n, m); + } else { + err = -2; + } + + free(bucket_B); + free(bucket_A); + + return err; +} diff --git a/tools/z64compress/src/enc/apultra/divsufsort.h b/tools/z64compress/src/enc/apultra/divsufsort.h new file mode 100644 index 0000000..5c617ee --- /dev/null +++ b/tools/z64compress/src/enc/apultra/divsufsort.h @@ -0,0 +1,192 @@ +/* + * divsufsort.h for libdivsufsort + * Copyright (c) 2003-2008 Yuta Mori All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef _DIVSUFSORT_H +#define _DIVSUFSORT_H 1 + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#define DIVSUFSORT_API + +/*- Datatypes -*/ +#ifndef SAUCHAR_T +#define SAUCHAR_T +typedef unsigned char sauchar_t; +#endif /* SAUCHAR_T */ +#ifndef SAINT_T +#define SAINT_T +typedef int saint_t; +#endif /* SAINT_T */ +#ifndef SAIDX_T +#define SAIDX_T +typedef int saidx_t; +#endif /* SAIDX_T */ +#ifndef PRIdSAIDX_T +#define PRIdSAIDX_T "d" +#endif + +/*- divsufsort context */ +typedef struct _divsufsort_ctx_t { + saidx_t *bucket_A; + saidx_t *bucket_B; +} divsufsort_ctx_t; + +/*- Prototypes -*/ + +/** + * Initialize suffix array context + * + * @return 0 for success, or non-zero in case of an error + */ +int divsufsort_init(divsufsort_ctx_t *ctx); + +/** + * Destroy suffix array context + * + * @param ctx suffix array context to destroy + */ +void divsufsort_destroy(divsufsort_ctx_t *ctx); + +/** + * Constructs the suffix array of a given string. + * @param ctx suffix array context + * @param T[0..n-1] The input string. + * @param SA[0..n-1] The output array of suffixes. + * @param n The length of the given string. + * @return 0 if no error occurred, -1 or -2 otherwise. + */ +DIVSUFSORT_API +saint_t divsufsort_build_array(divsufsort_ctx_t *ctx, const sauchar_t *T, saidx_t *SA, saidx_t n); + +#if 0 +/** + * Constructs the burrows-wheeler transformed string of a given string. + * @param T[0..n-1] The input string. + * @param U[0..n-1] The output string. (can be T) + * @param A[0..n-1] The temporary array. (can be NULL) + * @param n The length of the given string. + * @return The primary index if no error occurred, -1 or -2 otherwise. + */ +DIVSUFSORT_API +saidx_t +divbwt(const sauchar_t *T, sauchar_t *U, saidx_t *A, saidx_t n); + +/** + * Returns the version of the divsufsort library. + * @return The version number string. + */ +DIVSUFSORT_API +const char * +divsufsort_version(void); + + +/** + * Constructs the burrows-wheeler transformed string of a given string and suffix array. + * @param T[0..n-1] The input string. + * @param U[0..n-1] The output string. (can be T) + * @param SA[0..n-1] The suffix array. (can be NULL) + * @param n The length of the given string. + * @param idx The output primary index. + * @return 0 if no error occurred, -1 or -2 otherwise. + */ +DIVSUFSORT_API +saint_t +bw_transform(const sauchar_t *T, sauchar_t *U, + saidx_t *SA /* can NULL */, + saidx_t n, saidx_t *idx); + +/** + * Inverse BW-transforms a given BWTed string. + * @param T[0..n-1] The input string. + * @param U[0..n-1] The output string. (can be T) + * @param A[0..n-1] The temporary array. (can be NULL) + * @param n The length of the given string. + * @param idx The primary index. + * @return 0 if no error occurred, -1 or -2 otherwise. + */ +DIVSUFSORT_API +saint_t +inverse_bw_transform(const sauchar_t *T, sauchar_t *U, + saidx_t *A /* can NULL */, + saidx_t n, saidx_t idx); + +/** + * Checks the correctness of a given suffix array. + * @param T[0..n-1] The input string. + * @param SA[0..n-1] The input suffix array. + * @param n The length of the given string. + * @param verbose The verbose mode. + * @return 0 if no error occurred. + */ +DIVSUFSORT_API +saint_t +sufcheck(const sauchar_t *T, const saidx_t *SA, saidx_t n, saint_t verbose); + +/** + * Search for the pattern P in the string T. + * @param T[0..Tsize-1] The input string. + * @param Tsize The length of the given string. + * @param P[0..Psize-1] The input pattern string. + * @param Psize The length of the given pattern string. + * @param SA[0..SAsize-1] The input suffix array. + * @param SAsize The length of the given suffix array. + * @param idx The output index. + * @return The count of matches if no error occurred, -1 otherwise. + */ +DIVSUFSORT_API +saidx_t +sa_search(const sauchar_t *T, saidx_t Tsize, + const sauchar_t *P, saidx_t Psize, + const saidx_t *SA, saidx_t SAsize, + saidx_t *left); + +/** + * Search for the character c in the string T. + * @param T[0..Tsize-1] The input string. + * @param Tsize The length of the given string. + * @param SA[0..SAsize-1] The input suffix array. + * @param SAsize The length of the given suffix array. + * @param c The input character. + * @param idx The output index. + * @return The count of matches if no error occurred, -1 otherwise. + */ +DIVSUFSORT_API +saidx_t +sa_simplesearch(const sauchar_t *T, saidx_t Tsize, + const saidx_t *SA, saidx_t SAsize, + saint_t c, saidx_t *left); +#endif + +saint_t +divsufsort(const sauchar_t *T, saidx_t *SA, saidx_t n); + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* _DIVSUFSORT_H */ diff --git a/tools/z64compress/src/enc/apultra/divsufsort_config.h b/tools/z64compress/src/enc/apultra/divsufsort_config.h new file mode 100644 index 0000000..4054a8a --- /dev/null +++ b/tools/z64compress/src/enc/apultra/divsufsort_config.h @@ -0,0 +1,9 @@ +#define HAVE_STRING_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_MEMORY_H 1
+#define HAVE_STDINT_H 1
+#define INLINE inline
+
+#ifdef _MSC_VER
+#pragma warning( disable : 4244 )
+#endif /* _MSC_VER */
diff --git a/tools/z64compress/src/enc/apultra/divsufsort_private.h b/tools/z64compress/src/enc/apultra/divsufsort_private.h new file mode 100644 index 0000000..b4d97ad --- /dev/null +++ b/tools/z64compress/src/enc/apultra/divsufsort_private.h @@ -0,0 +1,205 @@ +/* + * divsufsort_private.h for libdivsufsort + * Copyright (c) 2003-2008 Yuta Mori All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef _DIVSUFSORT_PRIVATE_H +#define _DIVSUFSORT_PRIVATE_H 1 + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#include "divsufsort_config.h" +#include <assert.h> +#include <stdio.h> +#if HAVE_STRING_H +# include <string.h> +#endif +#if HAVE_STDLIB_H +# include <stdlib.h> +#endif +#if HAVE_MEMORY_H +# include <memory.h> +#endif +#if HAVE_STDDEF_H +# include <stddef.h> +#endif +#if HAVE_STRINGS_H +# include <strings.h> +#endif +#if HAVE_INTTYPES_H +# include <inttypes.h> +#else +# if HAVE_STDINT_H +# include <stdint.h> +# endif +#endif +#if defined(BUILD_DIVSUFSORT64) +# include "divsufsort64.h" +# ifndef SAIDX_T +# define SAIDX_T +# define saidx_t saidx64_t +# endif /* SAIDX_T */ +# ifndef PRIdSAIDX_T +# define PRIdSAIDX_T PRIdSAIDX64_T +# endif /* PRIdSAIDX_T */ +# define divsufsort divsufsort64 +# define divbwt divbwt64 +# define divsufsort_version divsufsort64_version +# define bw_transform bw_transform64 +# define inverse_bw_transform inverse_bw_transform64 +# define sufcheck sufcheck64 +# define sa_search sa_search64 +# define sa_simplesearch sa_simplesearch64 +# define sssort sssort64 +# define trsort trsort64 +#else +# include "divsufsort.h" +#endif + + +/*- Constants -*/ +#if !defined(UINT8_MAX) +# define UINT8_MAX (255) +#endif /* UINT8_MAX */ +#if defined(ALPHABET_SIZE) && (ALPHABET_SIZE < 1) +# undef ALPHABET_SIZE +#endif +#if !defined(ALPHABET_SIZE) +# define ALPHABET_SIZE (UINT8_MAX + 1) +#endif +/* for divsufsort.c */ +#define BUCKET_A_SIZE (ALPHABET_SIZE) +#define BUCKET_B_SIZE (ALPHABET_SIZE * ALPHABET_SIZE) +/* for sssort.c */ +#if defined(SS_INSERTIONSORT_THRESHOLD) +# if SS_INSERTIONSORT_THRESHOLD < 1 +# undef SS_INSERTIONSORT_THRESHOLD +# define SS_INSERTIONSORT_THRESHOLD (1) +# endif +#else +# define SS_INSERTIONSORT_THRESHOLD (8) +#endif +#if defined(SS_BLOCKSIZE) +# if SS_BLOCKSIZE < 0 +# undef SS_BLOCKSIZE +# define SS_BLOCKSIZE (0) +# elif 32768 <= SS_BLOCKSIZE +# undef SS_BLOCKSIZE +# define SS_BLOCKSIZE (32767) +# endif +#else +# define SS_BLOCKSIZE (1024) +#endif +/* minstacksize = log(SS_BLOCKSIZE) / log(3) * 2 */ +#if SS_BLOCKSIZE == 0 +# if defined(BUILD_DIVSUFSORT64) +# define SS_MISORT_STACKSIZE (96) +# else +# define SS_MISORT_STACKSIZE (64) +# endif +#elif SS_BLOCKSIZE <= 4096 +# define SS_MISORT_STACKSIZE (16) +#else +# define SS_MISORT_STACKSIZE (24) +#endif +#if defined(BUILD_DIVSUFSORT64) +# define SS_SMERGE_STACKSIZE (64) +#else +# define SS_SMERGE_STACKSIZE (32) +#endif +/* for trsort.c */ +#define TR_INSERTIONSORT_THRESHOLD (8) +#if defined(BUILD_DIVSUFSORT64) +# define TR_STACKSIZE (96) +#else +# define TR_STACKSIZE (64) +#endif + + +/*- Macros -*/ +#ifndef SWAP +# define SWAP(_a, _b) do { t = (_a); (_a) = (_b); (_b) = t; } while(0) +#endif /* SWAP */ +#ifndef MIN +# define MIN(_a, _b) (((_a) < (_b)) ? (_a) : (_b)) +#endif /* MIN */ +#ifndef MAX +# define MAX(_a, _b) (((_a) > (_b)) ? (_a) : (_b)) +#endif /* MAX */ +#define STACK_PUSH(_a, _b, _c, _d)\ + do {\ + assert(ssize < STACK_SIZE);\ + stack[ssize].a = (_a), stack[ssize].b = (_b),\ + stack[ssize].c = (_c), stack[ssize++].d = (_d);\ + } while(0) +#define STACK_PUSH5(_a, _b, _c, _d, _e)\ + do {\ + assert(ssize < STACK_SIZE);\ + stack[ssize].a = (_a), stack[ssize].b = (_b),\ + stack[ssize].c = (_c), stack[ssize].d = (_d), stack[ssize++].e = (_e);\ + } while(0) +#define STACK_POP(_a, _b, _c, _d)\ + do {\ + assert(0 <= ssize);\ + if(ssize == 0) { return; }\ + (_a) = stack[--ssize].a, (_b) = stack[ssize].b,\ + (_c) = stack[ssize].c, (_d) = stack[ssize].d;\ + } while(0) +#define STACK_POP5(_a, _b, _c, _d, _e)\ + do {\ + assert(0 <= ssize);\ + if(ssize == 0) { return; }\ + (_a) = stack[--ssize].a, (_b) = stack[ssize].b,\ + (_c) = stack[ssize].c, (_d) = stack[ssize].d, (_e) = stack[ssize].e;\ + } while(0) +/* for divsufsort.c */ +#define BUCKET_A(_c0) bucket_A[(_c0)] +#if ALPHABET_SIZE == 256 +#define BUCKET_B(_c0, _c1) (bucket_B[((_c1) << 8) | (_c0)]) +#define BUCKET_BSTAR(_c0, _c1) (bucket_B[((_c0) << 8) | (_c1)]) +#else +#define BUCKET_B(_c0, _c1) (bucket_B[(_c1) * ALPHABET_SIZE + (_c0)]) +#define BUCKET_BSTAR(_c0, _c1) (bucket_B[(_c0) * ALPHABET_SIZE + (_c1)]) +#endif + + +/*- Private Prototypes -*/ +/* sssort.c */ +void +sssort(const sauchar_t *Td, const saidx_t *PA, + saidx_t *first, saidx_t *last, + saidx_t *buf, saidx_t bufsize, + saidx_t depth, saidx_t n, saint_t lastsuffix); +/* trsort.c */ +void +trsort(saidx_t *ISA, saidx_t *SA, saidx_t n, saidx_t depth); + + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* _DIVSUFSORT_PRIVATE_H */ diff --git a/tools/z64compress/src/enc/apultra/expand.c b/tools/z64compress/src/enc/apultra/expand.c new file mode 100644 index 0000000..b65409d --- /dev/null +++ b/tools/z64compress/src/enc/apultra/expand.c @@ -0,0 +1,396 @@ +/*
+ * expand.c - decompressor implementation
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "format.h"
+#include "expand.h"
+#include "libapultra.h"
+
+#ifdef _MSC_VER
+#define FORCE_INLINE __forceinline
+#else /* _MSC_VER */
+#define FORCE_INLINE __attribute__((always_inline))
+#endif /* _MSC_VER */
+
+static inline FORCE_INLINE int apultra_read_bit(const unsigned char **ppInBlock, const unsigned char *pDataEnd, int *nCurBitMask, unsigned char *bits) {
+ const unsigned char *pInBlock = *ppInBlock;
+ int nBit;
+
+ if ((*nCurBitMask) == 0) {
+ if (pInBlock >= pDataEnd) return -1;
+ (*bits) = *pInBlock++;
+ (*nCurBitMask) = 128;
+ }
+
+ nBit = ((*bits) & 128) ? 1 : 0;
+
+ (*bits) <<= 1;
+ (*nCurBitMask) >>= 1;
+
+ *ppInBlock = pInBlock;
+ return nBit;
+}
+
+static inline FORCE_INLINE int apultra_read_gamma2(const unsigned char **ppInBlock, const unsigned char *pDataEnd, int *nCurBitMask, unsigned char *bits) {
+ int bit;
+ unsigned int v = 1;
+
+ do {
+ v = (v << 1) + apultra_read_bit(ppInBlock, pDataEnd, nCurBitMask, bits);
+ bit = apultra_read_bit(ppInBlock, pDataEnd, nCurBitMask, bits);
+ if (bit < 0) return bit;
+ } while (bit);
+
+ return v;
+}
+
+/**
+ * Get maximum decompressed size of compressed data
+ *
+ * @param pInputData compressed data
+ * @param nInputSize compressed size in bytes
+ * @param nFlags compression flags (set to 0)
+ *
+ * @return maximum decompressed size
+ */
+size_t apultra_get_max_decompressed_size(const unsigned char *pInputData, size_t nInputSize, const unsigned int nFlags) {
+ const unsigned char *pInputDataEnd = pInputData + nInputSize;
+ int nCurBitMask = 0;
+ unsigned char bits = 0;
+ int nMatchOffset = -1;
+ int nFollowsLiteral = 3;
+ size_t nDecompressedSize = 0;
+
+ if (pInputData >= pInputDataEnd)
+ return -1;
+ pInputData++;
+ nDecompressedSize++;
+
+ while (1) {
+ int nResult;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+
+ if (!nResult) {
+ /* '0': literal */
+ if (pInputData < pInputDataEnd) {
+ pInputData++;
+ nDecompressedSize++;
+ nFollowsLiteral = 3;
+ }
+ else {
+ return -1;
+ }
+ }
+ else {
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+
+ if (nResult == 0) {
+ unsigned int nMatchLen;
+
+ /* '10': 8+n bits offset */
+ int nMatchOffsetHi = apultra_read_gamma2(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ nMatchOffsetHi -= nFollowsLiteral;
+ if (nMatchOffsetHi >= 0) {
+ nMatchOffset = ((unsigned int) nMatchOffsetHi) << 8;
+ nMatchOffset |= (unsigned int)(*pInputData++);
+
+ nMatchLen = apultra_read_gamma2(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+
+ if (nMatchOffset < 128 || nMatchOffset >= MINMATCH4_OFFSET)
+ nMatchLen += 2;
+ else if (nMatchOffset >= MINMATCH3_OFFSET)
+ nMatchLen++;
+ }
+ else {
+ /* else rep-match */
+ nMatchLen = apultra_read_gamma2(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ }
+
+ nFollowsLiteral = 2;
+
+ nDecompressedSize += nMatchLen;
+ }
+ else {
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+
+ if (nResult == 0) {
+ unsigned int nCommand;
+ unsigned int nMatchLen;
+
+ /* '110': 7 bits offset + 1 bit length */
+ nCommand = (unsigned int)(*pInputData++);
+ if (nCommand == 0x00) {
+ /* EOD. No match len follows. */
+ break;
+ }
+
+ /* Bits 7-1: offset; bit 0: length */
+ nMatchOffset = (nCommand >> 1);
+ nMatchLen = (nCommand & 1) + 2;
+
+ nFollowsLiteral = 2;
+ nDecompressedSize += nMatchLen;
+ }
+ else {
+ unsigned int nShortMatchOffset;
+
+ /* '111': 4 bit offset */
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset = nResult << 3;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset |= nResult << 2;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset |= nResult << 1;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset |= nResult << 0;
+
+ nFollowsLiteral = 3;
+ nDecompressedSize++;
+ }
+ }
+ }
+ }
+
+ return nDecompressedSize;
+}
+
+/**
+ * Decompress data in memory
+ *
+ * @param pInputData compressed data
+ * @param pOutBuffer buffer for decompressed data
+ * @param nInputSize compressed size in bytes
+ * @param nMaxOutBufferSize maximum capacity of decompression buffer
+ * @param nDictionarySize size of dictionary in front of input data (0 for none)
+ * @param nFlags compression flags (set to 0)
+ *
+ * @return actual decompressed size, or -1 for error
+ */
+size_t apultra_decompress(const unsigned char *pInputData, unsigned char *pOutData, size_t nInputSize, size_t nMaxOutBufferSize, size_t nDictionarySize, const unsigned int nFlags) {
+ const unsigned char *pInputDataEnd = pInputData + nInputSize;
+ unsigned char *pCurOutData = pOutData + nDictionarySize;
+ const unsigned char *pOutDataEnd = pCurOutData + nMaxOutBufferSize;
+ const unsigned char *pOutDataFastEnd = pOutDataEnd - 20;
+ int nCurBitMask = 0;
+ unsigned char bits = 0;
+ int nMatchOffset = -1;
+ int nFollowsLiteral = 3;
+
+ if (pInputData >= pInputDataEnd && pCurOutData < pOutDataEnd)
+ return -1;
+ *pCurOutData++ = *pInputData++;
+
+ while (1) {
+ int nResult;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+
+ if (!nResult) {
+ /* '0': literal */
+ if (pInputData < pInputDataEnd && pCurOutData < pOutDataEnd) {
+ *pCurOutData++ = *pInputData++;
+ nFollowsLiteral = 3;
+ }
+ else {
+ return -1;
+ }
+ }
+ else {
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+
+ if (nResult == 0) {
+ unsigned int nMatchLen;
+
+ /* '10': 8+n bits offset */
+ int nMatchOffsetHi = apultra_read_gamma2(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ nMatchOffsetHi -= nFollowsLiteral;
+ if (nMatchOffsetHi >= 0) {
+ nMatchOffset = ((unsigned int) nMatchOffsetHi) << 8;
+ nMatchOffset |= (unsigned int)(*pInputData++);
+
+ nMatchLen = apultra_read_gamma2(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+
+ if (nMatchOffset < 128 || nMatchOffset >= MINMATCH4_OFFSET)
+ nMatchLen += 2;
+ else if (nMatchOffset >= MINMATCH3_OFFSET)
+ nMatchLen++;
+ }
+ else {
+ /* else rep-match */
+ nMatchLen = apultra_read_gamma2(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ }
+
+ nFollowsLiteral = 2;
+ const unsigned char *pSrc = pCurOutData - nMatchOffset;
+ if (pSrc >= pOutData && (pSrc + nMatchLen) <= pOutDataEnd) {
+ if (nMatchLen < 11 && nMatchOffset >= 8 && pCurOutData < pOutDataFastEnd) {
+ memcpy(pCurOutData, pSrc, 8);
+ memcpy(pCurOutData + 8, pSrc + 8, 2);
+ pCurOutData += nMatchLen;
+ }
+ else {
+ if ((pCurOutData + nMatchLen) <= pOutDataEnd) {
+ /* Do a deterministic, left to right byte copy instead of memcpy() so as to handle overlaps */
+
+ if (nMatchOffset >= 16 && (pCurOutData + nMatchLen) < (pOutDataFastEnd - 15)) {
+ const unsigned char *pCopySrc = pSrc;
+ unsigned char *pCopyDst = pCurOutData;
+ const unsigned char *pCopyEndDst = pCurOutData + nMatchLen;
+
+ do {
+ memcpy(pCopyDst, pCopySrc, 16);
+ pCopySrc += 16;
+ pCopyDst += 16;
+ } while (pCopyDst < pCopyEndDst);
+
+ pCurOutData += nMatchLen;
+ }
+ else {
+ while (nMatchLen) {
+ *pCurOutData++ = *pSrc++;
+ nMatchLen--;
+ }
+ }
+ }
+ else {
+ return -1;
+ }
+ }
+ }
+ else {
+ return -1;
+ }
+ }
+ else {
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+
+ if (nResult == 0) {
+ unsigned int nCommand;
+ unsigned int nMatchLen;
+
+ /* '110': 7 bits offset + 1 bit length */
+ nCommand = (unsigned int)(*pInputData++);
+ if (nCommand == 0x00) {
+ /* EOD. No match len follows. */
+ break;
+ }
+
+ /* Bits 7-1: offset; bit 0: length */
+ nMatchOffset = (nCommand >> 1);
+ nMatchLen = (nCommand & 1) + 2;
+
+ nFollowsLiteral = 2;
+ const unsigned char *pSrc = pCurOutData - nMatchOffset;
+ if (pSrc >= pOutData && (pSrc + nMatchLen) <= pOutDataEnd) {
+ if (nMatchOffset >= 8 && pCurOutData < pOutDataFastEnd) {
+ memcpy(pCurOutData, pSrc, 8);
+ memcpy(pCurOutData + 8, pSrc + 8, 2);
+ pCurOutData += nMatchLen;
+ }
+ else {
+ if ((pCurOutData + nMatchLen) <= pOutDataEnd) {
+ while (nMatchLen) {
+ *pCurOutData++ = *pSrc++;
+ nMatchLen--;
+ }
+ }
+ else {
+ return -1;
+ }
+ }
+ }
+ else {
+ return -1;
+ }
+ }
+ else {
+ unsigned int nShortMatchOffset;
+
+ /* '111': 4 bit offset */
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset = nResult << 3;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset |= nResult << 2;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset |= nResult << 1;
+
+ nResult = apultra_read_bit(&pInputData, pInputDataEnd, &nCurBitMask, &bits);
+ if (nResult < 0) return -1;
+ nShortMatchOffset |= nResult << 0;
+
+ nFollowsLiteral = 3;
+ if (nShortMatchOffset) {
+ /* Short offset, 1-15 */
+ const unsigned char *pSrc = pCurOutData - nShortMatchOffset;
+ if (pSrc >= pOutData && (pCurOutData + 1) <= pOutDataEnd && (pSrc + 1) <= pOutDataEnd) {
+ *pCurOutData++ = *pSrc++;
+ }
+ else {
+ return -1;
+ }
+ }
+ else {
+ /* Write zero */
+ if ((pCurOutData + 1) <= pOutDataEnd) {
+ *pCurOutData++ = 0;
+ }
+ else {
+ return -1;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return (size_t)(pCurOutData - pOutData) - nDictionarySize;
+}
diff --git a/tools/z64compress/src/enc/apultra/expand.h b/tools/z64compress/src/enc/apultra/expand.h new file mode 100644 index 0000000..474660c --- /dev/null +++ b/tools/z64compress/src/enc/apultra/expand.h @@ -0,0 +1,71 @@ +/*
+ * expand.h - decompressor definitions
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#ifndef _EXPAND_H
+#define _EXPAND_H
+
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Get maximum decompressed size of compressed data
+ *
+ * @param pInputData compressed data
+ * @param nInputSize compressed size in bytes
+ * @param nFlags compression flags (set to 0)
+ *
+ * @return maximum decompressed size
+ */
+size_t apultra_get_max_decompressed_size(const unsigned char *pInputData, size_t nInputSize, const unsigned int nFlags);
+
+/**
+ * Decompress data in memory
+ *
+ * @param pInputData compressed data
+ * @param pOutBuffer buffer for decompressed data
+ * @param nInputSize compressed size in bytes
+ * @param nMaxOutBufferSize maximum capacity of decompression buffer
+ * @param nDictionarySize size of dictionary in front of input data (0 for none)
+ * @param nFlags compression flags (set to 0)
+ *
+ * @return actual decompressed size, or -1 for error
+ */
+size_t apultra_decompress(const unsigned char *pInputData, unsigned char *pOutBuffer, size_t nInputSize, size_t nMaxOutBufferSize, size_t nDictionarySize, const unsigned int nFlags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _EXPAND_H */
diff --git a/tools/z64compress/src/enc/apultra/format.h b/tools/z64compress/src/enc/apultra/format.h new file mode 100644 index 0000000..cf949b5 --- /dev/null +++ b/tools/z64compress/src/enc/apultra/format.h @@ -0,0 +1,47 @@ +/*
+ * format.h - byte stream format definitions
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#ifndef _FORMAT_H
+#define _FORMAT_H
+
+#define MIN_OFFSET 1
+#define MAX_OFFSET 0x1fffff
+
+#define MAX_VARLEN 0x1fffff
+
+#define BLOCK_SIZE 0x100000
+
+#define MIN_MATCH_SIZE 1
+#define MINMATCH3_OFFSET 1280
+#define MINMATCH4_OFFSET 32000
+
+#endif /* _FORMAT_H */
diff --git a/tools/z64compress/src/enc/apultra/libapultra.h b/tools/z64compress/src/enc/apultra/libapultra.h new file mode 100644 index 0000000..f97e336 --- /dev/null +++ b/tools/z64compress/src/enc/apultra/libapultra.h @@ -0,0 +1,40 @@ +/*
+ * libapultra.h - library definitions
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#ifndef _LIB_APULTRA_H
+#define _LIB_APULTRA_H
+
+#include "format.h"
+#include "shrink.h"
+#include "expand.h"
+
+#endif /* _LIB_APULTRA_H */
diff --git a/tools/z64compress/src/enc/apultra/matchfinder.c b/tools/z64compress/src/enc/apultra/matchfinder.c new file mode 100644 index 0000000..a9987f9 --- /dev/null +++ b/tools/z64compress/src/enc/apultra/matchfinder.c @@ -0,0 +1,449 @@ +/*
+ * matchfinder.c - LZ match finder implementation
+ *
+ * The following copying information applies to this specific source code file:
+ *
+ * Written in 2019 by Emmanuel Marty <marty.emmanuel@gmail.com>
+ * Portions written in 2014-2015 by Eric Biggers <ebiggers3@gmail.com>
+ *
+ * To the extent possible under law, the author(s) have dedicated all copyright
+ * and related and neighboring rights to this software to the public domain
+ * worldwide via the Creative Commons Zero 1.0 Universal Public Domain
+ * Dedication (the "CC0").
+ *
+ * This software is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the CC0 for more details.
+ *
+ * You should have received a copy of the CC0 along with this software; if not
+ * see <http://creativecommons.org/publicdomain/zero/1.0/>.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "matchfinder.h"
+#include "format.h"
+#include "libapultra.h"
+
+/**
+ * Hash index into TAG_BITS
+ *
+ * @param nIndex index value
+ *
+ * @return hash
+ */
+static inline int apultra_get_index_tag(unsigned int nIndex) {
+ return (int)(((unsigned long long)nIndex * 11400714819323198485ULL) >> (64ULL - TAG_BITS));
+}
+
+/**
+ * Parse input data, build suffix array and overlaid data structures to speed up match finding
+ *
+ * @param pCompressor compression context
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param nInWindowSize total input size in bytes (previously compressed bytes + bytes to compress)
+ *
+ * @return 0 for success, non-zero for failure
+ */
+int apultra_build_suffix_array(apultra_compressor *pCompressor, const unsigned char *pInWindow, const int nInWindowSize) {
+ unsigned long long *intervals = pCompressor->intervals;
+
+ /* Build suffix array from input data */
+ saidx_t *suffixArray = (saidx_t*)intervals;
+ if (divsufsort_build_array(&pCompressor->divsufsort_context, pInWindow, suffixArray, nInWindowSize) != 0) {
+ return 100;
+ }
+
+ int i, r;
+
+ for (i = nInWindowSize - 1; i >= 0; i--) {
+ intervals[i] = suffixArray[i];
+ }
+
+ int *PLCP = (int*)pCompressor->pos_data; /* Use temporarily */
+ int *Phi = PLCP;
+ int nCurLen = 0;
+
+ /* Compute the permuted LCP first (Krkkinen method) */
+ Phi[intervals[0]] = -1;
+ for (i = 1; i < nInWindowSize; i++)
+ Phi[intervals[i]] = (unsigned int)intervals[i - 1];
+ for (i = 0; i < nInWindowSize; i++) {
+ if (Phi[i] == -1) {
+ PLCP[i] = 0;
+ continue;
+ }
+ int nMaxLen = (i > Phi[i]) ? (nInWindowSize - i) : (nInWindowSize - Phi[i]);
+ while (nCurLen < nMaxLen && pInWindow[i + nCurLen] == pInWindow[Phi[i] + nCurLen]) nCurLen++;
+ PLCP[i] = nCurLen;
+ if (nCurLen > 0)
+ nCurLen--;
+ }
+
+ /* Rotate permuted LCP into the LCP. This has better cache locality than the direct Kasai LCP method. This also
+ * saves us from having to build the inverse suffix array index, as the LCP is calculated without it using this method,
+ * and the interval builder below doesn't need it either. */
+ intervals[0] &= POS_MASK;
+
+ for (i = 1; i < nInWindowSize; i++) {
+ int nIndex = (int)(intervals[i] & POS_MASK);
+ int nLen = PLCP[nIndex];
+ if (nLen < MIN_MATCH_SIZE)
+ nLen = 0;
+ if (nLen > LCP_MAX)
+ nLen = LCP_MAX;
+ int nTaggedLen = 0;
+ if (nLen)
+ nTaggedLen = (nLen << TAG_BITS) | (apultra_get_index_tag((unsigned int)nIndex) & ((1 << TAG_BITS) - 1));
+ intervals[i] = ((unsigned long long)nIndex) | (((unsigned long long)nTaggedLen) << LCP_SHIFT);
+ }
+
+ /**
+ * Build intervals for finding matches
+ *
+ * Methodology and code fragment taken from wimlib (CC0 license):
+ * https://wimlib.net/git/?p=wimlib;a=blob_plain;f=src/lcpit_matchfinder.c;h=a2d6a1e0cd95200d1f3a5464d8359d5736b14cbe;hb=HEAD
+ */
+ unsigned long long * const SA_and_LCP = intervals;
+ unsigned long long *pos_data = pCompressor->pos_data;
+ unsigned long long next_interval_idx;
+ unsigned long long *top = pCompressor->open_intervals;
+ unsigned long long prev_pos = SA_and_LCP[0] & POS_MASK;
+
+ *top = 0;
+ intervals[0] = 0;
+ next_interval_idx = 1;
+
+ for (r = 1; r < nInWindowSize; r++) {
+ const unsigned long long next_pos = SA_and_LCP[r] & POS_MASK;
+ const unsigned long long next_lcp = SA_and_LCP[r] & LCP_MASK;
+ const unsigned long long top_lcp = *top & LCP_MASK;
+
+ if (next_lcp == top_lcp) {
+ /* Continuing the deepest open interval */
+ pos_data[prev_pos] = *top;
+ }
+ else if (next_lcp > top_lcp) {
+ /* Opening a new interval */
+ *++top = next_lcp | next_interval_idx++;
+ pos_data[prev_pos] = *top;
+ }
+ else {
+ /* Closing the deepest open interval */
+ pos_data[prev_pos] = *top;
+ for (;;) {
+ const unsigned long long closed_interval_idx = *top-- & POS_MASK;
+ const unsigned long long superinterval_lcp = *top & LCP_MASK;
+
+ if (next_lcp == superinterval_lcp) {
+ /* Continuing the superinterval */
+ intervals[closed_interval_idx] = *top;
+ break;
+ }
+ else if (next_lcp > superinterval_lcp) {
+ /* Creating a new interval that is a
+ * superinterval of the one being
+ * closed, but still a subinterval of
+ * its superinterval */
+ *++top = next_lcp | next_interval_idx++;
+ intervals[closed_interval_idx] = *top;
+ break;
+ }
+ else {
+ /* Also closing the superinterval */
+ intervals[closed_interval_idx] = *top;
+ }
+ }
+ }
+ prev_pos = next_pos;
+ }
+
+ /* Close any still-open intervals. */
+ pos_data[prev_pos] = *top;
+ for (; top > pCompressor->open_intervals; top--)
+ intervals[*top & POS_MASK] = *(top - 1);
+
+ /* Success */
+ return 0;
+}
+
+/**
+ * Find matches at the specified offset in the input window
+ *
+ * @param pCompressor compression context
+ * @param nOffset offset to find matches at, in the input window
+ * @param pMatches pointer to returned matches
+ * @param pMatchDepth pointer to returned match depths
+ * @param pMatch1 pointer to 1-byte length, 4 bit offset match
+ * @param nMaxMatches maximum number of matches to return (0 for none)
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ *
+ * @return number of matches
+ */
+int apultra_find_matches_at(apultra_compressor *pCompressor, const int nOffset, apultra_match *pMatches, unsigned short *pMatchDepth, unsigned char *pMatch1, const int nMaxMatches, const int nBlockFlags) {
+ unsigned long long *intervals = pCompressor->intervals;
+ unsigned long long *pos_data = pCompressor->pos_data;
+ unsigned long long ref;
+ unsigned long long super_ref;
+ unsigned long long match_pos;
+ apultra_match *matchptr;
+ unsigned short *depthptr;
+ const int nMaxOffset = pCompressor->max_offset;
+
+ *pMatch1 = 0;
+
+ /**
+ * Find matches using intervals
+ *
+ * Taken from wimlib (CC0 license):
+ * https://wimlib.net/git/?p=wimlib;a=blob_plain;f=src/lcpit_matchfinder.c;h=a2d6a1e0cd95200d1f3a5464d8359d5736b14cbe;hb=HEAD
+ */
+
+ /* Get the deepest lcp-interval containing the current suffix. */
+ ref = pos_data[nOffset];
+
+ pos_data[nOffset] = 0;
+
+ /* Ascend until we reach a visited interval, the root, or a child of the
+ * root. Link unvisited intervals to the current suffix as we go. */
+ while ((super_ref = intervals[ref & POS_MASK]) & LCP_MASK) {
+ intervals[ref & POS_MASK] = nOffset | VISITED_FLAG;
+ ref = super_ref;
+ }
+
+ if (super_ref == 0) {
+ /* In this case, the current interval may be any of:
+ * (1) the root;
+ * (2) an unvisited child of the root */
+
+ if (ref != 0) /* Not the root? */
+ intervals[ref & POS_MASK] = nOffset | VISITED_FLAG;
+ return 0;
+ }
+
+ /* Ascend indirectly via pos_data[] links. */
+ match_pos = super_ref & EXCL_VISITED_MASK;
+ matchptr = pMatches;
+ depthptr = pMatchDepth;
+ int nPrevOffset = 0;
+ int nPrevLen = 0;
+ int nCurDepth = 0;
+ unsigned short *cur_depth = NULL;
+
+ if (nOffset >= match_pos && (nBlockFlags & 3) == 3) {
+ int nMatchOffset = (int)(nOffset - match_pos);
+ int nMatchLen = (int)(ref >> (LCP_SHIFT + TAG_BITS));
+
+ if ((matchptr - pMatches) < nMaxMatches) {
+ if (nMatchOffset <= nMaxOffset) {
+ if (nPrevOffset && nPrevLen > 2 && nMatchOffset == (nPrevOffset - 1) && nMatchLen == (nPrevLen - 1) && cur_depth && nCurDepth < LCP_MAX) {
+ nCurDepth++;
+ *cur_depth = nCurDepth;
+ }
+ else {
+ nCurDepth = 0;
+
+ cur_depth = depthptr;
+ matchptr->length = nMatchLen;
+ matchptr->offset = nMatchOffset;
+ *depthptr = 0;
+ matchptr++;
+ depthptr++;
+ }
+
+ nPrevLen = nMatchLen;
+ nPrevOffset = nMatchOffset;
+ }
+ }
+ }
+
+ for (;;) {
+ if ((super_ref = pos_data[match_pos]) > ref) {
+ match_pos = intervals[super_ref & POS_MASK] & EXCL_VISITED_MASK;
+
+ if (nOffset >= match_pos && (nBlockFlags & 3) == 3) {
+ int nMatchOffset = (int)(nOffset - match_pos);
+ int nMatchLen = (int)(ref >> (LCP_SHIFT + TAG_BITS));
+
+ if ((matchptr - pMatches) < nMaxMatches) {
+ if (nMatchOffset <= nMaxOffset && abs(nMatchOffset - nPrevOffset) >= 128) {
+ if (nPrevOffset && nPrevLen > 2 && nMatchOffset == (nPrevOffset - 1) && nMatchLen == (nPrevLen - 1) && cur_depth && nCurDepth < LCP_MAX) {
+ nCurDepth++;
+ *cur_depth = nCurDepth | 0x8000;
+ }
+ else {
+ nCurDepth = 0;
+
+ cur_depth = depthptr;
+ matchptr->length = nMatchLen;
+ matchptr->offset = nMatchOffset;
+ *depthptr = 0x8000;
+ matchptr++;
+ depthptr++;
+ }
+
+ nPrevLen = nMatchLen;
+ nPrevOffset = nMatchOffset;
+ }
+ }
+ }
+ }
+
+ while ((super_ref = pos_data[match_pos]) > ref) {
+ match_pos = intervals[super_ref & POS_MASK] & EXCL_VISITED_MASK;
+
+ if (nOffset > match_pos && (nBlockFlags & 3) == 3) {
+ int nMatchOffset = (int)(nOffset - match_pos);
+ int nMatchLen = (int)(ref >> (LCP_SHIFT + TAG_BITS));
+
+ if ((matchptr - pMatches) < nMaxMatches) {
+ if (nMatchOffset <= nMaxOffset && (nMatchLen >= 3 || (nMatchLen >= 2 && (matchptr - pMatches) < (nMaxMatches - 1))) && nMatchLen < 1280 && abs(nMatchOffset - nPrevOffset) >= 128) {
+ if (nPrevOffset && nPrevLen > 2 && nMatchOffset == (nPrevOffset - 1) && nMatchLen == (nPrevLen - 1) && cur_depth && nCurDepth < LCP_MAX) {
+ nCurDepth++;
+ *cur_depth = nCurDepth | 0x8000;
+ }
+ else {
+ nCurDepth = 0;
+
+ cur_depth = depthptr;
+ matchptr->length = nMatchLen;
+ matchptr->offset = nMatchOffset;
+ *depthptr = 0x8000;
+ matchptr++;
+ depthptr++;
+ }
+
+ nPrevLen = nMatchLen;
+ nPrevOffset = nMatchOffset;
+ }
+ }
+ }
+ }
+
+ intervals[ref & POS_MASK] = nOffset | VISITED_FLAG;
+ pos_data[match_pos] = (unsigned long long)ref;
+
+ int nMatchOffset = (int)(nOffset - match_pos);
+ int nMatchLen = (int)(ref >> (LCP_SHIFT + TAG_BITS));
+
+ if ((matchptr - pMatches) < nMaxMatches) {
+ if (nMatchOffset <= nMaxOffset && nMatchOffset != nPrevOffset) {
+ if (nPrevOffset && nPrevLen > 2 && nMatchOffset == (nPrevOffset - 1) && nMatchLen == (nPrevLen - 1) && cur_depth && nCurDepth < LCP_MAX) {
+ nCurDepth++;
+ *cur_depth = nCurDepth;
+ }
+ else {
+ nCurDepth = 0;
+
+ cur_depth = depthptr;
+ matchptr->length = nMatchLen;
+ matchptr->offset = nMatchOffset;
+ *depthptr = 0;
+ matchptr++;
+ depthptr++;
+ }
+
+ nPrevLen = nMatchLen;
+ nPrevOffset = nMatchOffset;
+ }
+ }
+
+ if (nMatchOffset && nMatchOffset < 16 && nMatchLen)
+ *pMatch1 = nMatchOffset;
+
+ if (super_ref == 0)
+ break;
+ ref = super_ref;
+ match_pos = intervals[ref & POS_MASK] & EXCL_VISITED_MASK;
+
+ if (nOffset > match_pos && (nBlockFlags & 3) == 3) {
+ int nMatchOffset = (int)(nOffset - match_pos);
+ int nMatchLen = (int)(ref >> (LCP_SHIFT + TAG_BITS));
+
+ if ((matchptr - pMatches) < nMaxMatches) {
+ if (nMatchOffset <= nMaxOffset && nMatchLen >= 2 && abs(nMatchOffset - nPrevOffset) >= 128) {
+ if (nPrevOffset && nPrevLen > 2 && nMatchOffset == (nPrevOffset - 1) && nMatchLen == (nPrevLen - 1) && cur_depth && nCurDepth < LCP_MAX) {
+ nCurDepth++;
+ *cur_depth = nCurDepth | 0x8000;
+ }
+ else {
+ nCurDepth = 0;
+
+ cur_depth = depthptr;
+ matchptr->length = nMatchLen;
+ matchptr->offset = nMatchOffset;
+ *depthptr = 0x8000;
+ matchptr++;
+ depthptr++;
+ }
+
+ nPrevLen = nMatchLen;
+ nPrevOffset = nMatchOffset;
+ }
+ }
+ }
+ }
+
+ return (int)(matchptr - pMatches);
+}
+
+/**
+ * Skip previously compressed bytes
+ *
+ * @param pCompressor compression context
+ * @param nStartOffset current offset in input window (typically 0)
+ * @param nEndOffset offset to skip to in input window (typically the number of previously compressed bytes)
+ */
+void apultra_skip_matches(apultra_compressor *pCompressor, const int nStartOffset, const int nEndOffset) {
+ apultra_match match;
+ unsigned short depth;
+ unsigned char match1;
+ int i;
+
+ /* Skipping still requires scanning for matches, as this also performs a lazy update of the intervals. However,
+ * we don't store the matches. */
+ for (i = nStartOffset; i < nEndOffset; i++) {
+ apultra_find_matches_at(pCompressor, i, &match, &depth, &match1, 0, 0);
+ }
+}
+
+/**
+ * Find all matches for the data to be compressed
+ *
+ * @param pCompressor compression context
+ * @param nMatchesPerOffset maximum number of matches to store for each offset
+ * @param nStartOffset current offset in input window (typically the number of previously compressed bytes)
+ * @param nEndOffset offset to end finding matches at (typically the size of the total input window in bytes
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ */
+void apultra_find_all_matches(apultra_compressor *pCompressor, const int nMatchesPerOffset, const int nStartOffset, const int nEndOffset, const int nBlockFlags) {
+ apultra_match *pMatch = pCompressor->match;
+ unsigned short *pMatchDepth = pCompressor->match_depth;
+ unsigned char *pMatch1 = pCompressor->match1;
+ int i;
+
+ for (i = nStartOffset; i < nEndOffset; i++) {
+ int nMatches = apultra_find_matches_at(pCompressor, i, pMatch, pMatchDepth, pMatch1, nMatchesPerOffset, nBlockFlags);
+
+ while (nMatches < nMatchesPerOffset) {
+ pMatch[nMatches].length = 0;
+ pMatch[nMatches].offset = 0;
+ pMatchDepth[nMatches] = 0;
+ nMatches++;
+ }
+
+ pMatch += nMatchesPerOffset;
+ pMatchDepth += nMatchesPerOffset;
+ pMatch1++;
+ }
+}
diff --git a/tools/z64compress/src/enc/apultra/matchfinder.h b/tools/z64compress/src/enc/apultra/matchfinder.h new file mode 100644 index 0000000..7d68eaf --- /dev/null +++ b/tools/z64compress/src/enc/apultra/matchfinder.h @@ -0,0 +1,94 @@ +/*
+ * matchfinder.h - LZ match finder definitions
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#ifndef _MATCHFINDER_H
+#define _MATCHFINDER_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Forward declarations */
+typedef struct _apultra_match apultra_match;
+typedef struct _apultra_compressor apultra_compressor;
+
+/**
+ * Parse input data, build suffix array and overlaid data structures to speed up match finding
+ *
+ * @param pCompressor compression context
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param nInWindowSize total input size in bytes (previously compressed bytes + bytes to compress)
+ *
+ * @return 0 for success, non-zero for failure
+ */
+int apultra_build_suffix_array(apultra_compressor *pCompressor, const unsigned char *pInWindow, const int nInWindowSize);
+
+/**
+ * Find matches at the specified offset in the input window
+ *
+ * @param pCompressor compression context
+ * @param nOffset offset to find matches at, in the input window
+ * @param pMatches pointer to returned matches
+ * @param pMatchDepth pointer to returned match depths
+ * @param pMatch1 pointer to 1-byte length, 4 bit offset match
+ * @param nMaxMatches maximum number of matches to return (0 for none)
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ *
+ * @return number of matches
+ */
+int apultra_find_matches_at(apultra_compressor *pCompressor, const int nOffset, apultra_match *pMatches, unsigned short *pMatchDepth, unsigned char *pMatch1, const int nMaxMatches, const int nBlockFlags);
+
+/**
+ * Skip previously compressed bytes
+ *
+ * @param pCompressor compression context
+ * @param nStartOffset current offset in input window (typically 0)
+ * @param nEndOffset offset to skip to in input window (typically the number of previously compressed bytes)
+ */
+void apultra_skip_matches(apultra_compressor *pCompressor, const int nStartOffset, const int nEndOffset);
+
+/**
+ * Find all matches for the data to be compressed
+ *
+ * @param pCompressor compression context
+ * @param nMatchesPerOffset maximum number of matches to store for each offset
+ * @param nStartOffset current offset in input window (typically the number of previously compressed bytes)
+ * @param nEndOffset offset to end finding matches at (typically the size of the total input window in bytes
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ */
+void apultra_find_all_matches(apultra_compressor *pCompressor, const int nMatchesPerOffset, const int nStartOffset, const int nEndOffset, const int nBlockFlags);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _MATCHFINDER_H */
diff --git a/tools/z64compress/src/enc/apultra/shrink.c b/tools/z64compress/src/enc/apultra/shrink.c new file mode 100644 index 0000000..1d24a9c --- /dev/null +++ b/tools/z64compress/src/enc/apultra/shrink.c @@ -0,0 +1,1731 @@ +/*
+ * shrink.c - compressor implementation
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include "libapultra.h"
+#include "matchfinder.h"
+#include "shrink.h"
+#include "format.h"
+
+#define TOKEN_CODE_LARGE_MATCH 2 /* 10 */
+#define TOKEN_SIZE_LARGE_MATCH 2
+
+#define TOKEN_CODE_7BIT_MATCH 6 /* 110 */
+#define TOKEN_SIZE_7BIT_MATCH 3
+
+#define TOKEN_CODE_4BIT_MATCH 7 /* 111 */
+#define TOKEN_SIZE_4BIT_MATCH 3
+
+#define CountShift(N,bits) if ((N)>>(bits)) { (N)>>=(bits); (n) += (bits); }
+
+/** Gamma2 bit counts for common values, up to 255 */
+static char _gamma2_size[256] = {
+ 0, 0, 2, 2, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+};
+
+/**
+ * Write bitpacked value to output (compressed) buffer
+ *
+ * @param pOutData pointer to output buffer
+ * @param nOutOffset current write index into output buffer
+ * @param nMaxOutDataSize maximum size of output buffer, in bytes
+ * @param nValue value to write
+ * @param nBits number of least significant bits to write in value
+ * @param nCurBitsOffset write index into output buffer, of current byte being filled with bits
+ * @param nCurBitShift bit shift count
+ *
+ * @return updated write index into output buffer, or -1 in case of an error
+ */
+static int apultra_write_bits(unsigned char *pOutData, int nOutOffset, const int nMaxOutDataSize, const int nValue, const int nBits, int *nCurBitsOffset, int *nCurBitShift) {
+ int i;
+
+ if (nOutOffset < 0) return -1;
+
+ for (i = nBits - 1; i >= 0; i--) {
+ if ((*nCurBitsOffset) == INT_MIN) {
+ /* Allocate a new byte in the stream to pack bits in */
+ if (nOutOffset >= nMaxOutDataSize) return -1;
+ (*nCurBitsOffset) = nOutOffset;
+ (*nCurBitShift) = 7;
+ pOutData[nOutOffset++] = 0;
+ }
+
+ pOutData[(*nCurBitsOffset)] |= ((nValue >> i) & 1) << (*nCurBitShift);
+
+ (*nCurBitShift) --;
+ if ((*nCurBitShift) == -1) {
+ /* Current byte is full */
+ (*nCurBitsOffset) = INT_MIN;
+ }
+ }
+
+ return nOutOffset;
+}
+
+/**
+ * Get size of gamma2 encoded value
+ *
+ * @param nValue value of evaluate (2..n)
+ *
+ * @return number of bits required
+ */
+static int apultra_get_gamma2_size(int nValue) {
+ if (nValue >= 0 && nValue < 256)
+ return _gamma2_size[nValue];
+ else {
+ unsigned int n = 0;
+ CountShift(nValue, 16);
+ CountShift(nValue, 8);
+ CountShift(nValue, 4);
+ CountShift(nValue, 2);
+ CountShift(nValue, 1);
+
+ return n << 1;
+ }
+}
+
+/**
+ * Write gamma2 encoded value to output (compressed) buffer
+ *
+ * @param pOutData pointer to output buffer
+ * @param nOutOffset current write index into output buffer
+ * @param nMaxOutDataSize maximum size of output buffer, in bytes
+ * @param nValue value of write (2..n)
+ * @param nCurBitsOffset write index into output buffer, of current byte being filled with bits
+ * @param nCurBitShift bit shift count
+ *
+ * @return updated write index into output buffer, or -1 in case of an error
+ */
+static int apultra_write_gamma2_value(unsigned char *pOutData, int nOutOffset, const int nMaxOutDataSize, int nValue, int *nCurBitsOffset, int *nCurBitShift) {
+ int msb = 30;
+ while ((nValue >> msb--) == 0);
+
+ while (msb > 0) {
+ int bit = (nValue >> msb) & 1;
+
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, bit, 1, nCurBitsOffset, nCurBitShift);
+ msb--;
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, 1, 1, nCurBitsOffset, nCurBitShift);
+ }
+
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, nValue & 1, 1, nCurBitsOffset, nCurBitShift);
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, 0, 1, nCurBitsOffset, nCurBitShift);
+ return nOutOffset;
+}
+
+/**
+ * Get the number of extra bits required to represent a match offset
+ *
+ * @param nLength match length
+ * @param nMatchOffset match offset
+ * @param nFollowsLiteral non-zero if the match follows a literal, zero if it immediately follows another match
+ *
+ * @return number of extra bits required
+ */
+static inline int apultra_get_offset_varlen_size(const int nLength, const int nMatchOffset, const int nFollowsLiteral) {
+ if (nLength <= 3 && nMatchOffset < 128)
+ return 8 + TOKEN_SIZE_7BIT_MATCH;
+ else {
+ if (nFollowsLiteral)
+ return 8 + TOKEN_SIZE_LARGE_MATCH + apultra_get_gamma2_size((nMatchOffset >> 8) + 3);
+ else
+ return 8 + TOKEN_SIZE_LARGE_MATCH + apultra_get_gamma2_size((nMatchOffset >> 8) + 2);
+ }
+}
+
+/**
+ * Get the number of extra bits required to represent a match length
+ *
+ * @param nLength match length
+ * @param nMatchOffset match offset
+ *
+ * @return number of extra bits required
+ */
+static inline int apultra_get_match_varlen_size(int nLength, const int nMatchOffset) {
+ if (nLength <= 3 && nMatchOffset < 128)
+ return 0;
+ else {
+ if (nMatchOffset < 128 || nMatchOffset >= MINMATCH4_OFFSET)
+ return apultra_get_gamma2_size(nLength - 2);
+ else if (nMatchOffset < MINMATCH3_OFFSET)
+ return apultra_get_gamma2_size(nLength);
+ else
+ return apultra_get_gamma2_size(nLength - 1);
+ }
+}
+
+/**
+ * Insert forward rep candidate
+ *
+ * @param pCompressor compression context
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param i input data window position whose matches are being considered
+ * @param nMatchOffset match offset to use as rep candidate
+ * @param nStartOffset current offset in input window (typically the number of previously compressed bytes)
+ * @param nEndOffset offset to end finding matches at (typically the size of the total input window in bytes
+ * @param nArrivalsPerPosition maximum number of arrivals per input buffer position
+ * @param nDepth current insertion depth
+ */
+static void apultra_insert_forward_match(apultra_compressor *pCompressor, const unsigned char *pInWindow, const int i, const int nMatchOffset, const int nStartOffset, const int nEndOffset, const int nArrivalsPerPosition, int nDepth) {
+ const apultra_arrival *arrival = pCompressor->arrival + ((i - nStartOffset) * nArrivalsPerPosition);
+ const int *rle_len = (int*)pCompressor->intervals /* reuse */;
+ int* visited = ((int*)pCompressor->pos_data) - nStartOffset /* reuse */;
+ int* visited2 = visited + (nEndOffset - nStartOffset) /* reuse */;
+ int j;
+
+ for (j = 0; j < nArrivalsPerPosition && arrival[j].from_slot; j++) {
+ if (arrival[j].follows_literal) {
+ int nRepOffset = arrival[j].rep_offset;
+
+ if (nMatchOffset != nRepOffset && nRepOffset) {
+ int nRepPos = arrival[j].rep_pos;
+
+ if (nRepPos >= nStartOffset &&
+ nRepPos < nEndOffset &&
+ visited[nRepPos] != nMatchOffset) {
+
+ visited[nRepPos] = nMatchOffset;
+
+ if (visited2[nRepPos] != nMatchOffset && nRepPos >= nMatchOffset && pCompressor->match[((nRepPos - nStartOffset) << MATCHES_PER_INDEX_SHIFT) + NMATCHES_PER_INDEX - 1].length == 0) {
+ const unsigned char* pInWindowAtRepOffset = pInWindow + nRepPos;
+
+ if (pInWindowAtRepOffset[0] == pInWindowAtRepOffset[-nMatchOffset]) {
+ int nLen0 = rle_len[nRepPos - nMatchOffset];
+ int nLen1 = rle_len[nRepPos];
+ int nMinLen = (nLen0 < nLen1) ? nLen0 : nLen1;
+
+ int nMaxRepLen = nEndOffset - nRepPos;
+ if (nMaxRepLen > LCP_MAX)
+ nMaxRepLen = LCP_MAX;
+
+ if (nMinLen > nMaxRepLen)
+ nMinLen = nMaxRepLen;
+
+ const unsigned char* pInWindowMax = pInWindowAtRepOffset + nMaxRepLen;
+ pInWindowAtRepOffset += nMinLen;
+
+ while ((pInWindowAtRepOffset + 8) < pInWindowMax && !memcmp(pInWindowAtRepOffset, pInWindowAtRepOffset - nMatchOffset, 8))
+ pInWindowAtRepOffset += 8;
+ while ((pInWindowAtRepOffset + 4) < pInWindowMax && !memcmp(pInWindowAtRepOffset, pInWindowAtRepOffset - nMatchOffset, 4))
+ pInWindowAtRepOffset += 4;
+ while (pInWindowAtRepOffset < pInWindowMax && pInWindowAtRepOffset[0] == pInWindowAtRepOffset[-nMatchOffset])
+ pInWindowAtRepOffset++;
+
+ int nCurRepLen = (int)(pInWindowAtRepOffset - (pInWindow + nRepPos));
+
+ if (nCurRepLen >= 2) {
+ apultra_match* fwd_match = pCompressor->match + ((nRepPos - nStartOffset) << MATCHES_PER_INDEX_SHIFT);
+ unsigned short* fwd_depth = pCompressor->match_depth + ((nRepPos - nStartOffset) << MATCHES_PER_INDEX_SHIFT);
+ int r;
+
+ for (r = 0; fwd_match[r].length >= MIN_MATCH_SIZE; r++) {
+ if (fwd_match[r].offset == nMatchOffset && (fwd_depth[r] & 0x3fff) == 0) {
+ if ((int)fwd_match[r].length < nCurRepLen) {
+ fwd_match[r].length = nCurRepLen;
+ fwd_depth[r] = 0;
+ }
+ r = NMATCHES_PER_INDEX;
+ break;
+ }
+ }
+
+ if (r < NMATCHES_PER_INDEX) {
+ visited2[nRepPos] = nMatchOffset;
+
+ fwd_match[r].offset = nMatchOffset;
+ fwd_match[r].length = nCurRepLen;
+ fwd_depth[r] = 0;
+
+ if (nDepth < 9)
+ apultra_insert_forward_match(pCompressor, pInWindow, nRepPos, nMatchOffset, nStartOffset, nEndOffset, nArrivalsPerPosition, nDepth + 1);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+/**
+ * Attempt to pick optimal matches, so as to produce the smallest possible output that decompresses to the same input
+ *
+ * @param pCompressor compression context
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param nStartOffset current offset in input window (typically the number of previously compressed bytes)
+ * @param nEndOffset offset to end finding matches at (typically the size of the total input window in bytes
+ * @param nInsertForwardReps non-zero to insert forward repmatch candidates, zero to use the previously inserted candidates
+ * @param nCurRepMatchOffset starting rep offset for this block
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ * @param nArrivalsPerPosition maximum number of arrivals per input buffer position
+ */
+static void apultra_optimize_forward(apultra_compressor *pCompressor, const unsigned char *pInWindow, const int nStartOffset, const int nEndOffset, const int nInsertForwardReps, const int *nCurRepMatchOffset, const int nBlockFlags, const int nArrivalsPerPosition) {
+ apultra_arrival *arrival = pCompressor->arrival - (nStartOffset * nArrivalsPerPosition);
+ const int* rle_len = (int*)pCompressor->intervals /* reuse */;
+ int* visited = ((int*)pCompressor->pos_data) - nStartOffset /* reuse */;
+ int i, j, n;
+
+ if ((nEndOffset - nStartOffset) > pCompressor->block_size) return;
+
+ memset(arrival + (nStartOffset * nArrivalsPerPosition), 0, sizeof(apultra_arrival) * ((nEndOffset - nStartOffset + 1) * nArrivalsPerPosition));
+
+ arrival[nStartOffset * nArrivalsPerPosition].from_slot = -1;
+ arrival[nStartOffset * nArrivalsPerPosition].rep_offset = *nCurRepMatchOffset;
+
+ for (i = (nStartOffset * nArrivalsPerPosition); i != ((nEndOffset+1) * nArrivalsPerPosition); i++) {
+ arrival[i].cost = 0x40000000;
+ }
+
+ if (nInsertForwardReps) {
+ memset(visited + nStartOffset, 0, 2 * (nEndOffset - nStartOffset) * sizeof(int));
+ }
+
+ for (i = nStartOffset; i != nEndOffset; i++) {
+ apultra_arrival *cur_arrival = &arrival[i * nArrivalsPerPosition];
+ int m;
+
+ const unsigned char nMatch1Offs = pCompressor->match1[i - nStartOffset];
+ int nShortOffset;
+ int nShortLen;
+ int nLiteralScore;
+ int nLiteralCost;
+
+ if ((pInWindow[i] != 0 && nMatch1Offs == 0) || (i == nStartOffset && (nBlockFlags & 1))) {
+ nShortOffset = 0;
+ nShortLen = 0;
+ nLiteralCost = 9 /* literal bit + literal byte */;
+ }
+ else {
+ nShortOffset = (pInWindow[i] == 0) ? 0 : nMatch1Offs;
+ nShortLen = 1;
+ nLiteralCost = 4 + TOKEN_SIZE_4BIT_MATCH /* command and offset cost; no length cost */;
+ }
+
+ nLiteralScore = nShortOffset ? 3 : 1;
+
+ if (cur_arrival[nArrivalsPerPosition].from_slot) {
+ for (j = 0; j < nArrivalsPerPosition && cur_arrival[j].from_slot; j++) {
+ int nPrevCost = cur_arrival[j].cost & 0x3fffffff;
+ int nCodingChoiceCost = nPrevCost + nLiteralCost;
+ int nScore = cur_arrival[j].score + nLiteralScore;
+
+ apultra_arrival* pDestSlots = &cur_arrival[nArrivalsPerPosition];
+ if (nCodingChoiceCost < pDestSlots[nArrivalsPerPosition - 1].cost ||
+ (nCodingChoiceCost == pDestSlots[nArrivalsPerPosition - 1].cost && nScore < pDestSlots[nArrivalsPerPosition - 1].score)) {
+ int nRepOffset = cur_arrival[j].rep_offset;
+ int exists = 0;
+
+ for (n = 0;
+ pDestSlots[n].cost < nCodingChoiceCost;
+ n++) {
+ if (pDestSlots[n].rep_offset == nRepOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ for (;
+ n < nArrivalsPerPosition && pDestSlots[n].cost == nCodingChoiceCost && nScore >= pDestSlots[n].score;
+ n++) {
+ if (pDestSlots[n].rep_offset == nRepOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ if (n < nArrivalsPerPosition) {
+ int nn;
+
+ for (nn = n;
+ nn < nArrivalsPerPosition && pDestSlots[nn].cost == nCodingChoiceCost;
+ nn++) {
+ if (pDestSlots[nn].rep_offset == nRepOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ int z;
+
+ for (z = n; z < nArrivalsPerPosition - 1 && pDestSlots[z].from_slot; z++) {
+ if (pDestSlots[z].rep_offset == nRepOffset)
+ break;
+ }
+
+ apultra_arrival* pDestArrival = &pDestSlots[n];
+ memmove(&pDestSlots[n + 1],
+ &pDestSlots[n],
+ sizeof(apultra_arrival) * (z - n));
+
+ pDestArrival->cost = nCodingChoiceCost;
+ pDestArrival->from_pos = i;
+ pDestArrival->from_slot = j + 1;
+ pDestArrival->follows_literal = 1;
+ pDestArrival->rep_offset = nRepOffset;
+ pDestArrival->short_offset = nShortOffset;
+ pDestArrival->rep_pos = cur_arrival[j].rep_pos;
+ pDestArrival->match_len = nShortLen;
+ pDestArrival->score = nScore;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ else {
+ for (j = 0; j < nArrivalsPerPosition && cur_arrival[j].from_slot; j++) {
+ int nPrevCost = cur_arrival[j].cost & 0x3fffffff;
+ int nCodingChoiceCost = nPrevCost + nLiteralCost;
+ int nScore = cur_arrival[j].score + nLiteralScore;
+
+ apultra_arrival* pDestArrival = &cur_arrival[nArrivalsPerPosition + j];
+
+ pDestArrival->cost = nCodingChoiceCost;
+ pDestArrival->from_pos = i;
+ pDestArrival->from_slot = j + 1;
+ pDestArrival->follows_literal = 1;
+ pDestArrival->rep_offset = cur_arrival[j].rep_offset;
+ pDestArrival->short_offset = nShortOffset;
+ pDestArrival->rep_pos = cur_arrival[j].rep_pos;
+ pDestArrival->match_len = nShortLen;
+ pDestArrival->score = nScore;
+ }
+ }
+
+ if (i == nStartOffset && (nBlockFlags & 1)) continue;
+
+ const apultra_match *match = pCompressor->match + ((i - nStartOffset) << MATCHES_PER_INDEX_SHIFT);
+ const unsigned short *match_depth = pCompressor->match_depth + ((i - nStartOffset) << MATCHES_PER_INDEX_SHIFT);
+ int nNumArrivalsForThisPos = j, nOverallMinRepLen = 0, nOverallMaxRepLen = 0;
+
+ int nRepLenForArrival[NARRIVALS_PER_POSITION_MAX];
+ memset(nRepLenForArrival, 0, nArrivalsPerPosition * sizeof(int));
+
+ int nRepMatchArrivalIdx[NARRIVALS_PER_POSITION_MAX + 1];
+ int nNumRepMatchArrivals = 0;
+
+ int nMaxRepLenForPos = nEndOffset - i;
+ if (nMaxRepLenForPos > LCP_MAX)
+ nMaxRepLenForPos = LCP_MAX;
+ const unsigned char* pInWindowStart = pInWindow + i;
+ const unsigned char* pInWindowMax = pInWindowStart + nMaxRepLenForPos;
+ const int nLen1 = rle_len[i];
+
+ for (j = 0; j < nNumArrivalsForThisPos && (i + 2) <= nEndOffset; j++) {
+ if (cur_arrival[j].follows_literal) {
+ int nRepOffset = cur_arrival[j].rep_offset;
+
+ if (nRepOffset && i >= nRepOffset) {
+ if (pInWindowStart[0] == pInWindowStart[-nRepOffset]) {
+ int nLen0 = rle_len[i - nRepOffset];
+ int nMinLen = (nLen0 < nLen1) ? nLen0 : nLen1;
+
+ if (nMinLen > nMaxRepLenForPos)
+ nMinLen = nMaxRepLenForPos;
+
+ const unsigned char* pInWindowAtRepOffset = pInWindowStart + nMinLen;
+ while ((pInWindowAtRepOffset + 8) < pInWindowMax && !memcmp(pInWindowAtRepOffset, pInWindowAtRepOffset - nRepOffset, 8))
+ pInWindowAtRepOffset += 8;
+ while ((pInWindowAtRepOffset + 4) < pInWindowMax && !memcmp(pInWindowAtRepOffset, pInWindowAtRepOffset - nRepOffset, 4))
+ pInWindowAtRepOffset += 4;
+ while (pInWindowAtRepOffset < pInWindowMax && pInWindowAtRepOffset[0] == pInWindowAtRepOffset[-nRepOffset])
+ pInWindowAtRepOffset++;
+
+ int nCurMaxLen = (int)(pInWindowAtRepOffset - pInWindowStart);
+
+ if (nCurMaxLen >= 2) {
+ nRepLenForArrival[j] = nCurMaxLen;
+ nRepMatchArrivalIdx[nNumRepMatchArrivals++] = j;
+
+ if (nOverallMaxRepLen < nCurMaxLen)
+ nOverallMaxRepLen = nCurMaxLen;
+ }
+ }
+ }
+ }
+ }
+ nRepMatchArrivalIdx[nNumRepMatchArrivals] = -1;
+
+ for (m = 0; m < NMATCHES_PER_INDEX && match[m].length; m++) {
+ const int nOrigMatchLen = match[m].length;
+ const int nOrigMatchOffset = match[m].offset;
+ const unsigned int nOrigMatchDepth = match_depth[m] & 0x3fff;
+ const int nScorePenalty = 3 + ((match_depth[m] & 0x8000) >> 15);
+ unsigned int d;
+
+ for (d = 0; d <= nOrigMatchDepth; d += (nOrigMatchDepth ? nOrigMatchDepth : 1)) {
+ const int nMatchOffset = nOrigMatchOffset - d;
+ int nMatchLen = nOrigMatchLen - d;
+
+ if ((i + nMatchLen) > nEndOffset)
+ nMatchLen = nEndOffset - i;
+
+ if (nInsertForwardReps) {
+ apultra_insert_forward_match(pCompressor, pInWindow, i, nMatchOffset, nStartOffset, nEndOffset, nArrivalsPerPosition, 0);
+ }
+
+ if (nMatchLen >= 2) {
+ int nStartingMatchLen, nJumpMatchLen, k;
+ int nNoRepMatchOffsetCostForLit[2], nNoRepMatchOffsetCostDelta;
+ int nMinMatchLenForOffset;
+ int nNoRepCostAdjusment = (nMatchLen >= LCP_MAX) ? 1 : 0;
+
+ if (nMatchOffset < MINMATCH3_OFFSET)
+ nMinMatchLenForOffset = 2;
+ else {
+ if (nMatchOffset < MINMATCH4_OFFSET)
+ nMinMatchLenForOffset = 3;
+ else
+ nMinMatchLenForOffset = 4;
+ }
+
+ if (nMatchLen >= LEAVE_ALONE_MATCH_SIZE && i >= nMatchLen)
+ nStartingMatchLen = nMatchLen;
+ else
+ nStartingMatchLen = 2;
+
+ if ((nBlockFlags & 3) == 3 && nMatchLen > 90 && i >= 90)
+ nJumpMatchLen = 90;
+ else
+ nJumpMatchLen = nMatchLen + 1;
+
+ if (nStartingMatchLen <= 3 && nMatchOffset < 128) {
+ nNoRepMatchOffsetCostForLit[0] = 8 + TOKEN_SIZE_7BIT_MATCH;
+ nNoRepMatchOffsetCostForLit[1] = 8 + TOKEN_SIZE_7BIT_MATCH;
+ }
+ else {
+ nNoRepMatchOffsetCostForLit[0] = 8 + TOKEN_SIZE_LARGE_MATCH + apultra_get_gamma2_size((nMatchOffset >> 8) + 2);
+ nNoRepMatchOffsetCostForLit[1] = 8 + TOKEN_SIZE_LARGE_MATCH + apultra_get_gamma2_size((nMatchOffset >> 8) + 3);
+ }
+ nNoRepMatchOffsetCostDelta = nNoRepMatchOffsetCostForLit[1] - nNoRepMatchOffsetCostForLit[0];
+
+ for (k = nStartingMatchLen; k <= nMatchLen; k++) {
+ int nRepMatchMatchLenCost = apultra_get_gamma2_size(k);
+ apultra_arrival *pDestSlots = &cur_arrival[k * nArrivalsPerPosition];
+
+ /* Insert non-repmatch candidate */
+
+ if (k >= nMinMatchLenForOffset) {
+ int nNoRepMatchMatchLenCost;
+
+ if (k <= 3 && nMatchOffset < 128)
+ nNoRepMatchMatchLenCost = 0;
+ else {
+ if (nMatchOffset < 128 || nMatchOffset >= MINMATCH4_OFFSET)
+ nNoRepMatchMatchLenCost = apultra_get_gamma2_size(k - 2);
+ else if (nMatchOffset < MINMATCH3_OFFSET)
+ nNoRepMatchMatchLenCost = nRepMatchMatchLenCost;
+ else
+ nNoRepMatchMatchLenCost = apultra_get_gamma2_size(k - 1);
+ }
+
+ for (j = 0; j < nNumArrivalsForThisPos; j++) {
+ if (nMatchOffset != cur_arrival[j].rep_offset || cur_arrival[j].follows_literal == 0) {
+ int nPrevCost = cur_arrival[j].cost & 0x3fffffff;
+ int nMatchCmdCost = nNoRepMatchMatchLenCost + nNoRepMatchOffsetCostForLit[cur_arrival[j].follows_literal];
+ int nCodingChoiceCost = nPrevCost + nMatchCmdCost;
+
+ if (nCodingChoiceCost <= (pDestSlots[nArrivalsPerPosition - 1].cost + 1)) {
+ int nScore = cur_arrival[j].score + nScorePenalty;
+
+ if (nCodingChoiceCost < pDestSlots[nArrivalsPerPosition - 2].cost ||
+ (nCodingChoiceCost == pDestSlots[nArrivalsPerPosition - 2].cost && nScore < pDestSlots[nArrivalsPerPosition - 2].score)) {
+ int exists = 0;
+
+ for (n = 0;
+ pDestSlots[n].cost < nCodingChoiceCost;
+ n++) {
+ if (pDestSlots[n].rep_offset == nMatchOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ int nRevisedCodingChoiceCost = nCodingChoiceCost - nNoRepCostAdjusment;
+
+ for (;
+ n < nArrivalsPerPosition - 1 && pDestSlots[n].cost == nRevisedCodingChoiceCost && nScore >= pDestSlots[n].score;
+ n++) {
+ if (pDestSlots[n].rep_offset == nMatchOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ if (n < nArrivalsPerPosition - 1) {
+ int nn;
+
+ for (nn = n;
+ nn < nArrivalsPerPosition && pDestSlots[nn].cost == nCodingChoiceCost;
+ nn++) {
+ if (pDestSlots[nn].rep_offset == nMatchOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ int z;
+
+ for (z = n; z < nArrivalsPerPosition - 1 && pDestSlots[z].from_slot; z++) {
+ if (pDestSlots[z].rep_offset == nMatchOffset)
+ break;
+ }
+
+ apultra_arrival* pDestArrival = &pDestSlots[n];
+ memmove(&pDestSlots[n + 1],
+ &pDestSlots[n],
+ sizeof(apultra_arrival) * (z - n));
+
+ pDestArrival->cost = nRevisedCodingChoiceCost;
+ pDestArrival->from_pos = i;
+ pDestArrival->from_slot = j + 1;
+ pDestArrival->follows_literal = 0;
+ pDestArrival->rep_offset = nMatchOffset;
+ pDestArrival->short_offset = 0;
+ pDestArrival->rep_pos = i;
+ pDestArrival->match_len = k;
+ pDestArrival->score = nScore;
+ }
+ }
+ }
+ }
+ else {
+ if ((nCodingChoiceCost - pDestSlots[n].cost) >= nNoRepMatchOffsetCostDelta)
+ break;
+ }
+ }
+ if (cur_arrival[j].follows_literal == 0 || nNoRepMatchOffsetCostDelta == 0)
+ break;
+ }
+ else {
+ break;
+ }
+ }
+ }
+ }
+
+ /* Insert repmatch candidate */
+
+ if (k > nOverallMinRepLen && k <= nOverallMaxRepLen) {
+ int nRepMatchCmdCost = TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size(2) */ + nRepMatchMatchLenCost;
+ int nCurRepMatchArrival;
+
+ if (k <= 90)
+ nOverallMinRepLen = k;
+ else if (nOverallMaxRepLen == k)
+ nOverallMaxRepLen--;
+
+ for (nCurRepMatchArrival = 0; (j = nRepMatchArrivalIdx[nCurRepMatchArrival]) >= 0; nCurRepMatchArrival++) {
+ if (nRepLenForArrival[j] >= k) {
+ int nPrevCost = cur_arrival[j].cost & 0x3fffffff;
+ int nRepCodingChoiceCost = nPrevCost + nRepMatchCmdCost;
+ int nScore = cur_arrival[j].score + 2;
+
+ if (nRepCodingChoiceCost < pDestSlots[nArrivalsPerPosition - 1].cost ||
+ (nRepCodingChoiceCost == pDestSlots[nArrivalsPerPosition - 1].cost && nScore < pDestSlots[nArrivalsPerPosition - 1].score)) {
+ int nRepOffset = cur_arrival[j].rep_offset;
+ int exists = 0;
+
+ for (n = 0;
+ pDestSlots[n].cost < nRepCodingChoiceCost;
+ n++) {
+ if (pDestSlots[n].rep_offset == nRepOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ for (;
+ n < nArrivalsPerPosition && pDestSlots[n].cost == nRepCodingChoiceCost && nScore >= pDestSlots[n].score;
+ n++) {
+ if (pDestSlots[n].rep_offset == nRepOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ if (n < nArrivalsPerPosition) {
+ int nn;
+
+ for (nn = n;
+ nn < nArrivalsPerPosition && pDestSlots[nn].cost == nRepCodingChoiceCost;
+ nn++) {
+ if (pDestSlots[nn].rep_offset == nRepOffset) {
+ exists = 1;
+ break;
+ }
+ }
+
+ if (!exists) {
+ int z;
+
+ for (z = n; z < nArrivalsPerPosition - 1 && pDestSlots[z].from_slot; z++) {
+ if (pDestSlots[z].rep_offset == nRepOffset)
+ break;
+ }
+
+ apultra_arrival* pDestArrival = &pDestSlots[n];
+ memmove(&pDestSlots[n + 1],
+ &pDestSlots[n],
+ sizeof(apultra_arrival) * (z - n));
+
+ pDestArrival->cost = nRepCodingChoiceCost;
+ pDestArrival->from_pos = i;
+ pDestArrival->from_slot = j + 1;
+ pDestArrival->follows_literal = 0;
+ pDestArrival->rep_offset = nRepOffset;
+ pDestArrival->short_offset = 0;
+ pDestArrival->rep_pos = i;
+ pDestArrival->match_len = k;
+ pDestArrival->score = nScore;
+ }
+ }
+ }
+ }
+ }
+ else {
+ break;
+ }
+ }
+ }
+ }
+
+ if (k == 3 && nMatchOffset < 128) {
+ nNoRepMatchOffsetCostForLit[0] = 8 + TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size((nMatchOffset >> 8) + 2) */;
+ nNoRepMatchOffsetCostForLit[1] = 8 + TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size((nMatchOffset >> 8) + 3) */;
+ }
+
+ if (k == nJumpMatchLen)
+ k = nMatchLen - 1;
+ }
+ }
+
+ if (nOrigMatchLen >= 512)
+ break;
+ }
+ }
+ }
+
+ if (!nInsertForwardReps) {
+ const apultra_arrival* end_arrival = &arrival[(i * nArrivalsPerPosition) + 0];
+ apultra_final_match* pBestMatch = pCompressor->best_match - nStartOffset;
+
+ while (end_arrival->from_slot > 0 && end_arrival->from_pos >= 0 && (int)end_arrival->from_pos < nEndOffset) {
+ pBestMatch[end_arrival->from_pos].length = end_arrival->match_len;
+ if (end_arrival->match_len >= 2)
+ pBestMatch[end_arrival->from_pos].offset = end_arrival->rep_offset;
+ else
+ pBestMatch[end_arrival->from_pos].offset = end_arrival->short_offset;
+
+ end_arrival = &arrival[(end_arrival->from_pos * nArrivalsPerPosition) + (end_arrival->from_slot - 1)];
+ }
+ }
+}
+
+/**
+ * Attempt to replace matches by literals when it makes the final bitstream smaller, and merge large matches
+ *
+ * @param pCompressor compression context
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param pBestMatch optimal matches to evaluate and update
+ * @param nStartOffset current offset in input window (typically the number of previously compressed bytes)
+ * @param nEndOffset offset to end finding matches at (typically the size of the total input window in bytes
+ * @param nCurRepMatchOffset starting rep offset for this block
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ *
+ * @return non-zero if the number of tokens was reduced, 0 if it wasn't
+ */
+static int apultra_reduce_commands(apultra_compressor *pCompressor, const unsigned char *pInWindow, apultra_final_match *pBestMatch, const int nStartOffset, const int nEndOffset, const int *nCurRepMatchOffset, const int nBlockFlags) {
+ int i;
+ int nRepMatchOffset = *nCurRepMatchOffset;
+ int nFollowsLiteral = 0;
+ int nDidReduce = 0;
+ int nLastMatchLen = 0;
+ const unsigned char *match1 = pCompressor->match1 - nStartOffset;
+
+ for (i = nStartOffset + ((nBlockFlags & 1) ? 1 : 0); i < nEndOffset; ) {
+ apultra_final_match *pMatch = pBestMatch + i;
+
+ if (pMatch->length <= 1 &&
+ (i + 1) < nEndOffset &&
+ pBestMatch[i + 1].length >= 2 &&
+ pBestMatch[i + 1].length < MAX_VARLEN &&
+ pBestMatch[i + 1].offset &&
+ i >= pBestMatch[i + 1].offset &&
+ (i + pBestMatch[i + 1].length + 1) <= nEndOffset &&
+ !memcmp(pInWindow + i - (pBestMatch[i + 1].offset), pInWindow + i, pBestMatch[i + 1].length + 1)) {
+ if ((pBestMatch[i + 1].offset < MINMATCH3_OFFSET || (pBestMatch[i + 1].length + 1) >= 3 || (pBestMatch[i + 1].offset == nRepMatchOffset && nFollowsLiteral)) &&
+ (pBestMatch[i + 1].offset < MINMATCH4_OFFSET || (pBestMatch[i + 1].length + 1) >= 4 || (pBestMatch[i + 1].offset == nRepMatchOffset && nFollowsLiteral))) {
+
+ int nCurPartialCommandSize = (pMatch->length == 1) ? (TOKEN_SIZE_4BIT_MATCH + 4) : (1 /* literal bit */ + 8 /* literal size */);
+ if (pBestMatch[i + 1].offset == nRepMatchOffset /* always follows a literal, the one at the current position */) {
+ nCurPartialCommandSize += TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size(2) */ + apultra_get_gamma2_size(pBestMatch[i + 1].length);
+ }
+ else {
+ nCurPartialCommandSize += apultra_get_offset_varlen_size(pBestMatch[i + 1].length, pBestMatch[i + 1].offset, 1) + apultra_get_match_varlen_size(pBestMatch[i + 1].length, pBestMatch[i + 1].offset);
+ }
+
+ int nReducedPartialCommandSize;
+ if (pBestMatch[i + 1].offset == nRepMatchOffset && nFollowsLiteral) {
+ nReducedPartialCommandSize = TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size(2) */ + apultra_get_gamma2_size(pBestMatch[i + 1].length);
+ }
+ else {
+ nReducedPartialCommandSize = apultra_get_offset_varlen_size(pBestMatch[i + 1].length, pBestMatch[i + 1].offset, nFollowsLiteral) + apultra_get_match_varlen_size(pBestMatch[i + 1].length, pBestMatch[i + 1].offset);
+ }
+
+ if (nReducedPartialCommandSize < nCurPartialCommandSize || (nFollowsLiteral == 0 && nLastMatchLen >= LCP_MAX)) {
+ /* Merge */
+ pBestMatch[i].length = pBestMatch[i + 1].length + 1;
+ pBestMatch[i].offset = pBestMatch[i + 1].offset;
+ pBestMatch[i + 1].length = 0;
+ pBestMatch[i + 1].offset = 0;
+ nDidReduce = 1;
+ continue;
+ }
+ }
+ }
+
+ if (pMatch->length >= 2) {
+ if (pMatch->length < 32 && /* Don't waste time considering large matches, they will always win over literals */
+ (i + pMatch->length) < nEndOffset /* Don't consider the last match in the block, we can only reduce a match inbetween other tokens */) {
+ int nNextIndex = i + pMatch->length;
+ int nNextFollowsLiteral = 0;
+ int nCannotEncode = 0;
+
+ while (nNextIndex < nEndOffset && pBestMatch[nNextIndex].length < 2) {
+ nNextIndex++;
+ nNextFollowsLiteral = 1;
+ }
+
+ if (nNextIndex < nEndOffset && pBestMatch[nNextIndex].length >= 2) {
+ if (nRepMatchOffset && nRepMatchOffset != pMatch->offset && pBestMatch[nNextIndex].offset && pMatch->offset != pBestMatch[nNextIndex].offset &&
+ nNextFollowsLiteral) {
+ /* Try to gain a match forward */
+ if (i >= pBestMatch[nNextIndex].offset && (i - pBestMatch[nNextIndex].offset + pMatch->length) <= nEndOffset) {
+ if ((pBestMatch[nNextIndex].offset < MINMATCH3_OFFSET || pMatch->length >= 3) &&
+ (pBestMatch[nNextIndex].offset < MINMATCH4_OFFSET || pMatch->length >= 4)) {
+ int nMaxLen = 0;
+ const unsigned char* pInWindowAtPos = pInWindow + i;
+ while (nMaxLen < pMatch->length && pInWindowAtPos[nMaxLen - pBestMatch[nNextIndex].offset] == pInWindowAtPos[nMaxLen])
+ nMaxLen++;
+
+ if (nMaxLen >= pMatch->length) {
+ /* Replace */
+ pMatch->offset = pBestMatch[nNextIndex].offset;
+ nDidReduce = 1;
+ }
+ else if (nMaxLen >= 2) {
+ if ((nFollowsLiteral && nRepMatchOffset == pBestMatch[nNextIndex].offset) ||
+ ((pBestMatch[nNextIndex].offset < MINMATCH3_OFFSET || nMaxLen >= 3) &&
+ (pBestMatch[nNextIndex].offset < MINMATCH4_OFFSET || nMaxLen >= 4))) {
+
+ int nPartialSizeBefore, nPartialSizeAfter, j;
+
+ nPartialSizeBefore = apultra_get_offset_varlen_size(pMatch->length, pMatch->offset, nFollowsLiteral);
+ nPartialSizeBefore += apultra_get_match_varlen_size(pMatch->length, pMatch->offset);
+
+ nPartialSizeBefore += apultra_get_offset_varlen_size(pBestMatch[nNextIndex].length, pBestMatch[nNextIndex].offset, 1);
+ nPartialSizeBefore += apultra_get_match_varlen_size(pBestMatch[nNextIndex].length, pBestMatch[nNextIndex].offset);
+
+ nPartialSizeAfter = apultra_get_offset_varlen_size(nMaxLen, pBestMatch[nNextIndex].offset, nFollowsLiteral);
+ if (nFollowsLiteral && nRepMatchOffset == pBestMatch[nNextIndex].offset)
+ nPartialSizeAfter += apultra_get_gamma2_size(nMaxLen);
+ else
+ nPartialSizeAfter += apultra_get_match_varlen_size(nMaxLen, pBestMatch[nNextIndex].offset);
+
+ nPartialSizeAfter += TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size(2) */;
+ nPartialSizeAfter += apultra_get_gamma2_size(pBestMatch[nNextIndex].length);
+
+ for (j = nMaxLen; j < pMatch->length; j++) {
+ if (pInWindow[i + j] == 0 || match1[i + j])
+ nPartialSizeAfter += TOKEN_SIZE_4BIT_MATCH + 4;
+ else
+ nPartialSizeAfter += 1 /* literal bit */ + 8 /* literal byte */;
+ }
+
+ if (nPartialSizeAfter < nPartialSizeBefore) {
+ /* We gain a repmatch that is shorter than the original match as this is the best we can do, so it is followed by extra literals, but
+ * we have calculated that this is shorter */
+
+ int nOrigLen = pMatch->length;
+ int j;
+
+ pMatch->offset = pBestMatch[nNextIndex].offset;
+ pMatch->length = nMaxLen;
+
+ for (j = nMaxLen; j < nOrigLen; j++) {
+ pBestMatch[i + j].offset = match1[i + j];
+ pBestMatch[i + j].length = (pInWindow[i + j] && match1[i+j] == 0) ? 0 : 1;
+ }
+
+ nDidReduce = 1;
+ continue;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* Calculate this command's current cost */
+
+ int nCurCommandSize;
+ if (pMatch->offset == nRepMatchOffset && nFollowsLiteral) {
+ nCurCommandSize = TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size(2) */ + apultra_get_gamma2_size(pMatch->length);
+ }
+ else {
+ nCurCommandSize = apultra_get_offset_varlen_size(pMatch->length, pMatch->offset, nFollowsLiteral) + apultra_get_match_varlen_size(pMatch->length, pMatch->offset);
+ }
+
+ /* Calculate the next command's current cost */
+ int nNextCommandSize;
+ if (pBestMatch[nNextIndex].offset == pMatch->offset && nNextFollowsLiteral && pBestMatch[nNextIndex].length >= 2) {
+ nNextCommandSize = TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size(2) */ + apultra_get_gamma2_size(pBestMatch[nNextIndex].length);
+ }
+ else {
+ nNextCommandSize = apultra_get_offset_varlen_size(pBestMatch[nNextIndex].length, pBestMatch[nNextIndex].offset, nNextFollowsLiteral) + apultra_get_match_varlen_size(pBestMatch[nNextIndex].length, pBestMatch[nNextIndex].offset);
+ }
+
+ int nOriginalCombinedCommandSize = nCurCommandSize + nNextCommandSize;
+
+ /* Calculate the cost of replacing this match command by literals + the effect on the cost of the next command */
+ int nReducedCommandSize = 0;
+ int j;
+
+ for (j = 0; j < pMatch->length; j++) {
+ if (pInWindow[i + j] == 0 || match1[i + j])
+ nReducedCommandSize += TOKEN_SIZE_4BIT_MATCH + 4;
+ else
+ nReducedCommandSize += 1 /* literal bit */ + 8;
+ }
+
+ if (pBestMatch[nNextIndex].offset == nRepMatchOffset /* the new command would always follow literals, the ones we create */ && pBestMatch[nNextIndex].length >= 2) {
+ nReducedCommandSize += TOKEN_SIZE_LARGE_MATCH + 2 /* apultra_get_gamma2_size(2) */ + apultra_get_gamma2_size(pBestMatch[nNextIndex].length);
+ }
+ else {
+ if ((pBestMatch[nNextIndex].length < 3 && pBestMatch[nNextIndex].offset >= MINMATCH3_OFFSET) ||
+ (pBestMatch[nNextIndex].length < 4 && pBestMatch[nNextIndex].offset >= MINMATCH4_OFFSET)) {
+ /* This match length can only be encoded with a rep-match */
+ nCannotEncode = 1;
+ }
+ else {
+ nReducedCommandSize += apultra_get_offset_varlen_size(pBestMatch[nNextIndex].length, pBestMatch[nNextIndex].offset, 1 /* follows literals */) + apultra_get_match_varlen_size(pBestMatch[nNextIndex].length, pBestMatch[nNextIndex].offset);
+ }
+ }
+
+ if (!nCannotEncode && nOriginalCombinedCommandSize > nReducedCommandSize) {
+ /* Reduce */
+ int nMatchLen = pMatch->length;
+ int j;
+
+ for (j = 0; j < nMatchLen; j++) {
+ pBestMatch[i + j].offset = match1[i + j];
+ pBestMatch[i + j].length = (pInWindow[i + j] && match1[i + j] == 0) ? 0 : 1;
+ }
+
+ nDidReduce = 1;
+ continue;
+ }
+ }
+ }
+
+ if ((i + pMatch->length) < nEndOffset && pMatch->offset > 0 &&
+ pBestMatch[i + pMatch->length].offset > 0 &&
+ pBestMatch[i + pMatch->length].length >= 2 &&
+ (pMatch->length + pBestMatch[i + pMatch->length].length) >= LEAVE_ALONE_MATCH_SIZE &&
+ (pMatch->length + pBestMatch[i + pMatch->length].length) <= MAX_VARLEN &&
+ (i + pMatch->length) >= pMatch->offset &&
+ (i + pMatch->length) >= pBestMatch[i + pMatch->length].offset &&
+ (i + pMatch->length + pBestMatch[i + pMatch->length].length) <= nEndOffset &&
+ !memcmp(pInWindow + i + pMatch->length - pMatch->offset,
+ pInWindow + i + pMatch->length - pBestMatch[i + pMatch->length].offset,
+ pBestMatch[i + pMatch->length].length)) {
+ int nMatchLen = pMatch->length;
+
+ /* Join large matches */
+
+ int nNextIndex = i + pMatch->length + pBestMatch[i + pMatch->length].length;
+ int nNextFollowsLiteral = 0;
+ int nCannotEncode = 0;
+
+ while (nNextIndex < nEndOffset && pBestMatch[nNextIndex].length < 2) {
+ nNextIndex++;
+ nNextFollowsLiteral = 1;
+ }
+
+ if (nNextIndex < nEndOffset && nNextFollowsLiteral && pBestMatch[nNextIndex].length >= 2 &&
+ pBestMatch[nNextIndex].offset == pBestMatch[i + pMatch->length].offset) {
+ if ((pBestMatch[nNextIndex].offset >= MINMATCH3_OFFSET && pBestMatch[nNextIndex].length < 3) ||
+ (pBestMatch[nNextIndex].offset >= MINMATCH4_OFFSET && pBestMatch[nNextIndex].length < 4)) {
+ nCannotEncode = 1;
+ }
+ }
+
+ if (!nCannotEncode) {
+ pMatch->length += pBestMatch[i + nMatchLen].length;
+ pBestMatch[i + nMatchLen].offset = 0;
+ pBestMatch[i + nMatchLen].length = -1;
+ nDidReduce = 1;
+ continue;
+ }
+ }
+
+ nRepMatchOffset = pMatch->offset;
+ nFollowsLiteral = 0;
+ nLastMatchLen = pMatch->length;
+
+ i += pMatch->length;
+ }
+ else {
+ /* 4 bits offset (1 byte match) or literal */
+ i++;
+ nFollowsLiteral = 1;
+ nLastMatchLen = 0;
+ }
+ }
+
+ return nDidReduce;
+}
+
+/**
+ * Emit a block of compressed data
+ *
+ * @param pCompressor compression context
+ * @param pBestMatch optimal matches to emit
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param nStartOffset current offset in input window (typically the number of previously compressed bytes)
+ * @param nEndOffset offset to end finding matches at (typically the size of the total input window in bytes
+ * @param pOutData pointer to output buffer
+ * @param nMaxOutDataSize maximum size of output buffer, in bytes
+ * @param nCurBitsOffset write index into output buffer, of current byte being filled with bits
+ * @param nCurBitShift bit shift count
+ * @param nFollowsLiteral non-zero if the next command to be issued follows a literal, 0 if not
+ * @param nCurRepMatchOffset starting rep offset for this block, updated after the block is compressed successfully
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ *
+ * @return size of compressed data in output buffer, or -1 if the data is uncompressible
+ */
+static int apultra_write_block(apultra_compressor *pCompressor, apultra_final_match *pBestMatch, const unsigned char *pInWindow, const int nStartOffset, const int nEndOffset, unsigned char *pOutData, int nOutOffset, const int nMaxOutDataSize, int *nCurBitsOffset, int *nCurBitShift, int *nFollowsLiteral, int *nCurRepMatchOffset, const int nBlockFlags) {
+ int i;
+ int nRepMatchOffset = *nCurRepMatchOffset;
+ const int nMaxOffset = pCompressor->max_offset;
+
+ if (nBlockFlags & 1) {
+ if (nOutOffset < 0 || nOutOffset >= nMaxOutDataSize)
+ return -1;
+ pOutData[nOutOffset++] = pInWindow[nStartOffset];
+ *nFollowsLiteral = 1;
+ }
+
+ for (i = nStartOffset + ((nBlockFlags & 1) ? 1 : 0); i < nEndOffset; ) {
+ const apultra_final_match *pMatch = pBestMatch + i;
+
+ if (pMatch->length >= 2) {
+ int nMatchOffset = pMatch->offset;
+ int nMatchLen = pMatch->length;
+
+ if (nMatchOffset < MIN_OFFSET || nMatchOffset > nMaxOffset)
+ return -1;
+
+ if (nMatchOffset == nRepMatchOffset && *nFollowsLiteral) {
+ /* Rep-match */
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, TOKEN_CODE_LARGE_MATCH, TOKEN_SIZE_LARGE_MATCH, nCurBitsOffset, nCurBitShift);
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, 0 /* length of 2 encoded as gamma 2 */, 2, nCurBitsOffset, nCurBitShift);
+
+ /* The match length isn't encoded in the command, emit elias gamma value */
+ nOutOffset = apultra_write_gamma2_value(pOutData, nOutOffset, nMaxOutDataSize, nMatchLen, nCurBitsOffset, nCurBitShift);
+ if (nOutOffset < 0) return -1;
+
+ *nFollowsLiteral = 0;
+
+ pCompressor->stats.num_rep_matches++;
+ }
+ else {
+ if (nMatchLen <= 3 && nMatchOffset < 128) {
+ /* 7 bits offset + 1 bit length */
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, TOKEN_CODE_7BIT_MATCH, TOKEN_SIZE_7BIT_MATCH, nCurBitsOffset, nCurBitShift);
+
+ if (nOutOffset < 0 || nOutOffset >= nMaxOutDataSize)
+ return -1;
+ pOutData[nOutOffset++] = ((nMatchOffset) & 0x7f) << 1 | (nMatchLen - 2);
+
+ *nFollowsLiteral = 0;
+ nRepMatchOffset = nMatchOffset;
+
+ pCompressor->stats.num_7bit_matches++;
+ }
+ else {
+ /* 8+n bits offset */
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, TOKEN_CODE_LARGE_MATCH, TOKEN_SIZE_LARGE_MATCH, nCurBitsOffset, nCurBitShift);
+
+ if (nOutOffset < 0 || nOutOffset >= nMaxOutDataSize)
+ return -1;
+ if (*nFollowsLiteral)
+ nOutOffset = apultra_write_gamma2_value(pOutData, nOutOffset, nMaxOutDataSize, (nMatchOffset >> 8) + 3, nCurBitsOffset, nCurBitShift);
+ else
+ nOutOffset = apultra_write_gamma2_value(pOutData, nOutOffset, nMaxOutDataSize, (nMatchOffset >> 8) + 2, nCurBitsOffset, nCurBitShift);
+ pOutData[nOutOffset++] = nMatchOffset & 0xff;
+
+ /* The match length isn't encoded in the command, emit elias gamma value */
+
+ if (nMatchOffset < 128 || nMatchOffset >= MINMATCH4_OFFSET)
+ nOutOffset = apultra_write_gamma2_value(pOutData, nOutOffset, nMaxOutDataSize, nMatchLen - 2, nCurBitsOffset, nCurBitShift);
+ else if (nMatchOffset < MINMATCH3_OFFSET)
+ nOutOffset = apultra_write_gamma2_value(pOutData, nOutOffset, nMaxOutDataSize, nMatchLen, nCurBitsOffset, nCurBitShift);
+ else
+ nOutOffset = apultra_write_gamma2_value(pOutData, nOutOffset, nMaxOutDataSize, nMatchLen - 1, nCurBitsOffset, nCurBitShift);
+ if (nOutOffset < 0) return -1;
+
+ *nFollowsLiteral = 0;
+ nRepMatchOffset = nMatchOffset;
+
+ pCompressor->stats.num_variable_matches++;
+ }
+ }
+
+ if (nMatchOffset < pCompressor->stats.min_offset || pCompressor->stats.min_offset == -1)
+ pCompressor->stats.min_offset = nMatchOffset;
+ if (nMatchOffset > pCompressor->stats.max_offset)
+ pCompressor->stats.max_offset = nMatchOffset;
+ pCompressor->stats.total_offsets += (long long)nMatchOffset;
+
+ if (nMatchLen < pCompressor->stats.min_match_len || pCompressor->stats.min_match_len == -1)
+ pCompressor->stats.min_match_len = nMatchLen;
+ if (nMatchLen > pCompressor->stats.max_match_len)
+ pCompressor->stats.max_match_len = nMatchLen;
+ pCompressor->stats.total_match_lens += nMatchLen;
+ pCompressor->stats.match_divisor++;
+
+ if (nMatchOffset == 1) {
+ if (nMatchLen < pCompressor->stats.min_rle1_len || pCompressor->stats.min_rle1_len == -1)
+ pCompressor->stats.min_rle1_len = nMatchLen;
+ if (nMatchLen > pCompressor->stats.max_rle1_len)
+ pCompressor->stats.max_rle1_len = nMatchLen;
+ pCompressor->stats.total_rle1_lens += nMatchLen;
+ pCompressor->stats.rle1_divisor++;
+ }
+ else if (nMatchOffset == 2) {
+ if (nMatchLen < pCompressor->stats.min_rle2_len || pCompressor->stats.min_rle2_len == -1)
+ pCompressor->stats.min_rle2_len = nMatchLen;
+ if (nMatchLen > pCompressor->stats.max_rle2_len)
+ pCompressor->stats.max_rle2_len = nMatchLen;
+ pCompressor->stats.total_rle2_lens += nMatchLen;
+ pCompressor->stats.rle2_divisor++;
+ }
+
+ i += nMatchLen;
+
+ pCompressor->stats.commands_divisor++;
+ }
+ else if (pMatch->length == 1) {
+ int nMatchOffset = pMatch->offset;
+
+ /* 4 bits offset */
+
+ if (nMatchOffset < 0 || nMatchOffset > 15)
+ return -1;
+
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, TOKEN_CODE_4BIT_MATCH, TOKEN_SIZE_4BIT_MATCH, nCurBitsOffset, nCurBitShift);
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, nMatchOffset, 4, nCurBitsOffset, nCurBitShift);
+ if (nOutOffset < 0) return -1;
+
+ pCompressor->stats.num_4bit_matches++;
+ pCompressor->stats.commands_divisor++;
+
+ i++;
+ *nFollowsLiteral = 1;
+ }
+ else {
+ /* Literal */
+
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, 0 /* literal */, 1, nCurBitsOffset, nCurBitShift);
+
+ if (nOutOffset < 0 || nOutOffset >= nMaxOutDataSize)
+ return -1;
+ pOutData[nOutOffset++] = pInWindow[i];
+
+ pCompressor->stats.num_literals++;
+ pCompressor->stats.commands_divisor++;
+ i++;
+ *nFollowsLiteral = 1;
+ }
+
+ int nCurSafeDist = (i - nStartOffset) - nOutOffset;
+ if (nCurSafeDist >= 0 && pCompressor->stats.safe_dist < nCurSafeDist)
+ pCompressor->stats.safe_dist = nCurSafeDist;
+ }
+
+ if (nBlockFlags & 2) {
+ /* 8 bits offset */
+
+ nOutOffset = apultra_write_bits(pOutData, nOutOffset, nMaxOutDataSize, TOKEN_CODE_7BIT_MATCH, TOKEN_SIZE_7BIT_MATCH, nCurBitsOffset, nCurBitShift);
+
+ if (nOutOffset < 0 || nOutOffset >= nMaxOutDataSize)
+ return -1;
+ pOutData[nOutOffset++] = 0x00; /* Offset: EOD */
+ pCompressor->stats.num_eod++;
+ pCompressor->stats.commands_divisor++;
+
+ int nCurSafeDist = (i - nStartOffset) - nOutOffset;
+ if (nCurSafeDist >= 0 && pCompressor->stats.safe_dist < nCurSafeDist)
+ pCompressor->stats.safe_dist = nCurSafeDist;
+ }
+
+ *nCurRepMatchOffset = nRepMatchOffset;
+ return nOutOffset;
+}
+
+/**
+ * Select the most optimal matches, reduce the token count if possible, and then emit a block of compressed data
+ *
+ * @param pCompressor compression context
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param nPreviousBlockSize number of previously compressed bytes (or 0 for none)
+ * @param nInDataSize number of input bytes to compress
+ * @param pOutData pointer to output buffer
+ * @param nMaxOutDataSize maximum size of output buffer, in bytes
+ * @param nCurBitsOffset write index into output buffer, of current byte being filled with bits
+ * @param nCurBitShift bit shift count
+ * @param nCurFollowsLiteral non-zero if the next command to be issued follows a literal, 0 if not
+ * @param nCurRepMatchOffset starting rep offset for this block, updated after the block is compressed successfully
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ *
+ * @return size of compressed data in output buffer, or -1 if the data is uncompressible
+ */
+static int apultra_optimize_and_write_block(apultra_compressor *pCompressor, const unsigned char *pInWindow, const int nPreviousBlockSize, const int nInDataSize, unsigned char *pOutData, const int nMaxOutDataSize, int *nCurBitsOffset, int *nCurBitShift, int *nCurFollowsLiteral, int *nCurRepMatchOffset, const int nBlockFlags) {
+ int nOutOffset = 0;
+ const int nEndOffset = nPreviousBlockSize + nInDataSize;
+ const int nArrivalsPerPosition = pCompressor->max_arrivals;
+ int *rle_len = (int*)pCompressor->intervals /* reuse */;
+ int i, nPosition;
+
+ memset(pCompressor->best_match, 0, pCompressor->block_size * sizeof(apultra_final_match));
+
+ if ((nBlockFlags & 3) == 3) {
+ int *first_offset_for_byte = pCompressor->first_offset_for_byte;
+ int *next_offset_for_pos = pCompressor->next_offset_for_pos;
+
+ /* Supplement 2 and 3-byte matches */
+
+ memset(first_offset_for_byte, 0xff, sizeof(int) * 65536);
+ memset(next_offset_for_pos, 0xff, sizeof(int) * nInDataSize);
+
+ for (nPosition = nPreviousBlockSize; nPosition < (nEndOffset - 1); nPosition++) {
+ next_offset_for_pos[nPosition - nPreviousBlockSize] = first_offset_for_byte[((unsigned int)pInWindow[nPosition]) | (((unsigned int)pInWindow[nPosition + 1]) << 8)];
+ first_offset_for_byte[((unsigned int)pInWindow[nPosition]) | (((unsigned int)pInWindow[nPosition + 1]) << 8)] = nPosition;
+ }
+
+ for (nPosition = nPreviousBlockSize + 1; nPosition < (nEndOffset - 1); nPosition++) {
+ apultra_match *match = pCompressor->match + ((nPosition - nPreviousBlockSize) << MATCHES_PER_INDEX_SHIFT);
+ unsigned short *match_depth = pCompressor->match_depth + ((nPosition - nPreviousBlockSize) << MATCHES_PER_INDEX_SHIFT);
+ int m = 0, nInserted = 0;
+ int nMatchPos;
+
+ while (m < 15 && match[m].length)
+ m++;
+
+ for (nMatchPos = next_offset_for_pos[nPosition - nPreviousBlockSize]; m < 15 && nMatchPos >= 0; nMatchPos = next_offset_for_pos[nMatchPos - nPreviousBlockSize]) {
+ int nMatchOffset = nPosition - nMatchPos;
+
+ if (nMatchOffset <= pCompressor->max_offset) {
+ int nExistingMatchIdx;
+ int nAlreadyExists = 0;
+
+ for (nExistingMatchIdx = 0; nExistingMatchIdx < m; nExistingMatchIdx++) {
+ if (match[nExistingMatchIdx].offset == nMatchOffset ||
+ (match[nExistingMatchIdx].offset - (match_depth[nExistingMatchIdx] & 0x3fff)) == nMatchOffset) {
+ nAlreadyExists = 1;
+ break;
+ }
+ }
+
+ if (!nAlreadyExists) {
+ match[m].length = (nPosition < (nEndOffset - 2) && pInWindow[nMatchPos + 2] == pInWindow[nPosition + 2]) ? 3 : 2;
+ match[m].offset = nMatchOffset;
+ match_depth[m] = 0x4000;
+ m++;
+ nInserted++;
+ if (nInserted >= 6)
+ break;
+ }
+ }
+ else {
+ break;
+ }
+ }
+ }
+ }
+
+ i = 0;
+ while (i < nEndOffset) {
+ int nRangeStartIdx = i;
+ unsigned char c = pInWindow[nRangeStartIdx];
+ do {
+ i++;
+ }
+ while (i < nEndOffset && pInWindow[i] == c);
+ while (nRangeStartIdx < i) {
+ rle_len[nRangeStartIdx] = i - nRangeStartIdx;
+ nRangeStartIdx++;
+ }
+ }
+
+ apultra_optimize_forward(pCompressor, pInWindow, nPreviousBlockSize, nEndOffset, 1 /* nInsertForwardReps */, nCurRepMatchOffset, nBlockFlags, nArrivalsPerPosition);
+
+ if ((nBlockFlags & 3) == 3 && nArrivalsPerPosition == NARRIVALS_PER_POSITION_MAX) {
+ const int* next_offset_for_pos = pCompressor->next_offset_for_pos;
+ int* offset_cache = pCompressor->offset_cache;
+
+ /* Supplement matches further */
+
+ memset(offset_cache, 0xff, sizeof(int) * 2048);
+
+ for (nPosition = nPreviousBlockSize + 1; nPosition < (nEndOffset - 1); nPosition++) {
+ apultra_match* match = pCompressor->match + ((nPosition - nPreviousBlockSize) << MATCHES_PER_INDEX_SHIFT);
+
+ if (match[0].length < 8) {
+ unsigned short* match_depth = pCompressor->match_depth + ((nPosition - nPreviousBlockSize) << MATCHES_PER_INDEX_SHIFT);
+ int m = 0, nInserted = 0;
+ int nMatchPos;
+
+ while (m < 46 && match[m].length) {
+ offset_cache[match[m].offset & 2047] = nPosition;
+ offset_cache[(match[m].offset - (match_depth[m] & 0x3fff)) & 2047] = nPosition;
+ m++;
+ }
+
+ for (nMatchPos = next_offset_for_pos[nPosition - nPreviousBlockSize]; m < 46 && nMatchPos >= 0; nMatchPos = next_offset_for_pos[nMatchPos - nPreviousBlockSize]) {
+ int nMatchOffset = nPosition - nMatchPos;
+
+ if (nMatchOffset <= pCompressor->max_offset) {
+ int nAlreadyExists = 0;
+
+ if (offset_cache[nMatchOffset & 2047] == nPosition) {
+ int nExistingMatchIdx;
+
+ for (nExistingMatchIdx = 0; nExistingMatchIdx < m; nExistingMatchIdx++) {
+ if (match[nExistingMatchIdx].offset == nMatchOffset ||
+ (match[nExistingMatchIdx].offset - (match_depth[nExistingMatchIdx] & 0x3fff)) == nMatchOffset) {
+ nAlreadyExists = 1;
+
+ if (match_depth[nExistingMatchIdx] == 0x4000) {
+ int nMatchLen = 2;
+ while (nMatchLen < 16 && nPosition < (nEndOffset - nMatchLen) && pInWindow[nMatchPos + nMatchLen] == pInWindow[nPosition + nMatchLen])
+ nMatchLen++;
+ if (nMatchLen > (int)match[nExistingMatchIdx].length)
+ match[nExistingMatchIdx].length = nMatchLen;
+ }
+
+ break;
+ }
+ }
+ }
+
+ if (!nAlreadyExists) {
+ int nForwardPos = nPosition + 2 + 1;
+ int nGotMatch = 0;
+
+ while (nForwardPos >= nMatchOffset && (nForwardPos + 2) < nEndOffset && nForwardPos < (nPosition + 2 + 1 + 5)) {
+ if (!memcmp(pInWindow + nForwardPos, pInWindow + nForwardPos - nMatchOffset, 2)) {
+ nGotMatch = 1;
+ break;
+ }
+ nForwardPos++;
+ }
+
+ if (nGotMatch) {
+ int nMatchLen = 2;
+ while (nMatchLen < 16 && nPosition < (nEndOffset - nMatchLen) && pInWindow[nMatchPos + nMatchLen] == pInWindow[nPosition + nMatchLen])
+ nMatchLen++;
+ match[m].length = nMatchLen;
+ match[m].offset = nMatchOffset;
+ match_depth[m] = 0;
+ m++;
+
+ apultra_insert_forward_match(pCompressor, pInWindow, nPosition, nMatchOffset, nPreviousBlockSize, nEndOffset, nArrivalsPerPosition, 8);
+
+ nInserted++;
+ if (nInserted >= 18 || (nInserted >= 15 && m >= 38))
+ break;
+ }
+ }
+ }
+ else {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ /* Pick optimal matches */
+ apultra_optimize_forward(pCompressor, pInWindow, nPreviousBlockSize, nEndOffset, 0 /* nInsertForwardReps */, nCurRepMatchOffset, nBlockFlags, nArrivalsPerPosition);
+
+ /* Apply reduction and merge pass */
+ int nDidReduce;
+ int nPasses = 0;
+ do {
+ nDidReduce = apultra_reduce_commands(pCompressor, pInWindow, pCompressor->best_match - nPreviousBlockSize, nPreviousBlockSize, nEndOffset, nCurRepMatchOffset, nBlockFlags);
+ nPasses++;
+ } while (nDidReduce && nPasses < 20);
+
+ /* Write compressed block */
+
+ return apultra_write_block(pCompressor, pCompressor->best_match - nPreviousBlockSize, pInWindow, nPreviousBlockSize, nEndOffset, pOutData, nOutOffset, nMaxOutDataSize, nCurBitsOffset, nCurBitShift, nCurFollowsLiteral, nCurRepMatchOffset, nBlockFlags);
+}
+
+/* Forward declaration */
+static void apultra_compressor_destroy(apultra_compressor *pCompressor);
+
+/**
+ * Initialize compression context
+ *
+ * @param pCompressor compression context to initialize
+ * @param nBlockSize maximum size of input data (bytes to compress only)
+ * @param nMaxWindowSize maximum size of input data window (previously compressed bytes + bytes to compress)
+ * @param nMaxArrivals maximum number of arrivals per position
+ * @param nFlags compression flags
+ *
+ * @return 0 for success, non-zero for failure
+ */
+static int apultra_compressor_init(apultra_compressor *pCompressor, const int nBlockSize, const int nMaxWindowSize, const int nMaxArrivals, const int nFlags) {
+ int nResult;
+
+ nResult = divsufsort_init(&pCompressor->divsufsort_context);
+ pCompressor->intervals = NULL;
+ pCompressor->pos_data = NULL;
+ pCompressor->open_intervals = NULL;
+ pCompressor->match = NULL;
+ pCompressor->match_depth = NULL;
+ pCompressor->match1 = NULL;
+ pCompressor->best_match = NULL;
+ pCompressor->arrival = NULL;
+ pCompressor->first_offset_for_byte = NULL;
+ pCompressor->next_offset_for_pos = NULL;
+ pCompressor->offset_cache = NULL;
+ pCompressor->flags = nFlags;
+ pCompressor->block_size = nBlockSize;
+ pCompressor->max_arrivals = nMaxArrivals;
+
+ memset(&pCompressor->stats, 0, sizeof(pCompressor->stats));
+ pCompressor->stats.min_match_len = -1;
+ pCompressor->stats.min_offset = -1;
+ pCompressor->stats.min_rle1_len = -1;
+ pCompressor->stats.min_rle2_len = -1;
+
+ if (!nResult) {
+ pCompressor->intervals = (unsigned long long *)malloc(nMaxWindowSize * sizeof(unsigned long long));
+
+ if (pCompressor->intervals) {
+ pCompressor->pos_data = (unsigned long long *)malloc(nMaxWindowSize * sizeof(unsigned long long));
+
+ if (pCompressor->pos_data) {
+ pCompressor->open_intervals = (unsigned long long *)malloc((LCP_AND_TAG_MAX + 1) * sizeof(unsigned long long));
+
+ if (pCompressor->open_intervals) {
+ pCompressor->arrival = (apultra_arrival *)malloc((nBlockSize + 1) * nMaxArrivals * sizeof(apultra_arrival));
+
+ if (pCompressor->arrival) {
+ pCompressor->best_match = (apultra_final_match *)malloc(nBlockSize * sizeof(apultra_final_match));
+
+ if (pCompressor->best_match) {
+ pCompressor->match = (apultra_match *)malloc(nBlockSize * NMATCHES_PER_INDEX * sizeof(apultra_match));
+ if (pCompressor->match) {
+ pCompressor->match_depth = (unsigned short *)malloc(nBlockSize * NMATCHES_PER_INDEX * sizeof(unsigned short));
+ if (pCompressor->match_depth) {
+ pCompressor->match1 = (unsigned char *)malloc(nBlockSize * sizeof(unsigned char));
+ if (pCompressor->match1) {
+ pCompressor->first_offset_for_byte = (int*)malloc(65536 * sizeof(int));
+ if (pCompressor->first_offset_for_byte) {
+ pCompressor->next_offset_for_pos = (int*)malloc(nBlockSize * sizeof(int));
+ if (pCompressor->next_offset_for_pos) {
+ if (nMaxArrivals == NARRIVALS_PER_POSITION_MAX) {
+ pCompressor->offset_cache = (int*)malloc(2048 * sizeof(int));
+ if (pCompressor->offset_cache) {
+ return 0;
+ }
+ }
+ else {
+ return 0;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ apultra_compressor_destroy(pCompressor);
+ return 100;
+}
+
+/**
+ * Clean up compression context and free up any associated resources
+ *
+ * @param pCompressor compression context to clean up
+ */
+static void apultra_compressor_destroy(apultra_compressor *pCompressor) {
+ divsufsort_destroy(&pCompressor->divsufsort_context);
+
+ if (pCompressor->offset_cache) {
+ free(pCompressor->offset_cache);
+ pCompressor->offset_cache = NULL;
+ }
+
+ if (pCompressor->next_offset_for_pos) {
+ free(pCompressor->next_offset_for_pos);
+ pCompressor->next_offset_for_pos = NULL;
+ }
+
+ if (pCompressor->first_offset_for_byte) {
+ free(pCompressor->first_offset_for_byte);
+ pCompressor->first_offset_for_byte = NULL;
+ }
+
+ if (pCompressor->match1) {
+ free(pCompressor->match1);
+ pCompressor->match1 = NULL;
+ }
+
+ if (pCompressor->match_depth) {
+ free(pCompressor->match_depth);
+ pCompressor->match_depth = NULL;
+ }
+
+ if (pCompressor->match) {
+ free(pCompressor->match);
+ pCompressor->match = NULL;
+ }
+
+ if (pCompressor->arrival) {
+ free(pCompressor->arrival);
+ pCompressor->arrival = NULL;
+ }
+
+ if (pCompressor->best_match) {
+ free(pCompressor->best_match);
+ pCompressor->best_match = NULL;
+ }
+
+ if (pCompressor->open_intervals) {
+ free(pCompressor->open_intervals);
+ pCompressor->open_intervals = NULL;
+ }
+
+ if (pCompressor->pos_data) {
+ free(pCompressor->pos_data);
+ pCompressor->pos_data = NULL;
+ }
+
+ if (pCompressor->intervals) {
+ free(pCompressor->intervals);
+ pCompressor->intervals = NULL;
+ }
+}
+
+/**
+ * Compress one block of data
+ *
+ * @param pCompressor compression context
+ * @param pInWindow pointer to input data window (previously compressed bytes + bytes to compress)
+ * @param nPreviousBlockSize number of previously compressed bytes (or 0 for none)
+ * @param nInDataSize number of input bytes to compress
+ * @param pOutData pointer to output buffer
+ * @param nMaxOutDataSize maximum size of output buffer, in bytes
+ * @param nCurBitsOffset write index into output buffer, of current byte being filled with bits
+ * @param nCurBitShift bit shift count
+ * @param nCurFollowsLiteral non-zero if the next command to be issued follows a literal, 0 if not
+ * @param nCurRepMatchOffset starting rep offset for this block, updated after the block is compressed successfully
+ * @param nBlockFlags bit 0: 1 for first block, 0 otherwise; bit 1: 1 for last block, 0 otherwise
+ *
+ * @return size of compressed data in output buffer, or -1 if the data is uncompressible
+ */
+static int apultra_compressor_shrink_block(apultra_compressor *pCompressor, const unsigned char *pInWindow, const int nPreviousBlockSize, const int nInDataSize, unsigned char *pOutData, const int nMaxOutDataSize, int *nCurBitsOffset, int *nCurBitShift, int *nCurFollowsLiteral, int *nCurRepMatchOffset, const int nBlockFlags) {
+ int nCompressedSize;
+
+ if (apultra_build_suffix_array(pCompressor, pInWindow, nPreviousBlockSize + nInDataSize))
+ nCompressedSize = -1;
+ else {
+ if (nPreviousBlockSize) {
+ apultra_skip_matches(pCompressor, 0, nPreviousBlockSize);
+ }
+ apultra_find_all_matches(pCompressor, NMATCHES_PER_INDEX, nPreviousBlockSize, nPreviousBlockSize + nInDataSize, nBlockFlags);
+
+ nCompressedSize = apultra_optimize_and_write_block(pCompressor, pInWindow, nPreviousBlockSize, nInDataSize, pOutData, nMaxOutDataSize, nCurBitsOffset, nCurBitShift, nCurFollowsLiteral, nCurRepMatchOffset, nBlockFlags);
+ }
+
+ return nCompressedSize;
+}
+
+/**
+ * Get maximum compressed size of input(source) data
+ *
+ * @param nInputSize input(source) size in bytes
+ *
+ * @return maximum compressed size
+ */
+size_t apultra_get_max_compressed_size(size_t nInputSize) {
+ return ((nInputSize * 9 /* literals + literal bits */ + 1 /* match bit */ + 2 /* 7+1 command bits */ + 8 /* EOD offset bits */) + 7) >> 3;
+}
+
+/**
+ * Compress memory
+ *
+ * @param pInputData pointer to input(source) data to compress
+ * @param pOutBuffer buffer for compressed data
+ * @param nInputSize input(source) size in bytes
+ * @param nMaxOutBufferSize maximum capacity of compression buffer
+ * @param nFlags compression flags (set to 0)
+ * @param nMaxWindowSize maximum window size to use (0 for default)
+ * @param nDictionarySize size of dictionary in front of input data (0 for none)
+ * @param progress progress function, called after compressing each block, or NULL for none
+ * @param pStats pointer to compression stats that are filled if this function is successful, or NULL
+ *
+ * @return actual compressed size, or -1 for error
+ */
+size_t apultra_compress(const unsigned char *pInputData, unsigned char *pOutBuffer, size_t nInputSize, size_t nMaxOutBufferSize,
+ const unsigned int nFlags, size_t nMaxWindowSize, size_t nDictionarySize, void(*progress)(long long nOriginalSize, long long nCompressedSize), apultra_stats *pStats) {
+ apultra_compressor compressor;
+ size_t nOriginalSize = 0;
+ size_t nCompressedSize = 0L;
+ int nResult;
+ int nMaxArrivals = NARRIVALS_PER_POSITION_SMALL;
+ int nError = 0;
+ const int nBlockSize = (nInputSize < BLOCK_SIZE) ? ((nInputSize < 1024) ? 1024 : (int)nInputSize) : BLOCK_SIZE;
+ const int nMaxOutBlockSize = (int)apultra_get_max_compressed_size(nBlockSize);
+
+ if (nDictionarySize < nInputSize) {
+ int nInDataSize = (int)(nInputSize - nDictionarySize);
+ if (nInDataSize > nBlockSize)
+ nInDataSize = nBlockSize;
+
+ if (nInDataSize > 0 && (nDictionarySize + nInDataSize) >= nInputSize) {
+ if (nInputSize <= 262144)
+ nMaxArrivals = NARRIVALS_PER_POSITION_MAX;
+ else
+ nMaxArrivals = NARRIVALS_PER_POSITION_NORMAL;
+ }
+ }
+
+ nResult = apultra_compressor_init(&compressor, nBlockSize, nBlockSize * 2, nMaxArrivals, nFlags);
+ if (nResult != 0) {
+ return -1;
+ }
+
+ compressor.max_offset = nMaxWindowSize ? (int)nMaxWindowSize : MAX_OFFSET;
+
+ int nPreviousBlockSize = 0;
+ int nNumBlocks = 0;
+ int nCurBitsOffset = INT_MIN, nCurBitShift = 0, nCurFollowsLiteral = 0;
+ int nBlockFlags = 1;
+ int nCurRepMatchOffset = 0;
+
+ if (nDictionarySize) {
+ nOriginalSize = (int)nDictionarySize;
+ nPreviousBlockSize = (int)nDictionarySize;
+ }
+
+ while (nOriginalSize < nInputSize && !nError) {
+ int nInDataSize;
+
+ nInDataSize = (int)(nInputSize - nOriginalSize);
+ if (nInDataSize > nBlockSize)
+ nInDataSize = nBlockSize;
+
+ if (nInDataSize > 0) {
+ int nOutDataSize;
+ int nOutDataEnd = (int)(nMaxOutBufferSize - nCompressedSize);
+
+ if (nOutDataEnd > nMaxOutBlockSize)
+ nOutDataEnd = nMaxOutBlockSize;
+
+ if ((nOriginalSize + nInDataSize) >= nInputSize)
+ nBlockFlags |= 2;
+ nOutDataSize = apultra_compressor_shrink_block(&compressor, pInputData + nOriginalSize - nPreviousBlockSize, nPreviousBlockSize, nInDataSize, pOutBuffer + nCompressedSize, nOutDataEnd,
+ &nCurBitsOffset, &nCurBitShift, &nCurFollowsLiteral, &nCurRepMatchOffset, nBlockFlags);
+ nBlockFlags &= (~1);
+
+ if (nOutDataSize >= 0) {
+ /* Write compressed block */
+
+ if (!nError) {
+ nOriginalSize += nInDataSize;
+ nCompressedSize += nOutDataSize;
+ if (nCurBitsOffset != INT_MIN)
+ nCurBitsOffset -= nOutDataSize;
+ }
+ }
+ else {
+ nError = -1;
+ }
+
+ nPreviousBlockSize = nInDataSize;
+ nNumBlocks++;
+ }
+
+ if (!nError && nOriginalSize < nInputSize) {
+ if (progress)
+ progress(nOriginalSize, nCompressedSize);
+ }
+ }
+
+ if (progress)
+ progress(nOriginalSize, nCompressedSize);
+ if (pStats)
+ *pStats = compressor.stats;
+
+ apultra_compressor_destroy(&compressor);
+
+ if (nError) {
+ return -1;
+ }
+ else {
+ return nCompressedSize;
+ }
+}
diff --git a/tools/z64compress/src/enc/apultra/shrink.h b/tools/z64compress/src/enc/apultra/shrink.h new file mode 100644 index 0000000..7c9b548 --- /dev/null +++ b/tools/z64compress/src/enc/apultra/shrink.h @@ -0,0 +1,174 @@ +/*
+ * shrink.h - compressor definitions
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by cap by Sven-ke Dahl. https://github.com/svendahl/cap
+ * Also inspired by Charles Bloom's compression blog. http://cbloomrants.blogspot.com/
+ * With ideas from LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help and support from spke <zxintrospec@gmail.com>
+ *
+ */
+
+#ifndef _SHRINK_H
+#define _SHRINK_H
+
+#include "divsufsort.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define LCP_BITS 15
+#define TAG_BITS 4
+#define LCP_MAX ((1U<<(LCP_BITS - TAG_BITS)) - 1)
+#define LCP_AND_TAG_MAX ((1U<<LCP_BITS) - 1)
+#define LCP_SHIFT (63-LCP_BITS)
+#define LCP_MASK (((1ULL<<LCP_BITS) - 1) << LCP_SHIFT)
+#define POS_MASK ((1ULL<<LCP_SHIFT) - 1)
+#define VISITED_FLAG 0x8000000000000000ULL
+#define EXCL_VISITED_MASK 0x7fffffffffffffffULL
+
+#define NARRIVALS_PER_POSITION_MAX 62
+#define NARRIVALS_PER_POSITION_NORMAL 46
+#define NARRIVALS_PER_POSITION_SMALL 9
+
+#define NMATCHES_PER_INDEX 64
+#define MATCHES_PER_INDEX_SHIFT 6
+
+#define LEAVE_ALONE_MATCH_SIZE 120
+
+/** One match option */
+typedef struct _apultra_match {
+ unsigned int length:11;
+ unsigned int offset:21;
+} apultra_match;
+
+/** One finalized match */
+typedef struct _apultra_final_match {
+ int length;
+ int offset;
+} apultra_final_match;
+
+/** Forward arrival slot */
+typedef struct {
+ int cost;
+
+ unsigned int from_pos:21;
+ int from_slot:7;
+ unsigned int follows_literal:1;
+
+ unsigned int rep_offset:21;
+ unsigned int short_offset:4;
+ unsigned int rep_pos:21;
+ unsigned int match_len:11;
+
+ int score;
+} apultra_arrival;
+
+/** Compression statistics */
+typedef struct _apultra_stats {
+ int num_literals;
+ int num_4bit_matches;
+ int num_7bit_matches;
+ int num_variable_matches;
+ int num_rep_matches;
+ int num_eod;
+
+ int safe_dist;
+
+ int min_offset;
+ int max_offset;
+ long long total_offsets;
+
+ int min_match_len;
+ int max_match_len;
+ int total_match_lens;
+
+ int min_rle1_len;
+ int max_rle1_len;
+ int total_rle1_lens;
+
+ int min_rle2_len;
+ int max_rle2_len;
+ int total_rle2_lens;
+
+ int commands_divisor;
+ int match_divisor;
+ int rle1_divisor;
+ int rle2_divisor;
+} apultra_stats;
+
+/** Compression context */
+typedef struct _apultra_compressor {
+ divsufsort_ctx_t divsufsort_context;
+ unsigned long long *intervals;
+ unsigned long long *pos_data;
+ unsigned long long *open_intervals;
+ apultra_match *match;
+ unsigned short *match_depth;
+ unsigned char *match1;
+ apultra_final_match *best_match;
+ apultra_arrival *arrival;
+ int *first_offset_for_byte;
+ int *next_offset_for_pos;
+ int *offset_cache;
+ int flags;
+ int block_size;
+ int max_offset;
+ int max_arrivals;
+ apultra_stats stats;
+} apultra_compressor;
+
+/**
+ * Get maximum compressed size of input(source) data
+ *
+ * @param nInputSize input(source) size in bytes
+ *
+ * @return maximum compressed size
+ */
+size_t apultra_get_max_compressed_size(size_t nInputSize);
+
+/**
+ * Compress memory
+ *
+ * @param pInputData pointer to input(source) data to compress
+ * @param pOutBuffer buffer for compressed data
+ * @param nInputSize input(source) size in bytes
+ * @param nMaxOutBufferSize maximum capacity of compression buffer
+ * @param nFlags compression flags (set to 0)
+ * @param nMaxWindowSize maximum window size to use (0 for default)
+ * @param nDictionarySize size of dictionary in front of input data (0 for none)
+ * @param progress progress function, called after compressing each block, or NULL for none
+ * @param pStats pointer to compression stats that are filled if this function is successful, or NULL
+ *
+ * @return actual compressed size, or -1 for error
+ */
+size_t apultra_compress(const unsigned char *pInputData, unsigned char *pOutBuffer, size_t nInputSize, size_t nMaxOutBufferSize,
+ const unsigned int nFlags, size_t nMaxWindowSize, size_t nDictionarySize, void(*progress)(long long nOriginalSize, long long nCompressedSize), apultra_stats *pStats);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SHRINK_H */
diff --git a/tools/z64compress/src/enc/apultra/shrink_context.c b/tools/z64compress/src/enc/apultra/shrink_context.c new file mode 100644 index 0000000..ccf2d53 --- /dev/null +++ b/tools/z64compress/src/enc/apultra/shrink_context.c @@ -0,0 +1,39 @@ +/*
+ * shrink_context.c - compression context implementation
+ *
+ * Copyright (C) 2019 Emmanuel Marty
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+/*
+ * Uses the libdivsufsort library Copyright (c) 2003-2008 Yuta Mori
+ *
+ * Inspired by LZ4 by Yann Collet. https://github.com/lz4/lz4
+ * With help, ideas, optimizations and speed measurements by spke <zxintrospec@gmail.com>
+ * With ideas from Lizard by Przemyslaw Skibinski and Yann Collet. https://github.com/inikep/lizard
+ * Also with ideas from smallz4 by Stephan Brumme. https://create.stephan-brumme.com/smallz4/
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+//#include "shrink_context.h"
+//#include "shrink_block.h"
+#include "format.h"
+#include "matchfinder.h"
+//#include "lib.h"
diff --git a/tools/z64compress/src/enc/apultra/sssort.c b/tools/z64compress/src/enc/apultra/sssort.c new file mode 100644 index 0000000..4a18fd2 --- /dev/null +++ b/tools/z64compress/src/enc/apultra/sssort.c @@ -0,0 +1,815 @@ +/* + * sssort.c for libdivsufsort + * Copyright (c) 2003-2008 Yuta Mori All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "divsufsort_private.h" + + +/*- Private Functions -*/ + +static const saint_t lg_table[256]= { + -1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 +}; + +#if (SS_BLOCKSIZE == 0) || (SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE) + +static INLINE +saint_t +ss_ilg(saidx_t n) { +#if SS_BLOCKSIZE == 0 +# if defined(BUILD_DIVSUFSORT64) + return (n >> 32) ? + ((n >> 48) ? + ((n >> 56) ? + 56 + lg_table[(n >> 56) & 0xff] : + 48 + lg_table[(n >> 48) & 0xff]) : + ((n >> 40) ? + 40 + lg_table[(n >> 40) & 0xff] : + 32 + lg_table[(n >> 32) & 0xff])) : + ((n & 0xffff0000) ? + ((n & 0xff000000) ? + 24 + lg_table[(n >> 24) & 0xff] : + 16 + lg_table[(n >> 16) & 0xff]) : + ((n & 0x0000ff00) ? + 8 + lg_table[(n >> 8) & 0xff] : + 0 + lg_table[(n >> 0) & 0xff])); +# else + return (n & 0xffff0000) ? + ((n & 0xff000000) ? + 24 + lg_table[(n >> 24) & 0xff] : + 16 + lg_table[(n >> 16) & 0xff]) : + ((n & 0x0000ff00) ? + 8 + lg_table[(n >> 8) & 0xff] : + 0 + lg_table[(n >> 0) & 0xff]); +# endif +#elif SS_BLOCKSIZE < 256 + return lg_table[n]; +#else + return (n & 0xff00) ? + 8 + lg_table[(n >> 8) & 0xff] : + 0 + lg_table[(n >> 0) & 0xff]; +#endif +} + +#endif /* (SS_BLOCKSIZE == 0) || (SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE) */ + +#if SS_BLOCKSIZE != 0 + +static const saint_t sqq_table[256] = { + 0, 16, 22, 27, 32, 35, 39, 42, 45, 48, 50, 53, 55, 57, 59, 61, + 64, 65, 67, 69, 71, 73, 75, 76, 78, 80, 81, 83, 84, 86, 87, 89, + 90, 91, 93, 94, 96, 97, 98, 99, 101, 102, 103, 104, 106, 107, 108, 109, +110, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, +128, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, +143, 144, 144, 145, 146, 147, 148, 149, 150, 150, 151, 152, 153, 154, 155, 155, +156, 157, 158, 159, 160, 160, 161, 162, 163, 163, 164, 165, 166, 167, 167, 168, +169, 170, 170, 171, 172, 173, 173, 174, 175, 176, 176, 177, 178, 178, 179, 180, +181, 181, 182, 183, 183, 184, 185, 185, 186, 187, 187, 188, 189, 189, 190, 191, +192, 192, 193, 193, 194, 195, 195, 196, 197, 197, 198, 199, 199, 200, 201, 201, +202, 203, 203, 204, 204, 205, 206, 206, 207, 208, 208, 209, 209, 210, 211, 211, +212, 212, 213, 214, 214, 215, 215, 216, 217, 217, 218, 218, 219, 219, 220, 221, +221, 222, 222, 223, 224, 224, 225, 225, 226, 226, 227, 227, 228, 229, 229, 230, +230, 231, 231, 232, 232, 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, +239, 240, 240, 241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, +247, 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, 253, 253, 254, 254, 255 +}; + +static INLINE +saidx_t +ss_isqrt(saidx_t x) { + saidx_t y, e; + + if(x >= (SS_BLOCKSIZE * SS_BLOCKSIZE)) { return SS_BLOCKSIZE; } + e = (x & 0xffff0000) ? + ((x & 0xff000000) ? + 24 + lg_table[(x >> 24) & 0xff] : + 16 + lg_table[(x >> 16) & 0xff]) : + ((x & 0x0000ff00) ? + 8 + lg_table[(x >> 8) & 0xff] : + 0 + lg_table[(x >> 0) & 0xff]); + + if(e >= 16) { + y = sqq_table[x >> ((e - 6) - (e & 1))] << ((e >> 1) - 7); + if(e >= 24) { y = (y + 1 + x / y) >> 1; } + y = (y + 1 + x / y) >> 1; + } else if(e >= 8) { + y = (sqq_table[x >> ((e - 6) - (e & 1))] >> (7 - (e >> 1))) + 1; + } else { + return sqq_table[x] >> 4; + } + + return (x < (y * y)) ? y - 1 : y; +} + +#endif /* SS_BLOCKSIZE != 0 */ + + +/*---------------------------------------------------------------------------*/ + +/* Compares two suffixes. */ +static INLINE +saint_t +ss_compare(const sauchar_t *T, + const saidx_t *p1, const saidx_t *p2, + saidx_t depth) { + const sauchar_t *U1, *U2, *U1n, *U2n; + + for(U1 = T + depth + *p1, + U2 = T + depth + *p2, + U1n = T + *(p1 + 1) + 2, + U2n = T + *(p2 + 1) + 2; + (U1 < U1n) && (U2 < U2n) && (*U1 == *U2); + ++U1, ++U2) { + } + + return U1 < U1n ? + (U2 < U2n ? *U1 - *U2 : 1) : + (U2 < U2n ? -1 : 0); +} + + +/*---------------------------------------------------------------------------*/ + +#if (SS_BLOCKSIZE != 1) && (SS_INSERTIONSORT_THRESHOLD != 1) + +/* Insertionsort for small size groups */ +static +void +ss_insertionsort(const sauchar_t *T, const saidx_t *PA, + saidx_t *first, saidx_t *last, saidx_t depth) { + saidx_t *i, *j; + saidx_t t; + saint_t r; + + for(i = last - 2; first <= i; --i) { + for(t = *i, j = i + 1; 0 < (r = ss_compare(T, PA + t, PA + *j, depth));) { + do { *(j - 1) = *j; } while((++j < last) && (*j < 0)); + if(last <= j) { break; } + } + if(r == 0) { *j = ~*j; } + *(j - 1) = t; + } +} + +#endif /* (SS_BLOCKSIZE != 1) && (SS_INSERTIONSORT_THRESHOLD != 1) */ + + +/*---------------------------------------------------------------------------*/ + +#if (SS_BLOCKSIZE == 0) || (SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE) + +static INLINE +void +ss_fixdown(const sauchar_t *Td, const saidx_t *PA, + saidx_t *SA, saidx_t i, saidx_t size) { + saidx_t j, k; + saidx_t v; + saint_t c, d, e; + + for(v = SA[i], c = Td[PA[v]]; (j = 2 * i + 1) < size; SA[i] = SA[k], i = k) { + d = Td[PA[SA[k = j++]]]; + if(d < (e = Td[PA[SA[j]]])) { k = j; d = e; } + if(d <= c) { break; } + } + SA[i] = v; +} + +/* Simple top-down heapsort. */ +static +void +ss_heapsort(const sauchar_t *Td, const saidx_t *PA, saidx_t *SA, saidx_t size) { + saidx_t i, m; + saidx_t t; + + m = size; + if((size % 2) == 0) { + m--; + if(Td[PA[SA[m / 2]]] < Td[PA[SA[m]]]) { SWAP(SA[m], SA[m / 2]); } + } + + for(i = m / 2 - 1; 0 <= i; --i) { ss_fixdown(Td, PA, SA, i, m); } + if((size % 2) == 0) { SWAP(SA[0], SA[m]); ss_fixdown(Td, PA, SA, 0, m); } + for(i = m - 1; 0 < i; --i) { + t = SA[0], SA[0] = SA[i]; + ss_fixdown(Td, PA, SA, 0, i); + SA[i] = t; + } +} + + +/*---------------------------------------------------------------------------*/ + +/* Returns the median of three elements. */ +static INLINE +saidx_t * +ss_median3(const sauchar_t *Td, const saidx_t *PA, + saidx_t *v1, saidx_t *v2, saidx_t *v3) { + saidx_t *t; + if(Td[PA[*v1]] > Td[PA[*v2]]) { SWAP(v1, v2); } + if(Td[PA[*v2]] > Td[PA[*v3]]) { + if(Td[PA[*v1]] > Td[PA[*v3]]) { return v1; } + else { return v3; } + } + return v2; +} + +/* Returns the median of five elements. */ +static INLINE +saidx_t * +ss_median5(const sauchar_t *Td, const saidx_t *PA, + saidx_t *v1, saidx_t *v2, saidx_t *v3, saidx_t *v4, saidx_t *v5) { + saidx_t *t; + if(Td[PA[*v2]] > Td[PA[*v3]]) { SWAP(v2, v3); } + if(Td[PA[*v4]] > Td[PA[*v5]]) { SWAP(v4, v5); } + if(Td[PA[*v2]] > Td[PA[*v4]]) { SWAP(v2, v4); SWAP(v3, v5); } + if(Td[PA[*v1]] > Td[PA[*v3]]) { SWAP(v1, v3); } + if(Td[PA[*v1]] > Td[PA[*v4]]) { SWAP(v1, v4); SWAP(v3, v5); } + if(Td[PA[*v3]] > Td[PA[*v4]]) { return v4; } + return v3; +} + +/* Returns the pivot element. */ +static INLINE +saidx_t * +ss_pivot(const sauchar_t *Td, const saidx_t *PA, saidx_t *first, saidx_t *last) { + saidx_t *middle; + saidx_t t; + + t = last - first; + middle = first + t / 2; + + if(t <= 512) { + if(t <= 32) { + return ss_median3(Td, PA, first, middle, last - 1); + } else { + t >>= 2; + return ss_median5(Td, PA, first, first + t, middle, last - 1 - t, last - 1); + } + } + t >>= 3; + first = ss_median3(Td, PA, first, first + t, first + (t << 1)); + middle = ss_median3(Td, PA, middle - t, middle, middle + t); + last = ss_median3(Td, PA, last - 1 - (t << 1), last - 1 - t, last - 1); + return ss_median3(Td, PA, first, middle, last); +} + + +/*---------------------------------------------------------------------------*/ + +/* Binary partition for substrings. */ +static INLINE +saidx_t * +ss_partition(const saidx_t *PA, + saidx_t *first, saidx_t *last, saidx_t depth) { + saidx_t *a, *b; + saidx_t t; + for(a = first - 1, b = last;;) { + for(; (++a < b) && ((PA[*a] + depth) >= (PA[*a + 1] + 1));) { *a = ~*a; } + for(; (a < --b) && ((PA[*b] + depth) < (PA[*b + 1] + 1));) { } + if(b <= a) { break; } + t = ~*b; + *b = *a; + *a = t; + } + if(first < a) { *first = ~*first; } + return a; +} + +/* Multikey introsort for medium size groups. */ +static +void +ss_mintrosort(const sauchar_t *T, const saidx_t *PA, + saidx_t *first, saidx_t *last, + saidx_t depth) { +#define STACK_SIZE SS_MISORT_STACKSIZE + struct { saidx_t *a, *b, c; saint_t d; } stack[STACK_SIZE]; + const sauchar_t *Td; + saidx_t *a, *b, *c, *d, *e, *f; + saidx_t s, t; + saint_t ssize; + saint_t limit; + saint_t v, x = 0; + + for(ssize = 0, limit = ss_ilg(last - first);;) { + + if((last - first) <= SS_INSERTIONSORT_THRESHOLD) { +#if 1 < SS_INSERTIONSORT_THRESHOLD + if(1 < (last - first)) { ss_insertionsort(T, PA, first, last, depth); } +#endif + STACK_POP(first, last, depth, limit); + continue; + } + + Td = T + depth; + if(limit-- == 0) { ss_heapsort(Td, PA, first, last - first); } + if(limit < 0) { + for(a = first + 1, v = Td[PA[*first]]; a < last; ++a) { + if((x = Td[PA[*a]]) != v) { + if(1 < (a - first)) { break; } + v = x; + first = a; + } + } + if(Td[PA[*first] - 1] < v) { + first = ss_partition(PA, first, a, depth); + } + if((a - first) <= (last - a)) { + if(1 < (a - first)) { + STACK_PUSH(a, last, depth, -1); + last = a, depth += 1, limit = ss_ilg(a - first); + } else { + first = a, limit = -1; + } + } else { + if(1 < (last - a)) { + STACK_PUSH(first, a, depth + 1, ss_ilg(a - first)); + first = a, limit = -1; + } else { + last = a, depth += 1, limit = ss_ilg(a - first); + } + } + continue; + } + + /* choose pivot */ + a = ss_pivot(Td, PA, first, last); + v = Td[PA[*a]]; + SWAP(*first, *a); + + /* partition */ + for(b = first; (++b < last) && ((x = Td[PA[*b]]) == v);) { } + if(((a = b) < last) && (x < v)) { + for(; (++b < last) && ((x = Td[PA[*b]]) <= v);) { + if(x == v) { SWAP(*b, *a); ++a; } + } + } + for(c = last; (b < --c) && ((x = Td[PA[*c]]) == v);) { } + if((b < (d = c)) && (x > v)) { + for(; (b < --c) && ((x = Td[PA[*c]]) >= v);) { + if(x == v) { SWAP(*c, *d); --d; } + } + } + for(; b < c;) { + SWAP(*b, *c); + for(; (++b < c) && ((x = Td[PA[*b]]) <= v);) { + if(x == v) { SWAP(*b, *a); ++a; } + } + for(; (b < --c) && ((x = Td[PA[*c]]) >= v);) { + if(x == v) { SWAP(*c, *d); --d; } + } + } + + if(a <= d) { + c = b - 1; + + if((s = a - first) > (t = b - a)) { s = t; } + for(e = first, f = b - s; 0 < s; --s, ++e, ++f) { SWAP(*e, *f); } + if((s = d - c) > (t = last - d - 1)) { s = t; } + for(e = b, f = last - s; 0 < s; --s, ++e, ++f) { SWAP(*e, *f); } + + a = first + (b - a), c = last - (d - c); + b = (v <= Td[PA[*a] - 1]) ? a : ss_partition(PA, a, c, depth); + + if((a - first) <= (last - c)) { + if((last - c) <= (c - b)) { + STACK_PUSH(b, c, depth + 1, ss_ilg(c - b)); + STACK_PUSH(c, last, depth, limit); + last = a; + } else if((a - first) <= (c - b)) { + STACK_PUSH(c, last, depth, limit); + STACK_PUSH(b, c, depth + 1, ss_ilg(c - b)); + last = a; + } else { + STACK_PUSH(c, last, depth, limit); + STACK_PUSH(first, a, depth, limit); + first = b, last = c, depth += 1, limit = ss_ilg(c - b); + } + } else { + if((a - first) <= (c - b)) { + STACK_PUSH(b, c, depth + 1, ss_ilg(c - b)); + STACK_PUSH(first, a, depth, limit); + first = c; + } else if((last - c) <= (c - b)) { + STACK_PUSH(first, a, depth, limit); + STACK_PUSH(b, c, depth + 1, ss_ilg(c - b)); + first = c; + } else { + STACK_PUSH(first, a, depth, limit); + STACK_PUSH(c, last, depth, limit); + first = b, last = c, depth += 1, limit = ss_ilg(c - b); + } + } + } else { + limit += 1; + if(Td[PA[*first] - 1] < v) { + first = ss_partition(PA, first, last, depth); + limit = ss_ilg(last - first); + } + depth += 1; + } + } +#undef STACK_SIZE +} + +#endif /* (SS_BLOCKSIZE == 0) || (SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE) */ + + +/*---------------------------------------------------------------------------*/ + +#if SS_BLOCKSIZE != 0 + +static INLINE +void +ss_blockswap(saidx_t *a, saidx_t *b, saidx_t n) { + saidx_t t; + for(; 0 < n; --n, ++a, ++b) { + t = *a, *a = *b, *b = t; + } +} + +static INLINE +void +ss_rotate(saidx_t *first, saidx_t *middle, saidx_t *last) { + saidx_t *a, *b, t; + saidx_t l, r; + l = middle - first, r = last - middle; + for(; (0 < l) && (0 < r);) { + if(l == r) { ss_blockswap(first, middle, l); break; } + if(l < r) { + a = last - 1, b = middle - 1; + t = *a; + do { + *a-- = *b, *b-- = *a; + if(b < first) { + *a = t; + last = a; + if((r -= l + 1) <= l) { break; } + a -= 1, b = middle - 1; + t = *a; + } + } while(1); + } else { + a = first, b = middle; + t = *a; + do { + *a++ = *b, *b++ = *a; + if(last <= b) { + *a = t; + first = a + 1; + if((l -= r + 1) <= r) { break; } + a += 1, b = middle; + t = *a; + } + } while(1); + } + } +} + + +/*---------------------------------------------------------------------------*/ + +static +void +ss_inplacemerge(const sauchar_t *T, const saidx_t *PA, + saidx_t *first, saidx_t *middle, saidx_t *last, + saidx_t depth) { + const saidx_t *p; + saidx_t *a, *b; + saidx_t len, half; + saint_t q, r; + saint_t x; + + for(;;) { + if(*(last - 1) < 0) { x = 1; p = PA + ~*(last - 1); } + else { x = 0; p = PA + *(last - 1); } + for(a = first, len = middle - first, half = len >> 1, r = -1; + 0 < len; + len = half, half >>= 1) { + b = a + half; + q = ss_compare(T, PA + ((0 <= *b) ? *b : ~*b), p, depth); + if(q < 0) { + a = b + 1; + half -= (len & 1) ^ 1; + } else { + r = q; + } + } + if(a < middle) { + if(r == 0) { *a = ~*a; } + ss_rotate(a, middle, last); + last -= middle - a; + middle = a; + if(first == middle) { break; } + } + --last; + if(x != 0) { while(*--last < 0) { } } + if(middle == last) { break; } + } +} + + +/*---------------------------------------------------------------------------*/ + +/* Merge-forward with internal buffer. */ +static +void +ss_mergeforward(const sauchar_t *T, const saidx_t *PA, + saidx_t *first, saidx_t *middle, saidx_t *last, + saidx_t *buf, saidx_t depth) { + saidx_t *a, *b, *c, *bufend; + saidx_t t; + saint_t r; + + bufend = buf + (middle - first) - 1; + ss_blockswap(buf, first, middle - first); + + for(t = *(a = first), b = buf, c = middle;;) { + r = ss_compare(T, PA + *b, PA + *c, depth); + if(r < 0) { + do { + *a++ = *b; + if(bufend <= b) { *bufend = t; return; } + *b++ = *a; + } while(*b < 0); + } else if(r > 0) { + do { + *a++ = *c, *c++ = *a; + if(last <= c) { + while(b < bufend) { *a++ = *b, *b++ = *a; } + *a = *b, *b = t; + return; + } + } while(*c < 0); + } else { + *c = ~*c; + do { + *a++ = *b; + if(bufend <= b) { *bufend = t; return; } + *b++ = *a; + } while(*b < 0); + + do { + *a++ = *c, *c++ = *a; + if(last <= c) { + while(b < bufend) { *a++ = *b, *b++ = *a; } + *a = *b, *b = t; + return; + } + } while(*c < 0); + } + } +} + +/* Merge-backward with internal buffer. */ +static +void +ss_mergebackward(const sauchar_t *T, const saidx_t *PA, + saidx_t *first, saidx_t *middle, saidx_t *last, + saidx_t *buf, saidx_t depth) { + const saidx_t *p1, *p2; + saidx_t *a, *b, *c, *bufend; + saidx_t t; + saint_t r; + saint_t x; + + bufend = buf + (last - middle) - 1; + ss_blockswap(buf, middle, last - middle); + + x = 0; + if(*bufend < 0) { p1 = PA + ~*bufend; x |= 1; } + else { p1 = PA + *bufend; } + if(*(middle - 1) < 0) { p2 = PA + ~*(middle - 1); x |= 2; } + else { p2 = PA + *(middle - 1); } + for(t = *(a = last - 1), b = bufend, c = middle - 1;;) { + r = ss_compare(T, p1, p2, depth); + if(0 < r) { + if(x & 1) { do { *a-- = *b, *b-- = *a; } while(*b < 0); x ^= 1; } + *a-- = *b; + if(b <= buf) { *buf = t; break; } + *b-- = *a; + if(*b < 0) { p1 = PA + ~*b; x |= 1; } + else { p1 = PA + *b; } + } else if(r < 0) { + if(x & 2) { do { *a-- = *c, *c-- = *a; } while(*c < 0); x ^= 2; } + *a-- = *c, *c-- = *a; + if(c < first) { + while(buf < b) { *a-- = *b, *b-- = *a; } + *a = *b, *b = t; + break; + } + if(*c < 0) { p2 = PA + ~*c; x |= 2; } + else { p2 = PA + *c; } + } else { + if(x & 1) { do { *a-- = *b, *b-- = *a; } while(*b < 0); x ^= 1; } + *a-- = ~*b; + if(b <= buf) { *buf = t; break; } + *b-- = *a; + if(x & 2) { do { *a-- = *c, *c-- = *a; } while(*c < 0); x ^= 2; } + *a-- = *c, *c-- = *a; + if(c < first) { + while(buf < b) { *a-- = *b, *b-- = *a; } + *a = *b, *b = t; + break; + } + if(*b < 0) { p1 = PA + ~*b; x |= 1; } + else { p1 = PA + *b; } + if(*c < 0) { p2 = PA + ~*c; x |= 2; } + else { p2 = PA + *c; } + } + } +} + +/* D&C based merge. */ +static +void +ss_swapmerge(const sauchar_t *T, const saidx_t *PA, + saidx_t *first, saidx_t *middle, saidx_t *last, + saidx_t *buf, saidx_t bufsize, saidx_t depth) { +#define STACK_SIZE SS_SMERGE_STACKSIZE +#define GETIDX(a) ((0 <= (a)) ? (a) : (~(a))) +#define MERGE_CHECK(a, b, c)\ + do {\ + if(((c) & 1) ||\ + (((c) & 2) && (ss_compare(T, PA + GETIDX(*((a) - 1)), PA + *(a), depth) == 0))) {\ + *(a) = ~*(a);\ + }\ + if(((c) & 4) && ((ss_compare(T, PA + GETIDX(*((b) - 1)), PA + *(b), depth) == 0))) {\ + *(b) = ~*(b);\ + }\ + } while(0) + struct { saidx_t *a, *b, *c; saint_t d; } stack[STACK_SIZE]; + saidx_t *l, *r, *lm, *rm; + saidx_t m, len, half; + saint_t ssize; + saint_t check, next; + + for(check = 0, ssize = 0;;) { + if((last - middle) <= bufsize) { + if((first < middle) && (middle < last)) { + ss_mergebackward(T, PA, first, middle, last, buf, depth); + } + MERGE_CHECK(first, last, check); + STACK_POP(first, middle, last, check); + continue; + } + + if((middle - first) <= bufsize) { + if(first < middle) { + ss_mergeforward(T, PA, first, middle, last, buf, depth); + } + MERGE_CHECK(first, last, check); + STACK_POP(first, middle, last, check); + continue; + } + + for(m = 0, len = MIN(middle - first, last - middle), half = len >> 1; + 0 < len; + len = half, half >>= 1) { + if(ss_compare(T, PA + GETIDX(*(middle + m + half)), + PA + GETIDX(*(middle - m - half - 1)), depth) < 0) { + m += half + 1; + half -= (len & 1) ^ 1; + } + } + + if(0 < m) { + lm = middle - m, rm = middle + m; + ss_blockswap(lm, middle, m); + l = r = middle, next = 0; + if(rm < last) { + if(*rm < 0) { + *rm = ~*rm; + if(first < lm) { for(; *--l < 0;) { } next |= 4; } + next |= 1; + } else if(first < lm) { + for(; *r < 0; ++r) { } + next |= 2; + } + } + + if((l - first) <= (last - r)) { + STACK_PUSH(r, rm, last, (next & 3) | (check & 4)); + middle = lm, last = l, check = (check & 3) | (next & 4); + } else { + if((next & 2) && (r == middle)) { next ^= 6; } + STACK_PUSH(first, lm, l, (check & 3) | (next & 4)); + first = r, middle = rm, check = (next & 3) | (check & 4); + } + } else { + if(ss_compare(T, PA + GETIDX(*(middle - 1)), PA + *middle, depth) == 0) { + *middle = ~*middle; + } + MERGE_CHECK(first, last, check); + STACK_POP(first, middle, last, check); + } + } +#undef STACK_SIZE +} + +#endif /* SS_BLOCKSIZE != 0 */ + + +/*---------------------------------------------------------------------------*/ + +/*- Function -*/ + +/* Substring sort */ +void +sssort(const sauchar_t *T, const saidx_t *PA, + saidx_t *first, saidx_t *last, + saidx_t *buf, saidx_t bufsize, + saidx_t depth, saidx_t n, saint_t lastsuffix) { + saidx_t *a; +#if SS_BLOCKSIZE != 0 + saidx_t *b, *middle, *curbuf; + saidx_t j, k, curbufsize, limit; +#endif + saidx_t i; + + if(lastsuffix != 0) { ++first; } + +#if SS_BLOCKSIZE == 0 + ss_mintrosort(T, PA, first, last, depth); +#else + if((bufsize < SS_BLOCKSIZE) && + (bufsize < (last - first)) && + (bufsize < (limit = ss_isqrt(last - first)))) { + if(SS_BLOCKSIZE < limit) { limit = SS_BLOCKSIZE; } + buf = middle = last - limit, bufsize = limit; + } else { + middle = last, limit = 0; + } + for(a = first, i = 0; SS_BLOCKSIZE < (middle - a); a += SS_BLOCKSIZE, ++i) { +#if SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE + ss_mintrosort(T, PA, a, a + SS_BLOCKSIZE, depth); +#elif 1 < SS_BLOCKSIZE + ss_insertionsort(T, PA, a, a + SS_BLOCKSIZE, depth); +#endif + curbufsize = last - (a + SS_BLOCKSIZE); + curbuf = a + SS_BLOCKSIZE; + if(curbufsize <= bufsize) { curbufsize = bufsize, curbuf = buf; } + for(b = a, k = SS_BLOCKSIZE, j = i; j & 1; b -= k, k <<= 1, j >>= 1) { + ss_swapmerge(T, PA, b - k, b, b + k, curbuf, curbufsize, depth); + } + } +#if SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE + ss_mintrosort(T, PA, a, middle, depth); +#elif 1 < SS_BLOCKSIZE + ss_insertionsort(T, PA, a, middle, depth); +#endif + for(k = SS_BLOCKSIZE; i != 0; k <<= 1, i >>= 1) { + if(i & 1) { + ss_swapmerge(T, PA, a - k, a, middle, buf, bufsize, depth); + a -= k; + } + } + if(limit != 0) { +#if SS_INSERTIONSORT_THRESHOLD < SS_BLOCKSIZE + ss_mintrosort(T, PA, middle, last, depth); +#elif 1 < SS_BLOCKSIZE + ss_insertionsort(T, PA, middle, last, depth); +#endif + ss_inplacemerge(T, PA, first, middle, last, depth); + } +#endif + + if(lastsuffix != 0) { + /* Insert last type B* suffix. */ + saidx_t PAi[2]; PAi[0] = PA[*(first - 1)], PAi[1] = n - 2; + for(a = first, i = *(first - 1); + (a < last) && ((*a < 0) || (0 < ss_compare(T, &(PAi[0]), PA + *a, depth))); + ++a) { + *(a - 1) = *a; + } + *(a - 1) = i; + } +} diff --git a/tools/z64compress/src/enc/apultra/trsort.c b/tools/z64compress/src/enc/apultra/trsort.c new file mode 100644 index 0000000..6fe3e67 --- /dev/null +++ b/tools/z64compress/src/enc/apultra/trsort.c @@ -0,0 +1,586 @@ +/* + * trsort.c for libdivsufsort + * Copyright (c) 2003-2008 Yuta Mori All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "divsufsort_private.h" + + +/*- Private Functions -*/ + +static const saint_t lg_table[256]= { + -1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 +}; + +static INLINE +saint_t +tr_ilg(saidx_t n) { +#if defined(BUILD_DIVSUFSORT64) + return (n >> 32) ? + ((n >> 48) ? + ((n >> 56) ? + 56 + lg_table[(n >> 56) & 0xff] : + 48 + lg_table[(n >> 48) & 0xff]) : + ((n >> 40) ? + 40 + lg_table[(n >> 40) & 0xff] : + 32 + lg_table[(n >> 32) & 0xff])) : + ((n & 0xffff0000) ? + ((n & 0xff000000) ? + 24 + lg_table[(n >> 24) & 0xff] : + 16 + lg_table[(n >> 16) & 0xff]) : + ((n & 0x0000ff00) ? + 8 + lg_table[(n >> 8) & 0xff] : + 0 + lg_table[(n >> 0) & 0xff])); +#else + return (n & 0xffff0000) ? + ((n & 0xff000000) ? + 24 + lg_table[(n >> 24) & 0xff] : + 16 + lg_table[(n >> 16) & 0xff]) : + ((n & 0x0000ff00) ? + 8 + lg_table[(n >> 8) & 0xff] : + 0 + lg_table[(n >> 0) & 0xff]); +#endif +} + + +/*---------------------------------------------------------------------------*/ + +/* Simple insertionsort for small size groups. */ +static +void +tr_insertionsort(const saidx_t *ISAd, saidx_t *first, saidx_t *last) { + saidx_t *a, *b; + saidx_t t, r; + + for(a = first + 1; a < last; ++a) { + for(t = *a, b = a - 1; 0 > (r = ISAd[t] - ISAd[*b]);) { + do { *(b + 1) = *b; } while((first <= --b) && (*b < 0)); + if(b < first) { break; } + } + if(r == 0) { *b = ~*b; } + *(b + 1) = t; + } +} + + +/*---------------------------------------------------------------------------*/ + +static INLINE +void +tr_fixdown(const saidx_t *ISAd, saidx_t *SA, saidx_t i, saidx_t size) { + saidx_t j, k; + saidx_t v; + saidx_t c, d, e; + + for(v = SA[i], c = ISAd[v]; (j = 2 * i + 1) < size; SA[i] = SA[k], i = k) { + d = ISAd[SA[k = j++]]; + if(d < (e = ISAd[SA[j]])) { k = j; d = e; } + if(d <= c) { break; } + } + SA[i] = v; +} + +/* Simple top-down heapsort. */ +static +void +tr_heapsort(const saidx_t *ISAd, saidx_t *SA, saidx_t size) { + saidx_t i, m; + saidx_t t; + + m = size; + if((size % 2) == 0) { + m--; + if(ISAd[SA[m / 2]] < ISAd[SA[m]]) { SWAP(SA[m], SA[m / 2]); } + } + + for(i = m / 2 - 1; 0 <= i; --i) { tr_fixdown(ISAd, SA, i, m); } + if((size % 2) == 0) { SWAP(SA[0], SA[m]); tr_fixdown(ISAd, SA, 0, m); } + for(i = m - 1; 0 < i; --i) { + t = SA[0], SA[0] = SA[i]; + tr_fixdown(ISAd, SA, 0, i); + SA[i] = t; + } +} + + +/*---------------------------------------------------------------------------*/ + +/* Returns the median of three elements. */ +static INLINE +saidx_t * +tr_median3(const saidx_t *ISAd, saidx_t *v1, saidx_t *v2, saidx_t *v3) { + saidx_t *t; + if(ISAd[*v1] > ISAd[*v2]) { SWAP(v1, v2); } + if(ISAd[*v2] > ISAd[*v3]) { + if(ISAd[*v1] > ISAd[*v3]) { return v1; } + else { return v3; } + } + return v2; +} + +/* Returns the median of five elements. */ +static INLINE +saidx_t * +tr_median5(const saidx_t *ISAd, + saidx_t *v1, saidx_t *v2, saidx_t *v3, saidx_t *v4, saidx_t *v5) { + saidx_t *t; + if(ISAd[*v2] > ISAd[*v3]) { SWAP(v2, v3); } + if(ISAd[*v4] > ISAd[*v5]) { SWAP(v4, v5); } + if(ISAd[*v2] > ISAd[*v4]) { SWAP(v2, v4); SWAP(v3, v5); } + if(ISAd[*v1] > ISAd[*v3]) { SWAP(v1, v3); } + if(ISAd[*v1] > ISAd[*v4]) { SWAP(v1, v4); SWAP(v3, v5); } + if(ISAd[*v3] > ISAd[*v4]) { return v4; } + return v3; +} + +/* Returns the pivot element. */ +static INLINE +saidx_t * +tr_pivot(const saidx_t *ISAd, saidx_t *first, saidx_t *last) { + saidx_t *middle; + saidx_t t; + + t = last - first; + middle = first + t / 2; + + if(t <= 512) { + if(t <= 32) { + return tr_median3(ISAd, first, middle, last - 1); + } else { + t >>= 2; + return tr_median5(ISAd, first, first + t, middle, last - 1 - t, last - 1); + } + } + t >>= 3; + first = tr_median3(ISAd, first, first + t, first + (t << 1)); + middle = tr_median3(ISAd, middle - t, middle, middle + t); + last = tr_median3(ISAd, last - 1 - (t << 1), last - 1 - t, last - 1); + return tr_median3(ISAd, first, middle, last); +} + + +/*---------------------------------------------------------------------------*/ + +typedef struct _trbudget_t trbudget_t; +struct _trbudget_t { + saidx_t chance; + saidx_t remain; + saidx_t incval; + saidx_t count; +}; + +static INLINE +void +trbudget_init(trbudget_t *budget, saidx_t chance, saidx_t incval) { + budget->chance = chance; + budget->remain = budget->incval = incval; +} + +static INLINE +saint_t +trbudget_check(trbudget_t *budget, saidx_t size) { + if(size <= budget->remain) { budget->remain -= size; return 1; } + if(budget->chance == 0) { budget->count += size; return 0; } + budget->remain += budget->incval - size; + budget->chance -= 1; + return 1; +} + + +/*---------------------------------------------------------------------------*/ + +static INLINE +void +tr_partition(const saidx_t *ISAd, + saidx_t *first, saidx_t *middle, saidx_t *last, + saidx_t **pa, saidx_t **pb, saidx_t v) { + saidx_t *a, *b, *c, *d, *e, *f; + saidx_t t, s; + saidx_t x = 0; + + for(b = middle - 1; (++b < last) && ((x = ISAd[*b]) == v);) { } + if(((a = b) < last) && (x < v)) { + for(; (++b < last) && ((x = ISAd[*b]) <= v);) { + if(x == v) { SWAP(*b, *a); ++a; } + } + } + for(c = last; (b < --c) && ((x = ISAd[*c]) == v);) { } + if((b < (d = c)) && (x > v)) { + for(; (b < --c) && ((x = ISAd[*c]) >= v);) { + if(x == v) { SWAP(*c, *d); --d; } + } + } + for(; b < c;) { + SWAP(*b, *c); + for(; (++b < c) && ((x = ISAd[*b]) <= v);) { + if(x == v) { SWAP(*b, *a); ++a; } + } + for(; (b < --c) && ((x = ISAd[*c]) >= v);) { + if(x == v) { SWAP(*c, *d); --d; } + } + } + + if(a <= d) { + c = b - 1; + if((s = a - first) > (t = b - a)) { s = t; } + for(e = first, f = b - s; 0 < s; --s, ++e, ++f) { SWAP(*e, *f); } + if((s = d - c) > (t = last - d - 1)) { s = t; } + for(e = b, f = last - s; 0 < s; --s, ++e, ++f) { SWAP(*e, *f); } + first += (b - a), last -= (d - c); + } + *pa = first, *pb = last; +} + +static +void +tr_copy(saidx_t *ISA, const saidx_t *SA, + saidx_t *first, saidx_t *a, saidx_t *b, saidx_t *last, + saidx_t depth) { + /* sort suffixes of middle partition + by using sorted order of suffixes of left and right partition. */ + saidx_t *c, *d, *e; + saidx_t s, v; + + v = b - SA - 1; + for(c = first, d = a - 1; c <= d; ++c) { + if((0 <= (s = *c - depth)) && (ISA[s] == v)) { + *++d = s; + ISA[s] = d - SA; + } + } + for(c = last - 1, e = d + 1, d = b; e < d; --c) { + if((0 <= (s = *c - depth)) && (ISA[s] == v)) { + *--d = s; + ISA[s] = d - SA; + } + } +} + +static +void +tr_partialcopy(saidx_t *ISA, const saidx_t *SA, + saidx_t *first, saidx_t *a, saidx_t *b, saidx_t *last, + saidx_t depth) { + saidx_t *c, *d, *e; + saidx_t s, v; + saidx_t rank, lastrank, newrank = -1; + + v = b - SA - 1; + lastrank = -1; + for(c = first, d = a - 1; c <= d; ++c) { + if((0 <= (s = *c - depth)) && (ISA[s] == v)) { + *++d = s; + rank = ISA[s + depth]; + if(lastrank != rank) { lastrank = rank; newrank = d - SA; } + ISA[s] = newrank; + } + } + + lastrank = -1; + for(e = d; first <= e; --e) { + rank = ISA[*e]; + if(lastrank != rank) { lastrank = rank; newrank = e - SA; } + if(newrank != rank) { ISA[*e] = newrank; } + } + + lastrank = -1; + for(c = last - 1, e = d + 1, d = b; e < d; --c) { + if((0 <= (s = *c - depth)) && (ISA[s] == v)) { + *--d = s; + rank = ISA[s + depth]; + if(lastrank != rank) { lastrank = rank; newrank = d - SA; } + ISA[s] = newrank; + } + } +} + +static +void +tr_introsort(saidx_t *ISA, const saidx_t *ISAd, + saidx_t *SA, saidx_t *first, saidx_t *last, + trbudget_t *budget) { +#define STACK_SIZE TR_STACKSIZE + struct { const saidx_t *a; saidx_t *b, *c; saint_t d, e; }stack[STACK_SIZE]; + saidx_t *a, *b, *c; + saidx_t t; + saidx_t v, x = 0; + saidx_t incr = ISAd - ISA; + saint_t limit, next; + saint_t ssize, trlink = -1; + + for(ssize = 0, limit = tr_ilg(last - first);;) { + + if(limit < 0) { + if(limit == -1) { + /* tandem repeat partition */ + tr_partition(ISAd - incr, first, first, last, &a, &b, last - SA - 1); + + /* update ranks */ + if(a < last) { + for(c = first, v = a - SA - 1; c < a; ++c) { ISA[*c] = v; } + } + if(b < last) { + for(c = a, v = b - SA - 1; c < b; ++c) { ISA[*c] = v; } + } + + /* push */ + if(1 < (b - a)) { + STACK_PUSH5(NULL, a, b, 0, 0); + STACK_PUSH5(ISAd - incr, first, last, -2, trlink); + trlink = ssize - 2; + } + if((a - first) <= (last - b)) { + if(1 < (a - first)) { + STACK_PUSH5(ISAd, b, last, tr_ilg(last - b), trlink); + last = a, limit = tr_ilg(a - first); + } else if(1 < (last - b)) { + first = b, limit = tr_ilg(last - b); + } else { + STACK_POP5(ISAd, first, last, limit, trlink); + } + } else { + if(1 < (last - b)) { + STACK_PUSH5(ISAd, first, a, tr_ilg(a - first), trlink); + first = b, limit = tr_ilg(last - b); + } else if(1 < (a - first)) { + last = a, limit = tr_ilg(a - first); + } else { + STACK_POP5(ISAd, first, last, limit, trlink); + } + } + } else if(limit == -2) { + /* tandem repeat copy */ + a = stack[--ssize].b, b = stack[ssize].c; + if(stack[ssize].d == 0) { + tr_copy(ISA, SA, first, a, b, last, ISAd - ISA); + } else { + if(0 <= trlink) { stack[trlink].d = -1; } + tr_partialcopy(ISA, SA, first, a, b, last, ISAd - ISA); + } + STACK_POP5(ISAd, first, last, limit, trlink); + } else { + /* sorted partition */ + if(0 <= *first) { + a = first; + do { ISA[*a] = a - SA; } while((++a < last) && (0 <= *a)); + first = a; + } + if(first < last) { + a = first; do { *a = ~*a; } while(*++a < 0); + next = (ISA[*a] != ISAd[*a]) ? tr_ilg(a - first + 1) : -1; + if(++a < last) { for(b = first, v = a - SA - 1; b < a; ++b) { ISA[*b] = v; } } + + /* push */ + if(trbudget_check(budget, a - first)) { + if((a - first) <= (last - a)) { + STACK_PUSH5(ISAd, a, last, -3, trlink); + ISAd += incr, last = a, limit = next; + } else { + if(1 < (last - a)) { + STACK_PUSH5(ISAd + incr, first, a, next, trlink); + first = a, limit = -3; + } else { + ISAd += incr, last = a, limit = next; + } + } + } else { + if(0 <= trlink) { stack[trlink].d = -1; } + if(1 < (last - a)) { + first = a, limit = -3; + } else { + STACK_POP5(ISAd, first, last, limit, trlink); + } + } + } else { + STACK_POP5(ISAd, first, last, limit, trlink); + } + } + continue; + } + + if((last - first) <= TR_INSERTIONSORT_THRESHOLD) { + tr_insertionsort(ISAd, first, last); + limit = -3; + continue; + } + + if(limit-- == 0) { + tr_heapsort(ISAd, first, last - first); + for(a = last - 1; first < a; a = b) { + for(x = ISAd[*a], b = a - 1; (first <= b) && (ISAd[*b] == x); --b) { *b = ~*b; } + } + limit = -3; + continue; + } + + /* choose pivot */ + a = tr_pivot(ISAd, first, last); + SWAP(*first, *a); + v = ISAd[*first]; + + /* partition */ + tr_partition(ISAd, first, first + 1, last, &a, &b, v); + if((last - first) != (b - a)) { + next = (ISA[*a] != v) ? tr_ilg(b - a) : -1; + + /* update ranks */ + for(c = first, v = a - SA - 1; c < a; ++c) { ISA[*c] = v; } + if(b < last) { for(c = a, v = b - SA - 1; c < b; ++c) { ISA[*c] = v; } } + + /* push */ + if((1 < (b - a)) && (trbudget_check(budget, b - a))) { + if((a - first) <= (last - b)) { + if((last - b) <= (b - a)) { + if(1 < (a - first)) { + STACK_PUSH5(ISAd + incr, a, b, next, trlink); + STACK_PUSH5(ISAd, b, last, limit, trlink); + last = a; + } else if(1 < (last - b)) { + STACK_PUSH5(ISAd + incr, a, b, next, trlink); + first = b; + } else { + ISAd += incr, first = a, last = b, limit = next; + } + } else if((a - first) <= (b - a)) { + if(1 < (a - first)) { + STACK_PUSH5(ISAd, b, last, limit, trlink); + STACK_PUSH5(ISAd + incr, a, b, next, trlink); + last = a; + } else { + STACK_PUSH5(ISAd, b, last, limit, trlink); + ISAd += incr, first = a, last = b, limit = next; + } + } else { + STACK_PUSH5(ISAd, b, last, limit, trlink); + STACK_PUSH5(ISAd, first, a, limit, trlink); + ISAd += incr, first = a, last = b, limit = next; + } + } else { + if((a - first) <= (b - a)) { + if(1 < (last - b)) { + STACK_PUSH5(ISAd + incr, a, b, next, trlink); + STACK_PUSH5(ISAd, first, a, limit, trlink); + first = b; + } else if(1 < (a - first)) { + STACK_PUSH5(ISAd + incr, a, b, next, trlink); + last = a; + } else { + ISAd += incr, first = a, last = b, limit = next; + } + } else if((last - b) <= (b - a)) { + if(1 < (last - b)) { + STACK_PUSH5(ISAd, first, a, limit, trlink); + STACK_PUSH5(ISAd + incr, a, b, next, trlink); + first = b; + } else { + STACK_PUSH5(ISAd, first, a, limit, trlink); + ISAd += incr, first = a, last = b, limit = next; + } + } else { + STACK_PUSH5(ISAd, first, a, limit, trlink); + STACK_PUSH5(ISAd, b, last, limit, trlink); + ISAd += incr, first = a, last = b, limit = next; + } + } + } else { + if((1 < (b - a)) && (0 <= trlink)) { stack[trlink].d = -1; } + if((a - first) <= (last - b)) { + if(1 < (a - first)) { + STACK_PUSH5(ISAd, b, last, limit, trlink); + last = a; + } else if(1 < (last - b)) { + first = b; + } else { + STACK_POP5(ISAd, first, last, limit, trlink); + } + } else { + if(1 < (last - b)) { + STACK_PUSH5(ISAd, first, a, limit, trlink); + first = b; + } else if(1 < (a - first)) { + last = a; + } else { + STACK_POP5(ISAd, first, last, limit, trlink); + } + } + } + } else { + if(trbudget_check(budget, last - first)) { + limit = tr_ilg(last - first), ISAd += incr; + } else { + if(0 <= trlink) { stack[trlink].d = -1; } + STACK_POP5(ISAd, first, last, limit, trlink); + } + } + } +#undef STACK_SIZE +} + + + +/*---------------------------------------------------------------------------*/ + +/*- Function -*/ + +/* Tandem repeat sort */ +void +trsort(saidx_t *ISA, saidx_t *SA, saidx_t n, saidx_t depth) { + saidx_t *ISAd; + saidx_t *first, *last; + trbudget_t budget; + saidx_t t, skip, unsorted; + + trbudget_init(&budget, tr_ilg(n) * 2 / 3, n); +/* trbudget_init(&budget, tr_ilg(n) * 3 / 4, n); */ + for(ISAd = ISA + depth; -n < *SA; ISAd += ISAd - ISA) { + first = SA; + skip = 0; + unsorted = 0; + do { + if((t = *first) < 0) { first -= t; skip += t; } + else { + if(skip != 0) { *(first + skip) = skip; skip = 0; } + last = SA + ISA[t] + 1; + if(1 < (last - first)) { + budget.count = 0; + tr_introsort(ISA, ISAd, SA, first, last, &budget); + if(budget.count != 0) { unsorted += budget.count; } + else { skip = first - last; } + } else if((last - first) == 1) { + skip = -1; + } + first = last; + } + } while(first < (SA + n)); + if(skip != 0) { *(first + skip) = skip; } + if(unsorted == 0) { break; } + } +} diff --git a/tools/z64compress/src/enc/enc.h b/tools/z64compress/src/enc/enc.h new file mode 100644 index 0000000..48a2475 --- /dev/null +++ b/tools/z64compress/src/enc/enc.h @@ -0,0 +1,50 @@ +#ifndef Z64COMPRESS_ENC_H_INCLUDED +#define Z64COMPRESS_ENC_H_INCLUDED + +int yazenc( + void *src + , unsigned src_sz + , void *dst + , unsigned *dst_sz + , void *_ctx +); +void *yazCtx_new(void); +void yazCtx_free(void *_ctx); +int yazdec(void *_src, void *_dst, unsigned dstSz, unsigned *srcSz); + +int lzoenc( + void *src + , unsigned src_sz + , void *dst + , unsigned *dst_sz + , void *_ctx +); +void *lzoCtx_new(void); +void lzoCtx_free(void *_ctx); + +int uclenc( + void *src + , unsigned src_sz + , void *dst + , unsigned *dst_sz + , void *_ctx +); + +int zx7enc( + void *src + , unsigned src_sz + , void *dst + , unsigned *dst_sz + , void *_ctx +); + +int aplenc( + void *_src + , unsigned src_sz + , void *_dst + , unsigned *dst_sz + , void *_ctx +); + +#endif /* Z64COMPRESS_ENC_H_INCLUDED */ + diff --git a/tools/z64compress/src/enc/lzo.c b/tools/z64compress/src/enc/lzo.c new file mode 100644 index 0000000..64f79b7 --- /dev/null +++ b/tools/z64compress/src/enc/lzo.c @@ -0,0 +1,55 @@ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include "lzo/lzoconf.h" +#include "lzo/lzo1x.h" + +void +lzoCtx_free(void *_ctx) +{ + if (!_ctx) + return; + + free(_ctx); +} + +void * +lzoCtx_new(void) +{ + return malloc(LZO1X_999_MEM_COMPRESS); +} + +int +lzoenc( + void *_src + , unsigned src_sz + , void *_dst + , unsigned *dst_sz + , void *_ctx +) +{ + unsigned char *src = _src; + unsigned char *dst = _dst; + unsigned char *wrkmem = _ctx; + lzo_uint result_sz = 0; + + int hlen = 8; /* header length; required due to MM's archives */ + memset(dst, 0, hlen); + memcpy(dst, "LZO0", 4); + dst[4] = (src_sz >> 24); + dst[5] = (src_sz >> 16); + dst[6] = (src_sz >> 8); + dst[7] = (src_sz >> 0); + + if (!wrkmem) + return 1; + + memset(wrkmem, 0, LZO1X_999_MEM_COMPRESS); + + lzo1x_999_compress(src, src_sz, dst + hlen, &result_sz, wrkmem); + + *dst_sz = result_sz + hlen; + + return 0; +} + diff --git a/tools/z64compress/src/enc/lzo/config1x.h b/tools/z64compress/src/enc/lzo/config1x.h new file mode 100644 index 0000000..f85cb65 --- /dev/null +++ b/tools/z64compress/src/enc/lzo/config1x.h @@ -0,0 +1,106 @@ +/* config1x.h -- configuration for the LZO1X algorithm + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the library and is subject + to change. + */ + + +#ifndef __LZO_CONFIG1X_H +#define __LZO_CONFIG1X_H 1 + +#if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z) +# define LZO1X 1 +#endif + +#include "lzo_conf.h" +#if !defined(__LZO_IN_MINILZO) +#include "lzo1x.h" +#endif + + +/*********************************************************************** +// +************************************************************************/ + +#ifndef LZO_EOF_CODE +#define LZO_EOF_CODE 1 +#endif +#undef LZO_DETERMINISTIC + +#define M1_MAX_OFFSET 0x0400 +#ifndef M2_MAX_OFFSET +#define M2_MAX_OFFSET 0x0800 +#endif +#define M3_MAX_OFFSET 0x4000 +#define M4_MAX_OFFSET 0xbfff + +#define MX_MAX_OFFSET (M1_MAX_OFFSET + M2_MAX_OFFSET) + +#define M1_MIN_LEN 2 +#define M1_MAX_LEN 2 +#define M2_MIN_LEN 3 +#ifndef M2_MAX_LEN +#define M2_MAX_LEN 8 +#endif +#define M3_MIN_LEN 3 +#define M3_MAX_LEN 33 +#define M4_MIN_LEN 3 +#define M4_MAX_LEN 9 + +#define M1_MARKER 0 +#define M2_MARKER 64 +#define M3_MARKER 32 +#define M4_MARKER 16 + + +/*********************************************************************** +// +************************************************************************/ + +#ifndef MIN_LOOKAHEAD +#define MIN_LOOKAHEAD (M2_MAX_LEN + 1) +#endif + +#if defined(LZO_NEED_DICT_H) + +#ifndef LZO_HASH +#define LZO_HASH LZO_HASH_LZO_INCREMENTAL_B +#endif +#define DL_MIN_LEN M2_MIN_LEN +#include "lzo_dict.h" + +#endif + + + +#endif /* already included */ + + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo1_d.ch b/tools/z64compress/src/enc/lzo/lzo1_d.ch new file mode 100644 index 0000000..bedc7ce --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo1_d.ch @@ -0,0 +1,156 @@ +/* lzo1_d.ch -- common decompression stuff + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + + +#if defined(LZO_TEST_OVERRUN) +# if !defined(LZO_TEST_OVERRUN_INPUT) +# define LZO_TEST_OVERRUN_INPUT 2 +# endif +# if !defined(LZO_TEST_OVERRUN_OUTPUT) +# define LZO_TEST_OVERRUN_OUTPUT 2 +# endif +# if !defined(LZO_TEST_OVERRUN_LOOKBEHIND) +# define LZO_TEST_OVERRUN_LOOKBEHIND 1 +# endif +#endif + + +/*********************************************************************** +// Overrun detection is internally handled by these macros: +// +// TEST_IP test input overrun at loop begin +// NEED_IP test input overrun at every input byte +// +// TEST_OP test output overrun at loop begin +// NEED_OP test output overrun at every output byte +// +// TEST_LB test match position +// +// The fastest decompressor results when testing for no overruns +// and using LZO_EOF_CODE. +************************************************************************/ + +#undef TEST_IP +#undef TEST_OP +#undef TEST_IP_AND_TEST_OP +#undef TEST_LB +#undef TEST_LBO +#undef NEED_IP +#undef NEED_OP +#undef TEST_IV +#undef TEST_OV +#undef HAVE_TEST_IP +#undef HAVE_TEST_OP +#undef HAVE_NEED_IP +#undef HAVE_NEED_OP +#undef HAVE_ANY_IP +#undef HAVE_ANY_OP + + +#if defined(LZO_TEST_OVERRUN_INPUT) +# if (LZO_TEST_OVERRUN_INPUT >= 1) +# define TEST_IP (ip < ip_end) +# endif +# if (LZO_TEST_OVERRUN_INPUT >= 2) +# define NEED_IP(x) \ + if ((lzo_uint)(ip_end - ip) < (lzo_uint)(x)) goto input_overrun +# define TEST_IV(x) if ((x) > (lzo_uint)0 - (511)) goto input_overrun +# endif +#endif + +#if defined(LZO_TEST_OVERRUN_OUTPUT) +# if (LZO_TEST_OVERRUN_OUTPUT >= 1) +# define TEST_OP (op <= op_end) +# endif +# if (LZO_TEST_OVERRUN_OUTPUT >= 2) +# undef TEST_OP /* don't need both of the tests here */ +# define NEED_OP(x) \ + if ((lzo_uint)(op_end - op) < (lzo_uint)(x)) goto output_overrun +# define TEST_OV(x) if ((x) > (lzo_uint)0 - (511)) goto output_overrun +# endif +#endif + +#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) +# define TEST_LB(m_pos) if (PTR_LT(m_pos,out) || PTR_GE(m_pos,op)) goto lookbehind_overrun +# define TEST_LBO(m_pos,o) if (PTR_LT(m_pos,out) || PTR_GE(m_pos,op-(o))) goto lookbehind_overrun +#else +# define TEST_LB(m_pos) ((void) 0) +# define TEST_LBO(m_pos,o) ((void) 0) +#endif + + +#if !defined(LZO_EOF_CODE) && !defined(TEST_IP) + /* if we have no EOF code, we have to test for the end of the input */ +# define TEST_IP (ip < ip_end) +#endif + + +#if defined(TEST_IP) +# define HAVE_TEST_IP 1 +#else +# define TEST_IP 1 +#endif +#if defined(TEST_OP) +# define HAVE_TEST_OP 1 +#else +# define TEST_OP 1 +#endif + +#if defined(HAVE_TEST_IP) && defined(HAVE_TEST_OP) +# define TEST_IP_AND_TEST_OP (TEST_IP && TEST_OP) +#elif defined(HAVE_TEST_IP) +# define TEST_IP_AND_TEST_OP TEST_IP +#elif defined(HAVE_TEST_OP) +# define TEST_IP_AND_TEST_OP TEST_OP +#else +# define TEST_IP_AND_TEST_OP 1 +#endif + +#if defined(NEED_IP) +# define HAVE_NEED_IP 1 +#else +# define NEED_IP(x) ((void) 0) +# define TEST_IV(x) ((void) 0) +#endif +#if defined(NEED_OP) +# define HAVE_NEED_OP 1 +#else +# define NEED_OP(x) ((void) 0) +# define TEST_OV(x) ((void) 0) +#endif + + +#if defined(HAVE_TEST_IP) || defined(HAVE_NEED_IP) +# define HAVE_ANY_IP 1 +#endif +#if defined(HAVE_TEST_OP) || defined(HAVE_NEED_OP) +# define HAVE_ANY_OP 1 +#endif + + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo1x.h b/tools/z64compress/src/enc/lzo/lzo1x.h new file mode 100644 index 0000000..a111514 --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo1x.h @@ -0,0 +1,165 @@ +/* lzo1x.h -- public interface of the LZO1X compression algorithm + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +#ifndef __LZO1X_H_INCLUDED +#define __LZO1X_H_INCLUDED 1 + +#ifndef __LZOCONF_H_INCLUDED +#include <lzo/lzoconf.h> +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/*********************************************************************** +// +************************************************************************/ + +/* Memory required for the wrkmem parameter. + * When the required size is 0, you can also pass a NULL pointer. + */ + +#define LZO1X_MEM_COMPRESS LZO1X_1_MEM_COMPRESS +#define LZO1X_MEM_DECOMPRESS (0) +#define LZO1X_MEM_OPTIMIZE (0) + + +/* decompression */ +LZO_EXTERN(int) +lzo1x_decompress ( const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem /* NOT USED */ ); + +/* safe decompression with overrun testing */ +LZO_EXTERN(int) +lzo1x_decompress_safe ( const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem /* NOT USED */ ); + + +/*********************************************************************** +// +************************************************************************/ + +#define LZO1X_1_MEM_COMPRESS ((lzo_uint32_t) (16384L * lzo_sizeof_dict_t)) + +LZO_EXTERN(int) +lzo1x_1_compress ( const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem ); + + +/*********************************************************************** +// special compressor versions +************************************************************************/ + +/* this version needs only 8 KiB work memory */ +#define LZO1X_1_11_MEM_COMPRESS ((lzo_uint32_t) (2048L * lzo_sizeof_dict_t)) + +LZO_EXTERN(int) +lzo1x_1_11_compress ( const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem ); + + +/* this version needs 16 KiB work memory */ +#define LZO1X_1_12_MEM_COMPRESS ((lzo_uint32_t) (4096L * lzo_sizeof_dict_t)) + +LZO_EXTERN(int) +lzo1x_1_12_compress ( const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem ); + + +/* use this version if you need a little more compression speed */ +#define LZO1X_1_15_MEM_COMPRESS ((lzo_uint32_t) (32768L * lzo_sizeof_dict_t)) + +LZO_EXTERN(int) +lzo1x_1_15_compress ( const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem ); + + +/*********************************************************************** +// better compression ratio at the cost of more memory and time +************************************************************************/ + +#define LZO1X_999_MEM_COMPRESS ((lzo_uint32_t) (14 * 16384L * sizeof(short))) + +LZO_EXTERN(int) +lzo1x_999_compress ( const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem ); + + +/*********************************************************************** +// +************************************************************************/ + +LZO_EXTERN(int) +lzo1x_999_compress_dict ( const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem, + const lzo_bytep dict, lzo_uint dict_len ); + +LZO_EXTERN(int) +lzo1x_999_compress_level ( const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem, + const lzo_bytep dict, lzo_uint dict_len, + lzo_callback_p cb, + int compression_level ); + +LZO_EXTERN(int) +lzo1x_decompress_dict_safe ( const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem /* NOT USED */, + const lzo_bytep dict, lzo_uint dict_len ); + + +/*********************************************************************** +// optimize a compressed data block +************************************************************************/ + +LZO_EXTERN(int) +lzo1x_optimize ( lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem /* NOT USED */ ); + + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* already included */ + + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo1x_1.c b/tools/z64compress/src/enc/lzo/lzo1x_1.c new file mode 100644 index 0000000..a659393 --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo1x_1.c @@ -0,0 +1,57 @@ +/* lzo1x_1.c -- LZO1X-1 compression + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +#include "lzo_conf.h" +#if 1 && defined(UA_GET_LE32) +#undef LZO_DICT_USE_PTR +#define LZO_DICT_USE_PTR 0 +#undef lzo_dict_t +#define lzo_dict_t lzo_uint16_t +#endif + +#define LZO_NEED_DICT_H 1 +#ifndef D_BITS +#define D_BITS 14 +#endif +#define D_INDEX1(d,p) d = DM(DMUL(0x21,DX3(p,5,5,6)) >> 5) +#define D_INDEX2(d,p) d = (d & (D_MASK & 0x7ff)) ^ (D_HIGH | 0x1f) +#if 1 +#define DINDEX(dv,p) DM(((DMUL(0x1824429d,dv)) >> (32-D_BITS))) +#else +#define DINDEX(dv,p) DM((dv) + ((dv) >> (32-D_BITS))) +#endif +#include "config1x.h" +#define LZO_DETERMINISTIC !(LZO_DICT_USE_PTR) + +#ifndef DO_COMPRESS +#define DO_COMPRESS lzo1x_1_compress +#endif + +#include "lzo1x_c.ch" + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo1x_9x.c b/tools/z64compress/src/enc/lzo/lzo1x_9x.c new file mode 100644 index 0000000..39a211e --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo1x_9x.c @@ -0,0 +1,867 @@ +/* lzo1x_9x.c -- implementation of the LZO1X-999 compression algorithm + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +#if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z) +# define LZO1X 1 +#endif + +#if defined(LZO1X) +# include "config1x.h" +#elif defined(LZO1Y) +# include "config1y.h" +#elif defined(LZO1Z) +# include "config1z.h" +#else +# error +#endif + + +/*********************************************************************** +// +************************************************************************/ + +#define SWD_N M4_MAX_OFFSET /* size of ring buffer */ +#define SWD_THRESHOLD 1 /* lower limit for match length */ +#define SWD_F 2048 /* upper limit for match length */ + +#define SWD_BEST_OFF (LZO_MAX3( M2_MAX_LEN, M3_MAX_LEN, M4_MAX_LEN ) + 1) + +#if defined(LZO1X) +# define LZO_COMPRESS_T lzo1x_999_t +# define lzo_swd_t lzo1x_999_swd_t +#elif defined(LZO1Y) +# define LZO_COMPRESS_T lzo1y_999_t +# define lzo_swd_t lzo1y_999_swd_t +# define lzo1x_999_compress_internal lzo1y_999_compress_internal +# define lzo1x_999_compress_dict lzo1y_999_compress_dict +# define lzo1x_999_compress_level lzo1y_999_compress_level +# define lzo1x_999_compress lzo1y_999_compress +#elif defined(LZO1Z) +# define LZO_COMPRESS_T lzo1z_999_t +# define lzo_swd_t lzo1z_999_swd_t +# define lzo1x_999_compress_internal lzo1z_999_compress_internal +# define lzo1x_999_compress_dict lzo1z_999_compress_dict +# define lzo1x_999_compress_level lzo1z_999_compress_level +# define lzo1x_999_compress lzo1z_999_compress +#else +# error +#endif + +#if 0 +# define HEAD3(b,p) \ + ((((((lzo_xint)b[p]<<3)^b[p+1])<<3)^b[p+2]) & (SWD_HSIZE-1)) +#endif +#if 0 && (LZO_OPT_UNALIGNED32) && (LZO_ABI_LITTLE_ENDIAN) +# define HEAD3(b,p) \ + (((* (lzo_uint32_tp) &b[p]) ^ ((* (lzo_uint32_tp) &b[p])>>10)) & (SWD_HSIZE-1)) +#endif + +#include "lzo_mchw.ch" + + +/* this is a public functions, but there is no prototype in a header file */ +LZO_EXTERN(int) +lzo1x_999_compress_internal ( const lzo_bytep in , lzo_uint in_len, + lzo_bytep out, lzo_uintp out_len, + lzo_voidp wrkmem, + const lzo_bytep dict, lzo_uint dict_len, + lzo_callback_p cb, + int try_lazy_parm, + lzo_uint good_length, + lzo_uint max_lazy, + lzo_uint nice_length, + lzo_uint max_chain, + lzo_uint32_t flags ); + + +/*********************************************************************** +// +************************************************************************/ + +static lzo_bytep +code_match ( LZO_COMPRESS_T *c, lzo_bytep op, lzo_uint m_len, lzo_uint m_off ) +{ + lzo_uint x_len = m_len; + lzo_uint x_off = m_off; + + c->match_bytes += m_len; + +#if 0 +/* + static lzo_uint last_m_len = 0, last_m_off = 0; + static lzo_uint prev_m_off[4]; + static unsigned prev_m_off_ptr = 0; + unsigned i; + + //if (m_len >= 3 && m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET) + if (m_len >= 3 && m_len <= M2_MAX_LEN) + { + //if (m_len == last_m_len && m_off == last_m_off) + //printf("last_m_len + last_m_off\n"); + //else + if (m_off == last_m_off) + printf("last_m_off\n"); + else + { + for (i = 0; i < 4; i++) + if (m_off == prev_m_off[i]) + printf("prev_m_off %u: %5ld\n",i,(long)m_off); + } + } + last_m_len = m_len; + last_m_off = prev_m_off[prev_m_off_ptr] = m_off; + prev_m_off_ptr = (prev_m_off_ptr + 1) & 3; +*/ +#endif + + assert(op > c->out); + if (m_len == 2) + { + assert(m_off <= M1_MAX_OFFSET); + assert(c->r1_lit > 0); assert(c->r1_lit < 4); + m_off -= 1; +#if defined(LZO1Z) + *op++ = LZO_BYTE(M1_MARKER | (m_off >> 6)); + *op++ = LZO_BYTE(m_off << 2); +#else + *op++ = LZO_BYTE(M1_MARKER | ((m_off & 3) << 2)); + *op++ = LZO_BYTE(m_off >> 2); +#endif + c->m1a_m++; + } +#if defined(LZO1Z) + else if (m_len <= M2_MAX_LEN && (m_off <= M2_MAX_OFFSET || m_off == c->last_m_off)) +#else + else if (m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET) +#endif + { + assert(m_len >= 3); +#if defined(LZO1X) + m_off -= 1; + *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2)); + *op++ = LZO_BYTE(m_off >> 3); + assert(op[-2] >= M2_MARKER); +#elif defined(LZO1Y) + m_off -= 1; + *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2)); + *op++ = LZO_BYTE(m_off >> 2); + assert(op[-2] >= M2_MARKER); +#elif defined(LZO1Z) + if (m_off == c->last_m_off) + *op++ = LZO_BYTE(((m_len - 1) << 5) | (0x700 >> 6)); + else + { + m_off -= 1; + *op++ = LZO_BYTE(((m_len - 1) << 5) | (m_off >> 6)); + *op++ = LZO_BYTE(m_off << 2); + } +#endif + c->m2_m++; + } + else if (m_len == M2_MIN_LEN && m_off <= MX_MAX_OFFSET && c->r1_lit >= 4) + { + assert(m_len == 3); + assert(m_off > M2_MAX_OFFSET); + m_off -= 1 + M2_MAX_OFFSET; +#if defined(LZO1Z) + *op++ = LZO_BYTE(M1_MARKER | (m_off >> 6)); + *op++ = LZO_BYTE(m_off << 2); +#else + *op++ = LZO_BYTE(M1_MARKER | ((m_off & 3) << 2)); + *op++ = LZO_BYTE(m_off >> 2); +#endif + c->m1b_m++; + } + else if (m_off <= M3_MAX_OFFSET) + { + assert(m_len >= 3); + m_off -= 1; + if (m_len <= M3_MAX_LEN) + *op++ = LZO_BYTE(M3_MARKER | (m_len - 2)); + else + { + m_len -= M3_MAX_LEN; + *op++ = M3_MARKER | 0; + while (m_len > 255) + { + m_len -= 255; + *op++ = 0; + } + assert(m_len > 0); + *op++ = LZO_BYTE(m_len); + } +#if defined(LZO1Z) + *op++ = LZO_BYTE(m_off >> 6); + *op++ = LZO_BYTE(m_off << 2); +#else + *op++ = LZO_BYTE(m_off << 2); + *op++ = LZO_BYTE(m_off >> 6); +#endif + c->m3_m++; + } + else + { + lzo_uint k; + + assert(m_len >= 3); + assert(m_off > 0x4000); assert(m_off <= 0xbfff); + m_off -= 0x4000; + k = (m_off & 0x4000) >> 11; + if (m_len <= M4_MAX_LEN) + *op++ = LZO_BYTE(M4_MARKER | k | (m_len - 2)); + else + { + m_len -= M4_MAX_LEN; + *op++ = LZO_BYTE(M4_MARKER | k | 0); + while (m_len > 255) + { + m_len -= 255; + *op++ = 0; + } + assert(m_len > 0); + *op++ = LZO_BYTE(m_len); + } +#if defined(LZO1Z) + *op++ = LZO_BYTE(m_off >> 6); + *op++ = LZO_BYTE(m_off << 2); +#else + *op++ = LZO_BYTE(m_off << 2); + *op++ = LZO_BYTE(m_off >> 6); +#endif + c->m4_m++; + } + + c->last_m_len = x_len; + c->last_m_off = x_off; + return op; +} + + +static lzo_bytep +STORE_RUN ( LZO_COMPRESS_T *c, lzo_bytep op, const lzo_bytep ii, lzo_uint t ) +{ + c->lit_bytes += t; + + if (op == c->out && t <= 238) + { + *op++ = LZO_BYTE(17 + t); + } + else if (t <= 3) + { +#if defined(LZO1Z) + op[-1] = LZO_BYTE(op[-1] | t); +#else + op[-2] = LZO_BYTE(op[-2] | t); +#endif + c->lit1_r++; + } + else if (t <= 18) + { + *op++ = LZO_BYTE(t - 3); + c->lit2_r++; + } + else + { + lzo_uint tt = t - 18; + + *op++ = 0; + while (tt > 255) + { + tt -= 255; + *op++ = 0; + } + assert(tt > 0); + *op++ = LZO_BYTE(tt); + c->lit3_r++; + } + do *op++ = *ii++; while (--t > 0); + + return op; +} + + +static lzo_bytep +code_run ( LZO_COMPRESS_T *c, lzo_bytep op, const lzo_bytep ii, + lzo_uint lit, lzo_uint m_len ) +{ + if (lit > 0) + { + assert(m_len >= 2); + op = STORE_RUN(c,op,ii,lit); + c->r1_m_len = m_len; + c->r1_lit = lit; + } + else + { + assert(m_len >= 3); + c->r1_m_len = 0; + c->r1_lit = 0; + } + + return op; +} + + +/*********************************************************************** +// +************************************************************************/ + +static lzo_uint +len_of_coded_match ( lzo_uint m_len, lzo_uint m_off, lzo_uint lit ) +{ + lzo_uint n = 4; + + if (m_len < 2) + return 0; + if (m_len == 2) + return (m_off <= M1_MAX_OFFSET && lit > 0 && lit < 4) ? 2 : 0; + if (m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET) + return 2; + if (m_len == M2_MIN_LEN && m_off <= MX_MAX_OFFSET && lit >= 4) + return 2; + if (m_off <= M3_MAX_OFFSET) + { + if (m_len <= M3_MAX_LEN) + return 3; + m_len -= M3_MAX_LEN; + while (m_len > 255) + { + m_len -= 255; + n++; + } + return n; + } + if (m_off <= M4_MAX_OFFSET) + { + if (m_len <= M4_MAX_LEN) + return 3; + m_len -= M4_MAX_LEN; + while (m_len > 255) + { + m_len -= 255; + n++; + } + return n; + } + return 0; +} + + +static lzo_uint +min_gain(lzo_uint ahead, lzo_uint lit1, lzo_uint lit2, lzo_uint l1, lzo_uint l2, lzo_uint l3) +{ + lzo_uint lazy_match_min_gain; + + assert (ahead >= 1); + lazy_match_min_gain = ahead; + +#if 0 + if (l3) + lit2 -= ahead; +#endif + + if (lit1 <= 3) + lazy_match_min_gain += (lit2 <= 3) ? 0 : 2; + else if (lit1 <= 18) + lazy_match_min_gain += (lit2 <= 18) ? 0 : 1; + + lazy_match_min_gain += (l2 - l1) * 2; + if (l3) + lazy_match_min_gain -= (ahead - l3) * 2; + + if ((lzo_int) lazy_match_min_gain < 0) + lazy_match_min_gain = 0; + +#if 0 + if (l1 == 2) + if (lazy_match_min_gain == 0) + lazy_match_min_gain = 1; +#endif + + return lazy_match_min_gain; +} + + +/*********************************************************************** +// +************************************************************************/ + +#if !defined(NDEBUG) +static +void assert_match( const lzo_swd_p swd, lzo_uint m_len, lzo_uint m_off ) +{ + const LZO_COMPRESS_T *c = swd->c; + lzo_uint d_off; + + assert(m_len >= 2); + if (m_off <= (lzo_uint) (c->bp - c->in)) + { + assert(c->bp - m_off + m_len < c->ip); + assert(lzo_memcmp(c->bp, c->bp - m_off, m_len) == 0); + } + else + { + assert(swd->dict != NULL); + d_off = m_off - (lzo_uint) (c->bp - c->in); + assert(d_off <= swd->dict_len); + if (m_len > d_off) + { + assert(lzo_memcmp(c->bp, swd->dict_end - d_off, d_off) == 0); + assert(c->in + m_len - d_off < c->ip); + assert(lzo_memcmp(c->bp + d_off, c->in, m_len - d_off) == 0); + } + else + { + assert(lzo_memcmp(c->bp, swd->dict_end - d_off, m_len) == 0); + } + } +} +#else +# define assert_match(a,b,c) ((void)0) +#endif + + +#if defined(SWD_BEST_OFF) + +static void +better_match ( const lzo_swd_p swd, lzo_uint *m_len, lzo_uint *m_off ) +{ +#if defined(LZO1Z) + const LZO_COMPRESS_T *c = swd->c; +#endif + + if (*m_len <= M2_MIN_LEN) + return; +#if defined(LZO1Z) + if (*m_off == c->last_m_off && *m_len <= M2_MAX_LEN) + return; +#if 1 + if (*m_len >= M2_MIN_LEN + 1 && *m_len <= M2_MAX_LEN + 1 && + c->last_m_off && swd->best_off[*m_len-1] == c->last_m_off) + { + *m_len = *m_len - 1; + *m_off = swd->best_off[*m_len]; + return; + } +#endif +#endif + + if (*m_off <= M2_MAX_OFFSET) + return; + +#if 1 + /* M3/M4 -> M2 */ + if (*m_off > M2_MAX_OFFSET && + *m_len >= M2_MIN_LEN + 1 && *m_len <= M2_MAX_LEN + 1 && + swd->best_off[*m_len-1] && swd->best_off[*m_len-1] <= M2_MAX_OFFSET) + { + *m_len = *m_len - 1; + *m_off = swd->best_off[*m_len]; + return; + } +#endif + +#if 1 + /* M4 -> M2 */ + if (*m_off > M3_MAX_OFFSET && + *m_len >= M4_MAX_LEN + 1 && *m_len <= M2_MAX_LEN + 2 && + swd->best_off[*m_len-2] && swd->best_off[*m_len-2] <= M2_MAX_OFFSET) + { + *m_len = *m_len - 2; + *m_off = swd->best_off[*m_len]; + return; + } +#endif + +#if 1 + /* M4 -> M3 */ + if (*m_off > M3_MAX_OFFSET && + *m_len >= M4_MAX_LEN + 1 && *m_len <= M3_MAX_LEN + 1 && + swd->best_off[*m_len-1] && swd->best_off[*m_len-1] <= M3_MAX_OFFSET) + { + *m_len = *m_len - 1; + *m_off = swd->best_off[*m_len]; + } +#endif +} + +#endif + + +/*********************************************************************** +// +************************************************************************/ + +LZO_PUBLIC(int) +lzo1x_999_compress_internal ( const lzo_bytep in , lzo_uint in_len, + lzo_bytep out, lzo_uintp out_len, + lzo_voidp wrkmem, + const lzo_bytep dict, lzo_uint dict_len, + lzo_callback_p cb, + int try_lazy_parm, + lzo_uint good_length, + lzo_uint max_lazy, + lzo_uint nice_length, + lzo_uint max_chain, + lzo_uint32_t flags ) +{ + lzo_bytep op; + const lzo_bytep ii; + lzo_uint lit; + lzo_uint m_len, m_off; + LZO_COMPRESS_T cc; + LZO_COMPRESS_T * const c = &cc; + lzo_swd_p const swd = (lzo_swd_p) wrkmem; + lzo_uint try_lazy; + int r; + + /* sanity check */ +#if defined(LZO1X) + LZO_COMPILE_TIME_ASSERT(LZO1X_999_MEM_COMPRESS >= SIZEOF_LZO_SWD_T) +#elif defined(LZO1Y) + LZO_COMPILE_TIME_ASSERT(LZO1Y_999_MEM_COMPRESS >= SIZEOF_LZO_SWD_T) +#elif defined(LZO1Z) + LZO_COMPILE_TIME_ASSERT(LZO1Z_999_MEM_COMPRESS >= SIZEOF_LZO_SWD_T) +#else +# error +#endif + +/* setup parameter defaults */ + /* number of lazy match tries */ + try_lazy = (lzo_uint) try_lazy_parm; + if (try_lazy_parm < 0) + try_lazy = 1; + /* reduce lazy match search if we already have a match with this length */ + if (good_length == 0) + good_length = 32; + /* do not try a lazy match if we already have a match with this length */ + if (max_lazy == 0) + max_lazy = 32; + /* stop searching for longer matches than this one */ + if (nice_length == 0) + nice_length = 0; + /* don't search more positions than this */ + if (max_chain == 0) + max_chain = SWD_MAX_CHAIN; + + c->init = 0; + c->ip = c->in = in; + c->in_end = in + in_len; + c->out = out; + c->cb = cb; + c->m1a_m = c->m1b_m = c->m2_m = c->m3_m = c->m4_m = 0; + c->lit1_r = c->lit2_r = c->lit3_r = 0; + + op = out; + ii = c->ip; /* point to start of literal run */ + lit = 0; + c->r1_lit = c->r1_m_len = 0; + + r = init_match(c,swd,dict,dict_len,flags); + if (r != 0) + return r; + if (max_chain > 0) + swd->max_chain = max_chain; + if (nice_length > 0) + swd->nice_length = nice_length; + + r = find_match(c,swd,0,0); + if (r != 0) + return r; + while (c->look > 0) + { + lzo_uint ahead; + lzo_uint max_ahead; + lzo_uint l1, l2, l3; + + c->codesize = pd(op, out); + + m_len = c->m_len; + m_off = c->m_off; + + assert(c->bp == c->ip - c->look); + assert(c->bp >= in); + if (lit == 0) + ii = c->bp; + assert(ii + lit == c->bp); + assert(swd->b_char == *(c->bp)); + + if ( m_len < 2 || + (m_len == 2 && (m_off > M1_MAX_OFFSET || lit == 0 || lit >= 4)) || +#if 1 + /* Do not accept this match for compressed-data compatibility + * with LZO v1.01 and before + * [ might be a problem for decompress() and optimize() ] + */ + (m_len == 2 && op == out) || +#endif + (op == out && lit == 0)) + { + /* a literal */ + m_len = 0; + } + else if (m_len == M2_MIN_LEN) + { + /* compression ratio improves if we code a literal in some cases */ + if (m_off > MX_MAX_OFFSET && lit >= 4) + m_len = 0; + } + + if (m_len == 0) + { + /* a literal */ + lit++; + swd->max_chain = max_chain; + r = find_match(c,swd,1,0); + assert(r == 0); LZO_UNUSED(r); + continue; + } + + /* a match */ +#if defined(SWD_BEST_OFF) + if (swd->use_best_off) + better_match(swd,&m_len,&m_off); +#endif + assert_match(swd,m_len,m_off); + + + /* shall we try a lazy match ? */ + ahead = 0; + if (try_lazy == 0 || m_len >= max_lazy) + { + /* no */ + l1 = 0; + max_ahead = 0; + } + else + { + /* yes, try a lazy match */ + l1 = len_of_coded_match(m_len,m_off,lit); + assert(l1 > 0); +#if 1 + max_ahead = LZO_MIN(try_lazy, l1 - 1); +#else + max_ahead = LZO_MIN3(try_lazy, l1, m_len - 1); +#endif + } + + + while (ahead < max_ahead && c->look > m_len) + { + lzo_uint lazy_match_min_gain; + + if (m_len >= good_length) + swd->max_chain = max_chain >> 2; + else + swd->max_chain = max_chain; + r = find_match(c,swd,1,0); + ahead++; + + assert(r == 0); LZO_UNUSED(r); + assert(c->look > 0); + assert(ii + lit + ahead == c->bp); + +#if defined(LZO1Z) + if (m_off == c->last_m_off && c->m_off != c->last_m_off) + if (m_len >= M2_MIN_LEN && m_len <= M2_MAX_LEN) + c->m_len = 0; +#endif + if (c->m_len < m_len) + continue; +#if 1 + if (c->m_len == m_len && c->m_off >= m_off) + continue; +#endif +#if defined(SWD_BEST_OFF) + if (swd->use_best_off) + better_match(swd,&c->m_len,&c->m_off); +#endif + l2 = len_of_coded_match(c->m_len,c->m_off,lit+ahead); + if (l2 == 0) + continue; +#if 0 + if (c->m_len == m_len && l2 >= l1) + continue; +#endif + + +#if 1 + /* compressed-data compatibility [see above] */ + l3 = (op == out) ? 0 : len_of_coded_match(ahead,m_off,lit); +#else + l3 = len_of_coded_match(ahead,m_off,lit); +#endif + + lazy_match_min_gain = min_gain(ahead,lit,lit+ahead,l1,l2,l3); + if (c->m_len >= m_len + lazy_match_min_gain) + { + c->lazy++; + assert_match(swd,c->m_len,c->m_off); + + if (l3) + { + /* code previous run */ + op = code_run(c,op,ii,lit,ahead); + lit = 0; + /* code shortened match */ + op = code_match(c,op,ahead,m_off); + } + else + { + lit += ahead; + assert(ii + lit == c->bp); + } + goto lazy_match_done; + } + } + + + assert(ii + lit + ahead == c->bp); + + /* 1 - code run */ + op = code_run(c,op,ii,lit,m_len); + lit = 0; + + /* 2 - code match */ + op = code_match(c,op,m_len,m_off); + swd->max_chain = max_chain; + r = find_match(c,swd,m_len,1+ahead); + assert(r == 0); LZO_UNUSED(r); + +lazy_match_done: ; + } + + + /* store final run */ + if (lit > 0) + op = STORE_RUN(c,op,ii,lit); + +#if defined(LZO_EOF_CODE) + *op++ = M4_MARKER | 1; + *op++ = 0; + *op++ = 0; +#endif + + c->codesize = pd(op, out); + assert(c->textsize == in_len); + + *out_len = pd(op, out); + + if (c->cb && c->cb->nprogress) + (*c->cb->nprogress)(c->cb, c->textsize, c->codesize, 0); + +#if 0 + printf("%ld %ld -> %ld %ld: %ld %ld %ld %ld %ld %ld: %ld %ld %ld %ld\n", + (long) c->textsize, (long) in_len, (long) c->codesize, + c->match_bytes, c->m1a_m, c->m1b_m, c->m2_m, c->m3_m, c->m4_m, + c->lit_bytes, c->lit1_r, c->lit2_r, c->lit3_r, c->lazy); +#endif + assert(c->lit_bytes + c->match_bytes == in_len); + + return LZO_E_OK; +} + + +/*********************************************************************** +// +************************************************************************/ + +LZO_PUBLIC(int) +lzo1x_999_compress_level ( const lzo_bytep in , lzo_uint in_len, + lzo_bytep out, lzo_uintp out_len, + lzo_voidp wrkmem, + const lzo_bytep dict, lzo_uint dict_len, + lzo_callback_p cb, + int compression_level ) +{ + static const struct + { + int try_lazy_parm; + lzo_uint good_length; + lzo_uint max_lazy; + lzo_uint nice_length; + lzo_uint max_chain; + lzo_uint32_t flags; + } c[9] = { + /* faster compression */ + { 0, 0, 0, 8, 4, 0 }, + { 0, 0, 0, 16, 8, 0 }, + { 0, 0, 0, 32, 16, 0 }, + { 1, 4, 4, 16, 16, 0 }, + { 1, 8, 16, 32, 32, 0 }, + { 1, 8, 16, 128, 128, 0 }, + { 2, 8, 32, 128, 256, 0 }, + { 2, 32, 128, SWD_F, 2048, 1 }, + { 2, SWD_F, SWD_F, SWD_F, 4096, 1 } + /* max. compression */ + }; + + if (compression_level < 1 || compression_level > 9) + return LZO_E_ERROR; + + compression_level -= 1; + return lzo1x_999_compress_internal(in, in_len, out, out_len, wrkmem, + dict, dict_len, cb, + c[compression_level].try_lazy_parm, + c[compression_level].good_length, + c[compression_level].max_lazy, +#if 0 + c[compression_level].nice_length, +#else + 0, +#endif + c[compression_level].max_chain, + c[compression_level].flags); +} + + +/*********************************************************************** +// +************************************************************************/ + +LZO_PUBLIC(int) +lzo1x_999_compress_dict ( const lzo_bytep in , lzo_uint in_len, + lzo_bytep out, lzo_uintp out_len, + lzo_voidp wrkmem, + const lzo_bytep dict, lzo_uint dict_len ) +{ + return lzo1x_999_compress_level(in, in_len, out, out_len, wrkmem, + dict, dict_len, 0, 8); +} + +LZO_PUBLIC(int) +lzo1x_999_compress ( const lzo_bytep in , lzo_uint in_len, + lzo_bytep out, lzo_uintp out_len, + lzo_voidp wrkmem ) +{ + return lzo1x_999_compress_level(in, in_len, out, out_len, wrkmem, + NULL, 0, (lzo_callback_p) 0, 9/*ootntsc10: 9 saves 2580 bytes over 8*/); +} + + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo1x_c.ch b/tools/z64compress/src/enc/lzo/lzo1x_c.ch new file mode 100644 index 0000000..be19b2b --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo1x_c.ch @@ -0,0 +1,403 @@ +/* lzo1x_c.ch -- implementation of the LZO1[XY]-1 compression algorithm + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + + +#if 1 && defined(DO_COMPRESS) && !defined(do_compress) + /* choose a unique name to better help PGO optimizations */ +# define do_compress LZO_PP_ECONCAT2(DO_COMPRESS,_core) +#endif + + +/*********************************************************************** +// compress a block of data. +************************************************************************/ + +static __lzo_noinline lzo_uint +do_compress ( const lzo_bytep in , lzo_uint in_len, + lzo_bytep out, lzo_uintp out_len, + lzo_uint ti, lzo_voidp wrkmem) +{ + const lzo_bytep ip; + lzo_bytep op; + const lzo_bytep const in_end = in + in_len; + const lzo_bytep const ip_end = in + in_len - 20; + const lzo_bytep ii; + lzo_dict_p const dict = (lzo_dict_p) wrkmem; + + op = out; + ip = in; + ii = ip; + + ip += ti < 4 ? 4 - ti : 0; + for (;;) + { + const lzo_bytep m_pos; +#if !(LZO_DETERMINISTIC) + LZO_DEFINE_UNINITIALIZED_VAR(lzo_uint, m_off, 0); + lzo_uint m_len; + lzo_uint dindex; +next: + if __lzo_unlikely(ip >= ip_end) + break; + DINDEX1(dindex,ip); + GINDEX(m_pos,m_off,dict,dindex,in); + if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) + goto literal; +#if 1 + if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) + goto try_match; + DINDEX2(dindex,ip); +#endif + GINDEX(m_pos,m_off,dict,dindex,in); + if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET)) + goto literal; + if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3]) + goto try_match; + goto literal; + +try_match: +#if (LZO_OPT_UNALIGNED32) + if (UA_GET_NE32(m_pos) != UA_GET_NE32(ip)) +#else + if (m_pos[0] != ip[0] || m_pos[1] != ip[1] || m_pos[2] != ip[2] || m_pos[3] != ip[3]) +#endif + { + /* a literal */ +literal: + UPDATE_I(dict,0,dindex,ip,in); + ip += 1 + ((ip - ii) >> 5); + continue; + } +/*match:*/ + UPDATE_I(dict,0,dindex,ip,in); +#else + lzo_uint m_off; + lzo_uint m_len; + { + lzo_uint32_t dv; + lzo_uint dindex; +literal: + ip += 1 + ((ip - ii) >> 5); +next: + if __lzo_unlikely(ip >= ip_end) + break; + dv = UA_GET_LE32(ip); + dindex = DINDEX(dv,ip); + GINDEX(m_off,m_pos,in+dict,dindex,in); + UPDATE_I(dict,0,dindex,ip,in); + if __lzo_unlikely(dv != UA_GET_LE32(m_pos)) + goto literal; + } +#endif + + /* a match */ + + ii -= ti; ti = 0; + { + lzo_uint t = pd(ip,ii); + if (t != 0) + { + if (t <= 3) + { + op[-2] = LZO_BYTE(op[-2] | t); +#if (LZO_OPT_UNALIGNED32) + UA_COPY4(op, ii); + op += t; +#else + { do *op++ = *ii++; while (--t > 0); } +#endif + } +#if (LZO_OPT_UNALIGNED32) || (LZO_OPT_UNALIGNED64) + else if (t <= 16) + { + *op++ = LZO_BYTE(t - 3); + UA_COPY8(op, ii); + UA_COPY8(op+8, ii+8); + op += t; + } +#endif + else + { + if (t <= 18) + *op++ = LZO_BYTE(t - 3); + else + { + lzo_uint tt = t - 18; + *op++ = 0; + while __lzo_unlikely(tt > 255) + { + tt -= 255; + UA_SET1(op, 0); + op++; + } + assert(tt > 0); + *op++ = LZO_BYTE(tt); + } +#if (LZO_OPT_UNALIGNED32) || (LZO_OPT_UNALIGNED64) + do { + UA_COPY8(op, ii); + UA_COPY8(op+8, ii+8); + op += 16; ii += 16; t -= 16; + } while (t >= 16); if (t > 0) +#endif + { do *op++ = *ii++; while (--t > 0); } + } + } + } + m_len = 4; + { +#if (LZO_OPT_UNALIGNED64) + lzo_uint64_t v; + v = UA_GET_NE64(ip + m_len) ^ UA_GET_NE64(m_pos + m_len); + if __lzo_unlikely(v == 0) { + do { + m_len += 8; + v = UA_GET_NE64(ip + m_len) ^ UA_GET_NE64(m_pos + m_len); + if __lzo_unlikely(ip + m_len >= ip_end) + goto m_len_done; + } while (v == 0); + } +#if (LZO_ABI_BIG_ENDIAN) && defined(lzo_bitops_ctlz64) + m_len += lzo_bitops_ctlz64(v) / CHAR_BIT; +#elif (LZO_ABI_BIG_ENDIAN) + if ((v >> (64 - CHAR_BIT)) == 0) do { + v <<= CHAR_BIT; + m_len += 1; + } while ((v >> (64 - CHAR_BIT)) == 0); +#elif (LZO_ABI_LITTLE_ENDIAN) && defined(lzo_bitops_cttz64) + m_len += lzo_bitops_cttz64(v) / CHAR_BIT; +#elif (LZO_ABI_LITTLE_ENDIAN) + if ((v & UCHAR_MAX) == 0) do { + v >>= CHAR_BIT; + m_len += 1; + } while ((v & UCHAR_MAX) == 0); +#else + if (ip[m_len] == m_pos[m_len]) do { + m_len += 1; + } while (ip[m_len] == m_pos[m_len]); +#endif +#elif (LZO_OPT_UNALIGNED32) + lzo_uint32_t v; + v = UA_GET_NE32(ip + m_len) ^ UA_GET_NE32(m_pos + m_len); + if __lzo_unlikely(v == 0) { + do { + m_len += 4; + v = UA_GET_NE32(ip + m_len) ^ UA_GET_NE32(m_pos + m_len); + if (v != 0) + break; + m_len += 4; + v = UA_GET_NE32(ip + m_len) ^ UA_GET_NE32(m_pos + m_len); + if __lzo_unlikely(ip + m_len >= ip_end) + goto m_len_done; + } while (v == 0); + } +#if (LZO_ABI_BIG_ENDIAN) && defined(lzo_bitops_ctlz32) + m_len += lzo_bitops_ctlz32(v) / CHAR_BIT; +#elif (LZO_ABI_BIG_ENDIAN) + if ((v >> (32 - CHAR_BIT)) == 0) do { + v <<= CHAR_BIT; + m_len += 1; + } while ((v >> (32 - CHAR_BIT)) == 0); +#elif (LZO_ABI_LITTLE_ENDIAN) && defined(lzo_bitops_cttz32) + m_len += lzo_bitops_cttz32(v) / CHAR_BIT; +#elif (LZO_ABI_LITTLE_ENDIAN) + if ((v & UCHAR_MAX) == 0) do { + v >>= CHAR_BIT; + m_len += 1; + } while ((v & UCHAR_MAX) == 0); +#else + if (ip[m_len] == m_pos[m_len]) do { + m_len += 1; + } while (ip[m_len] == m_pos[m_len]); +#endif +#else + if __lzo_unlikely(ip[m_len] == m_pos[m_len]) { + do { + m_len += 1; + if (ip[m_len] != m_pos[m_len]) + break; + m_len += 1; + if (ip[m_len] != m_pos[m_len]) + break; + m_len += 1; + if (ip[m_len] != m_pos[m_len]) + break; + m_len += 1; + if (ip[m_len] != m_pos[m_len]) + break; + m_len += 1; + if (ip[m_len] != m_pos[m_len]) + break; + m_len += 1; + if (ip[m_len] != m_pos[m_len]) + break; + m_len += 1; + if (ip[m_len] != m_pos[m_len]) + break; + m_len += 1; + if __lzo_unlikely(ip + m_len >= ip_end) + goto m_len_done; + } while (ip[m_len] == m_pos[m_len]); + } +#endif + } +m_len_done: + m_off = pd(ip,m_pos); + ip += m_len; + ii = ip; + if (m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET) + { + m_off -= 1; +#if defined(LZO1X) + *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2)); + *op++ = LZO_BYTE(m_off >> 3); +#elif defined(LZO1Y) + *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2)); + *op++ = LZO_BYTE(m_off >> 2); +#endif + } + else if (m_off <= M3_MAX_OFFSET) + { + m_off -= 1; + if (m_len <= M3_MAX_LEN) + *op++ = LZO_BYTE(M3_MARKER | (m_len - 2)); + else + { + m_len -= M3_MAX_LEN; + *op++ = M3_MARKER | 0; + while __lzo_unlikely(m_len > 255) + { + m_len -= 255; + UA_SET1(op, 0); + op++; + } + *op++ = LZO_BYTE(m_len); + } + *op++ = LZO_BYTE(m_off << 2); + *op++ = LZO_BYTE(m_off >> 6); + } + else + { + m_off -= 0x4000; + if (m_len <= M4_MAX_LEN) + *op++ = LZO_BYTE(M4_MARKER | ((m_off >> 11) & 8) | (m_len - 2)); + else + { + m_len -= M4_MAX_LEN; + *op++ = LZO_BYTE(M4_MARKER | ((m_off >> 11) & 8)); + while __lzo_unlikely(m_len > 255) + { + m_len -= 255; + UA_SET1(op, 0); + op++; + } + *op++ = LZO_BYTE(m_len); + } + *op++ = LZO_BYTE(m_off << 2); + *op++ = LZO_BYTE(m_off >> 6); + } + goto next; + } + + *out_len = pd(op, out); + return pd(in_end,ii-ti); +} + + +/*********************************************************************** +// public entry point +************************************************************************/ + +LZO_PUBLIC(int) +DO_COMPRESS ( const lzo_bytep in , lzo_uint in_len, + lzo_bytep out, lzo_uintp out_len, + lzo_voidp wrkmem ) +{ + const lzo_bytep ip = in; + lzo_bytep op = out; + lzo_uint l = in_len; + lzo_uint t = 0; + + while (l > 20) + { + lzo_uint ll = l; + lzo_uintptr_t ll_end; +#if 0 || (LZO_DETERMINISTIC) + ll = LZO_MIN(ll, 49152); +#endif + ll_end = (lzo_uintptr_t)ip + ll; + if ((ll_end + ((t + ll) >> 5)) <= ll_end || (const lzo_bytep)(ll_end + ((t + ll) >> 5)) <= ip + ll) + break; +#if (LZO_DETERMINISTIC) + lzo_memset(wrkmem, 0, ((lzo_uint)1 << D_BITS) * sizeof(lzo_dict_t)); +#endif + t = do_compress(ip,ll,op,out_len,t,wrkmem); + ip += ll; + op += *out_len; + l -= ll; + } + t += l; + + if (t > 0) + { + const lzo_bytep ii = in + in_len - t; + + if (op == out && t <= 238) + *op++ = LZO_BYTE(17 + t); + else if (t <= 3) + op[-2] = LZO_BYTE(op[-2] | t); + else if (t <= 18) + *op++ = LZO_BYTE(t - 3); + else + { + lzo_uint tt = t - 18; + + *op++ = 0; + while (tt > 255) + { + tt -= 255; + UA_SET1(op, 0); + op++; + } + assert(tt > 0); + *op++ = LZO_BYTE(tt); + } + UA_COPYN(op, ii, t); + op += t; + } + + *op++ = M4_MARKER | 1; + *op++ = 0; + *op++ = 0; + + *out_len = pd(op, out); + return LZO_E_OK; +} + + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo1x_d.ch b/tools/z64compress/src/enc/lzo/lzo1x_d.ch new file mode 100644 index 0000000..b6c6d99 --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo1x_d.ch @@ -0,0 +1,475 @@ +/* lzo1x_d.ch -- implementation of the LZO1X decompression algorithm + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +#include "lzo1_d.ch" + + +/*********************************************************************** +// decompress a block of data. +************************************************************************/ + +#if defined(DO_DECOMPRESS) +LZO_PUBLIC(int) +DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len, + lzo_bytep out, lzo_uintp out_len, + lzo_voidp wrkmem ) +#endif +{ + lzo_bytep op; + const lzo_bytep ip; + lzo_uint t; +#if defined(COPY_DICT) + lzo_uint m_off; + const lzo_bytep dict_end; +#else + const lzo_bytep m_pos; +#endif + + const lzo_bytep const ip_end = in + in_len; +#if defined(HAVE_ANY_OP) + lzo_bytep const op_end = out + *out_len; +#endif +#if defined(LZO1Z) + lzo_uint last_m_off = 0; +#endif + + LZO_UNUSED(wrkmem); + +#if defined(COPY_DICT) + if (dict) + { + if (dict_len > M4_MAX_OFFSET) + { + dict += dict_len - M4_MAX_OFFSET; + dict_len = M4_MAX_OFFSET; + } + dict_end = dict + dict_len; + } + else + { + dict_len = 0; + dict_end = NULL; + } +#endif /* COPY_DICT */ + + *out_len = 0; + + op = out; + ip = in; + + NEED_IP(1); + if (*ip > 17) + { + t = *ip++ - 17; + if (t < 4) + goto match_next; + assert(t > 0); NEED_OP(t); NEED_IP(t+3); + do *op++ = *ip++; while (--t > 0); + goto first_literal_run; + } + + for (;;) + { + NEED_IP(3); + t = *ip++; + if (t >= 16) + goto match; + /* a literal run */ + if (t == 0) + { + while (*ip == 0) + { + t += 255; + ip++; + TEST_IV(t); + NEED_IP(1); + } + t += 15 + *ip++; + } + /* copy literals */ + assert(t > 0); NEED_OP(t+3); NEED_IP(t+6); +#if (LZO_OPT_UNALIGNED64) && (LZO_OPT_UNALIGNED32) + t += 3; + if (t >= 8) do + { + UA_COPY8(op,ip); + op += 8; ip += 8; t -= 8; + } while (t >= 8); + if (t >= 4) + { + UA_COPY4(op,ip); + op += 4; ip += 4; t -= 4; + } + if (t > 0) + { + *op++ = *ip++; + if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } + } +#elif (LZO_OPT_UNALIGNED32) || (LZO_ALIGNED_OK_4) +#if !(LZO_OPT_UNALIGNED32) + if (PTR_ALIGNED2_4(op,ip)) + { +#endif + UA_COPY4(op,ip); + op += 4; ip += 4; + if (--t > 0) + { + if (t >= 4) + { + do { + UA_COPY4(op,ip); + op += 4; ip += 4; t -= 4; + } while (t >= 4); + if (t > 0) do *op++ = *ip++; while (--t > 0); + } + else + do *op++ = *ip++; while (--t > 0); + } +#if !(LZO_OPT_UNALIGNED32) + } + else +#endif +#endif +#if !(LZO_OPT_UNALIGNED32) + { + *op++ = *ip++; *op++ = *ip++; *op++ = *ip++; + do *op++ = *ip++; while (--t > 0); + } +#endif + + +first_literal_run: + + + t = *ip++; + if (t >= 16) + goto match; +#if defined(COPY_DICT) +#if defined(LZO1Z) + m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); + last_m_off = m_off; +#else + m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2); +#endif + NEED_OP(3); + t = 3; COPY_DICT(t,m_off) +#else /* !COPY_DICT */ +#if defined(LZO1Z) + t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2); + m_pos = op - t; + last_m_off = t; +#else + m_pos = op - (1 + M2_MAX_OFFSET); + m_pos -= t >> 2; + m_pos -= *ip++ << 2; +#endif + TEST_LB(m_pos); NEED_OP(3); + *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos; +#endif /* COPY_DICT */ + goto match_done; + + + /* handle matches */ + for (;;) { +match: + if (t >= 64) /* a M2 match */ + { +#if defined(COPY_DICT) +#if defined(LZO1X) + m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3); + t = (t >> 5) - 1; +#elif defined(LZO1Y) + m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2); + t = (t >> 4) - 3; +#elif defined(LZO1Z) + m_off = t & 0x1f; + if (m_off >= 0x1c) + m_off = last_m_off; + else + { + m_off = 1 + (m_off << 6) + (*ip++ >> 2); + last_m_off = m_off; + } + t = (t >> 5) - 1; +#endif +#else /* !COPY_DICT */ +#if defined(LZO1X) + m_pos = op - 1; + m_pos -= (t >> 2) & 7; + m_pos -= *ip++ << 3; + t = (t >> 5) - 1; +#elif defined(LZO1Y) + m_pos = op - 1; + m_pos -= (t >> 2) & 3; + m_pos -= *ip++ << 2; + t = (t >> 4) - 3; +#elif defined(LZO1Z) + { + lzo_uint off = t & 0x1f; + m_pos = op; + if (off >= 0x1c) + { + assert(last_m_off > 0); + m_pos -= last_m_off; + } + else + { + off = 1 + (off << 6) + (*ip++ >> 2); + m_pos -= off; + last_m_off = off; + } + } + t = (t >> 5) - 1; +#endif + TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); + goto copy_match; +#endif /* COPY_DICT */ + } + else if (t >= 32) /* a M3 match */ + { + t &= 31; + if (t == 0) + { + while (*ip == 0) + { + t += 255; + ip++; + TEST_OV(t); + NEED_IP(1); + } + t += 31 + *ip++; + NEED_IP(2); + } +#if defined(COPY_DICT) +#if defined(LZO1Z) + m_off = 1 + (ip[0] << 6) + (ip[1] >> 2); + last_m_off = m_off; +#else + m_off = 1 + (ip[0] >> 2) + (ip[1] << 6); +#endif +#else /* !COPY_DICT */ +#if defined(LZO1Z) + { + lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2); + m_pos = op - off; + last_m_off = off; + } +#elif (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN) + m_pos = op - 1; + m_pos -= UA_GET_LE16(ip) >> 2; +#else + m_pos = op - 1; + m_pos -= (ip[0] >> 2) + (ip[1] << 6); +#endif +#endif /* COPY_DICT */ + ip += 2; + } + else if (t >= 16) /* a M4 match */ + { +#if defined(COPY_DICT) + m_off = (t & 8) << 11; +#else /* !COPY_DICT */ + m_pos = op; + m_pos -= (t & 8) << 11; +#endif /* COPY_DICT */ + t &= 7; + if (t == 0) + { + while (*ip == 0) + { + t += 255; + ip++; + TEST_OV(t); + NEED_IP(1); + } + t += 7 + *ip++; + NEED_IP(2); + } +#if defined(COPY_DICT) +#if defined(LZO1Z) + m_off += (ip[0] << 6) + (ip[1] >> 2); +#else + m_off += (ip[0] >> 2) + (ip[1] << 6); +#endif + ip += 2; + if (m_off == 0) + goto eof_found; + m_off += 0x4000; +#if defined(LZO1Z) + last_m_off = m_off; +#endif +#else /* !COPY_DICT */ +#if defined(LZO1Z) + m_pos -= (ip[0] << 6) + (ip[1] >> 2); +#elif (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN) + m_pos -= UA_GET_LE16(ip) >> 2; +#else + m_pos -= (ip[0] >> 2) + (ip[1] << 6); +#endif + ip += 2; + if (m_pos == op) + goto eof_found; + m_pos -= 0x4000; +#if defined(LZO1Z) + last_m_off = pd((const lzo_bytep)op, m_pos); +#endif +#endif /* COPY_DICT */ + } + else /* a M1 match */ + { +#if defined(COPY_DICT) +#if defined(LZO1Z) + m_off = 1 + (t << 6) + (*ip++ >> 2); + last_m_off = m_off; +#else + m_off = 1 + (t >> 2) + (*ip++ << 2); +#endif + NEED_OP(2); + t = 2; COPY_DICT(t,m_off) +#else /* !COPY_DICT */ +#if defined(LZO1Z) + t = 1 + (t << 6) + (*ip++ >> 2); + m_pos = op - t; + last_m_off = t; +#else + m_pos = op - 1; + m_pos -= t >> 2; + m_pos -= *ip++ << 2; +#endif + TEST_LB(m_pos); NEED_OP(2); + *op++ = *m_pos++; *op++ = *m_pos; +#endif /* COPY_DICT */ + goto match_done; + } + + /* copy match */ +#if defined(COPY_DICT) + + NEED_OP(t+3-1); + t += 3-1; COPY_DICT(t,m_off) + +#else /* !COPY_DICT */ + + TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1); +#if (LZO_OPT_UNALIGNED64) && (LZO_OPT_UNALIGNED32) + if (op - m_pos >= 8) + { + t += (3 - 1); + if (t >= 8) do + { + UA_COPY8(op,m_pos); + op += 8; m_pos += 8; t -= 8; + } while (t >= 8); + if (t >= 4) + { + UA_COPY4(op,m_pos); + op += 4; m_pos += 4; t -= 4; + } + if (t > 0) + { + *op++ = m_pos[0]; + if (t > 1) { *op++ = m_pos[1]; if (t > 2) { *op++ = m_pos[2]; } } + } + } + else +#elif (LZO_OPT_UNALIGNED32) || (LZO_ALIGNED_OK_4) +#if !(LZO_OPT_UNALIGNED32) + if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos)) + { + assert((op - m_pos) >= 4); /* both pointers are aligned */ +#else + if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4) + { +#endif + UA_COPY4(op,m_pos); + op += 4; m_pos += 4; t -= 4 - (3 - 1); + do { + UA_COPY4(op,m_pos); + op += 4; m_pos += 4; t -= 4; + } while (t >= 4); + if (t > 0) do *op++ = *m_pos++; while (--t > 0); + } + else +#endif + { +copy_match: + *op++ = *m_pos++; *op++ = *m_pos++; + do *op++ = *m_pos++; while (--t > 0); + } + +#endif /* COPY_DICT */ + +match_done: +#if defined(LZO1Z) + t = ip[-1] & 3; +#else + t = ip[-2] & 3; +#endif + if (t == 0) + break; + + /* copy literals */ +match_next: + assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+3); +#if 0 + do *op++ = *ip++; while (--t > 0); +#else + *op++ = *ip++; + if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } } +#endif + t = *ip++; + } + } + +eof_found: + *out_len = pd(op, out); + return (ip == ip_end ? LZO_E_OK : + (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN)); + + +#if defined(HAVE_NEED_IP) +input_overrun: + *out_len = pd(op, out); + return LZO_E_INPUT_OVERRUN; +#endif + +#if defined(HAVE_NEED_OP) +output_overrun: + *out_len = pd(op, out); + return LZO_E_OUTPUT_OVERRUN; +#endif + +#if defined(LZO_TEST_OVERRUN_LOOKBEHIND) +lookbehind_overrun: + *out_len = pd(op, out); + return LZO_E_LOOKBEHIND_OVERRUN; +#endif +} + + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo1x_d1.c b/tools/z64compress/src/enc/lzo/lzo1x_d1.c new file mode 100644 index 0000000..68faf48 --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo1x_d1.c @@ -0,0 +1,36 @@ +/* lzo1x_d1.c -- LZO1X decompression + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +#include "config1x.h" + +#undef LZO_TEST_OVERRUN +#define DO_DECOMPRESS lzo1x_decompress + +#include "lzo1x_d.ch" + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo1x_d2.c b/tools/z64compress/src/enc/lzo/lzo1x_d2.c new file mode 100644 index 0000000..8b7c316 --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo1x_d2.c @@ -0,0 +1,61 @@ +/* lzo1x_d2.c -- LZO1X decompression with overrun testing + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +#include "config1x.h" + +#define LZO_TEST_OVERRUN 1 +#define DO_DECOMPRESS lzo1x_decompress_safe + +#include "lzo1x_d.ch" + +#if defined(LZO_ARCH_I386) && defined(LZO_USE_ASM) +LZO_EXTERN(int) lzo1x_decompress_asm_safe + (const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem); +LZO_PUBLIC(int) lzo1x_decompress_asm_safe + (const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem) +{ + return lzo1x_decompress_safe(src, src_len, dst, dst_len, wrkmem); +} +LZO_EXTERN(int) lzo1x_decompress_asm_fast_safe + (const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem); +LZO_PUBLIC(int) lzo1x_decompress_asm_fast_safe + (const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem) +{ + return lzo1x_decompress_safe(src, src_len, dst, dst_len, wrkmem); +} +#endif + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo1x_d3.c b/tools/z64compress/src/enc/lzo/lzo1x_d3.c new file mode 100644 index 0000000..b3d430f --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo1x_d3.c @@ -0,0 +1,93 @@ +/* lzo1x_d3.c -- LZO1X decompression with preset dictionary + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +#include "config1x.h" + +#define LZO_TEST_OVERRUN 1 + + +#define SLOW_MEMCPY(a,b,l) { do *a++ = *b++; while (--l > 0); } +#define FAST_MEMCPY(a,b,l) { lzo_memcpy(a,b,l); a += l; } + +#if 1 && defined(FAST_MEMCPY) +# define DICT_MEMMOVE(op,m_pos,m_len,m_off) \ + if (m_off >= (m_len)) \ + FAST_MEMCPY(op,m_pos,m_len) \ + else \ + SLOW_MEMCPY(op,m_pos,m_len) +#else +# define DICT_MEMMOVE(op,m_pos,m_len,m_off) \ + SLOW_MEMCPY(op,m_pos,m_len) +#endif + +#if !defined(FAST_MEMCPY) +# define FAST_MEMCPY SLOW_MEMCPY +#endif + + +#define COPY_DICT_DICT(m_len,m_off) \ + { \ + const lzo_bytep m_pos; \ + m_off -= pd(op, out); assert(m_off > 0); \ + if (m_off > dict_len) goto lookbehind_overrun; \ + m_pos = dict_end - m_off; \ + if (m_len > m_off) \ + { \ + m_len -= m_off; \ + FAST_MEMCPY(op,m_pos,m_off) \ + m_pos = out; \ + SLOW_MEMCPY(op,m_pos,m_len) \ + } \ + else \ + FAST_MEMCPY(op,m_pos,m_len) \ + } + +#define COPY_DICT(m_len,m_off) \ + assert(m_len >= 2); assert(m_off > 0); assert(op > out); \ + if (m_off <= pd(op, out)) \ + { \ + const lzo_bytep m_pos = op - m_off; \ + DICT_MEMMOVE(op,m_pos,m_len,m_off) \ + } \ + else \ + COPY_DICT_DICT(m_len,m_off) + + + + +LZO_PUBLIC(int) +lzo1x_decompress_dict_safe ( const lzo_bytep in, lzo_uint in_len, + lzo_bytep out, lzo_uintp out_len, + lzo_voidp wrkmem /* NOT USED */, + const lzo_bytep dict, lzo_uint dict_len) + + +#include "lzo1x_d.ch" + + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo_conf.h b/tools/z64compress/src/enc/lzo/lzo_conf.h new file mode 100644 index 0000000..fff021d --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo_conf.h @@ -0,0 +1,436 @@ +/* lzo_conf.h -- main internal configuration file for the the LZO library + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the library and is subject + to change. + */ + + +#ifndef __LZO_CONF_H +#define __LZO_CONF_H 1 + +#if !defined(__LZO_IN_MINILZO) +#if defined(LZO_CFG_FREESTANDING) && (LZO_CFG_FREESTANDING) +# define LZO_LIBC_FREESTANDING 1 +# define LZO_OS_FREESTANDING 1 +#endif +#if defined(LZO_CFG_EXTRA_CONFIG_HEADER) +# include LZO_CFG_EXTRA_CONFIG_HEADER +#endif +#if defined(__LZOCONF_H) || defined(__LZOCONF_H_INCLUDED) +# error "include this file first" +#endif +#if defined(LZO_CFG_BUILD_DLL) && (LZO_CFG_BUILD_DLL+0) && !defined(__LZO_EXPORT1) && !defined(__LZO_EXPORT2) && 0 + /* idea: we could auto-define __LZO_EXPORT1 for DLL exports */ +#ifndef __LZODEFS_H_INCLUDED +#if defined(LZO_HAVE_CONFIG_H) +# include <config.h> +#endif +#include <limits.h> +#include <stddef.h> +#include "lzodefs.h" +#endif + /* #define __LZO_EXPORT1 __attribute__((__visibility__("default"))) */ + /* #define __LZO_EXPORT1 __declspec(dllexport) */ +#endif +#include "lzoconf.h" +#if defined(LZO_CFG_EXTRA_CONFIG_HEADER2) +# include LZO_CFG_EXTRA_CONFIG_HEADER2 +#endif +#endif /* !defined(__LZO_IN_MINILZO) */ + +#if !defined(__LZOCONF_H_INCLUDED) || (LZO_VERSION+0 != 0x20a0) +# error "version mismatch" +#endif + + +/*********************************************************************** +// pragmas +************************************************************************/ + +#if (LZO_CC_MSC && (_MSC_VER >= 1000 && _MSC_VER < 1100)) + /* disable bogus "unreachable code" warnings */ +# pragma warning(disable: 4702) +#endif +#if (LZO_CC_MSC && (_MSC_VER >= 1000)) +# pragma warning(disable: 4127 4701) + /* disable warnings about inlining */ +# pragma warning(disable: 4514 4710 4711) +#endif +#if (LZO_CC_MSC && (_MSC_VER >= 1300)) + /* disable '-Wall' warnings in system header files */ +# pragma warning(disable: 4820) +#endif +#if (LZO_CC_MSC && (_MSC_VER >= 1800)) + /* disable '-Wall' warnings in system header files */ +# pragma warning(disable: 4746) +#endif +#if (LZO_CC_INTELC && (__INTEL_COMPILER >= 900)) + /* disable pedantic warnings in system header files */ +# pragma warning(disable: 1684) +#endif + +#if (LZO_CC_SUNPROC) +#if !defined(__cplusplus) +# pragma error_messages(off,E_END_OF_LOOP_CODE_NOT_REACHED) +# pragma error_messages(off,E_LOOP_NOT_ENTERED_AT_TOP) +# pragma error_messages(off,E_STATEMENT_NOT_REACHED) +#endif +#endif + + +/*********************************************************************** +// function types +************************************************************************/ + +#if !defined(__LZO_NOEXPORT1) +# define __LZO_NOEXPORT1 /*empty*/ +#endif +#if !defined(__LZO_NOEXPORT2) +# define __LZO_NOEXPORT2 /*empty*/ +#endif + +#if 1 +# define LZO_PUBLIC_DECL(r) LZO_EXTERN(r) +#endif +#if 1 +# define LZO_PUBLIC_IMPL(r) LZO_PUBLIC(r) +#endif +#if !defined(LZO_LOCAL_DECL) +# define LZO_LOCAL_DECL(r) __LZO_EXTERN_C LZO_LOCAL_IMPL(r) +#endif +#if !defined(LZO_LOCAL_IMPL) +# define LZO_LOCAL_IMPL(r) __LZO_NOEXPORT1 r __LZO_NOEXPORT2 __LZO_CDECL +#endif +#if 1 +# define LZO_STATIC_DECL(r) LZO_PRIVATE(r) +#endif +#if 1 +# define LZO_STATIC_IMPL(r) LZO_PRIVATE(r) +#endif + + +/*********************************************************************** +// +************************************************************************/ + +#if defined(__LZO_IN_MINILZO) || (LZO_CFG_FREESTANDING) +#elif 1 +# include <string.h> +#else +# define LZO_WANT_ACC_INCD_H 1 +#endif +#if defined(LZO_HAVE_CONFIG_H) +# define LZO_CFG_NO_CONFIG_HEADER 1 +#endif +#include "lzo_supp.h" + +/* Integral types */ +#if 1 || defined(lzo_int8_t) || defined(lzo_uint8_t) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int8_t) == 1) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint8_t) == 1) +#endif +#if 1 || defined(lzo_int16_t) || defined(lzo_uint16_t) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16_t) == 2) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint16_t) == 2) +#endif +#if 1 || defined(lzo_int32_t) || defined(lzo_uint32_t) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32_t) == 4) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint32_t) == 4) +#endif +#if defined(lzo_int64_t) || defined(lzo_uint64_t) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64_t) == 8) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint64_t) == 8) +#endif + +#if (LZO_CFG_FREESTANDING) +# undef HAVE_MEMCMP +# undef HAVE_MEMCPY +# undef HAVE_MEMMOVE +# undef HAVE_MEMSET +#endif + +#if !(HAVE_MEMCMP) +# undef memcmp +# define memcmp(a,b,c) lzo_memcmp(a,b,c) +#else +# undef lzo_memcmp +# define lzo_memcmp(a,b,c) memcmp(a,b,c) +#endif +#if !(HAVE_MEMCPY) +# undef memcpy +# define memcpy(a,b,c) lzo_memcpy(a,b,c) +#else +# undef lzo_memcpy +# define lzo_memcpy(a,b,c) memcpy(a,b,c) +#endif +#if !(HAVE_MEMMOVE) +# undef memmove +# define memmove(a,b,c) lzo_memmove(a,b,c) +#else +# undef lzo_memmove +# define lzo_memmove(a,b,c) memmove(a,b,c) +#endif +#if !(HAVE_MEMSET) +# undef memset +# define memset(a,b,c) lzo_memset(a,b,c) +#else +# undef lzo_memset +# define lzo_memset(a,b,c) memset(a,b,c) +#endif + +#undef NDEBUG +#if (LZO_CFG_FREESTANDING) +# undef LZO_DEBUG +# define NDEBUG 1 +# undef assert +# define assert(e) ((void)0) +#else +# if !defined(LZO_DEBUG) +# define NDEBUG 1 +# endif +# include <assert.h> +#endif + +#if 0 && defined(__BOUNDS_CHECKING_ON) +# include <unchecked.h> +#else +# define BOUNDS_CHECKING_OFF_DURING(stmt) stmt +# define BOUNDS_CHECKING_OFF_IN_EXPR(expr) (expr) +#endif + +#if (LZO_CFG_PGO) +# undef __lzo_likely +# undef __lzo_unlikely +# define __lzo_likely(e) (e) +# define __lzo_unlikely(e) (e) +#endif + +#undef _ +#undef __ +#undef ___ +#undef ____ +#undef _p0 +#undef _p1 +#undef _p2 +#undef _p3 +#undef _p4 +#undef _s0 +#undef _s1 +#undef _s2 +#undef _s3 +#undef _s4 +#undef _ww + + +/*********************************************************************** +// +************************************************************************/ + +#if 1 +# define LZO_BYTE(x) ((unsigned char) (x)) +#else +# define LZO_BYTE(x) ((unsigned char) ((x) & 0xff)) +#endif + +#define LZO_MAX(a,b) ((a) >= (b) ? (a) : (b)) +#define LZO_MIN(a,b) ((a) <= (b) ? (a) : (b)) +#define LZO_MAX3(a,b,c) ((a) >= (b) ? LZO_MAX(a,c) : LZO_MAX(b,c)) +#define LZO_MIN3(a,b,c) ((a) <= (b) ? LZO_MIN(a,c) : LZO_MIN(b,c)) + +#define lzo_sizeof(type) ((lzo_uint) (sizeof(type))) + +#define LZO_HIGH(array) ((lzo_uint) (sizeof(array)/sizeof(*(array)))) + +/* this always fits into 32 bits */ +#define LZO_SIZE(bits) (1u << (bits)) +#define LZO_MASK(bits) (LZO_SIZE(bits) - 1) + +#define LZO_USIZE(bits) ((lzo_uint) 1 << (bits)) +#define LZO_UMASK(bits) (LZO_USIZE(bits) - 1) + +#if !defined(DMUL) +#if 0 + /* 32*32 multiplies may be faster than 64*64 on some 64-bit machines, + * but then we need extra casts from unsigned<->size_t */ +# define DMUL(a,b) ((lzo_xint) ((lzo_uint32_t)(a) * (lzo_uint32_t)(b))) +#else +# define DMUL(a,b) ((lzo_xint) ((a) * (b))) +#endif +#endif + + +/*********************************************************************** +// compiler and architecture specific stuff +************************************************************************/ + +/* Some defines that indicate if memory can be accessed at unaligned + * memory addresses. You should also test that this is actually faster + * even if it is allowed by your system. + */ + +#include "lzo_func.h" + +#ifndef UA_SET1 +#define UA_SET1 LZO_MEMOPS_SET1 +#endif +#ifndef UA_SET2 +#define UA_SET2 LZO_MEMOPS_SET2 +#endif +#ifndef UA_SET3 +#define UA_SET3 LZO_MEMOPS_SET3 +#endif +#ifndef UA_SET4 +#define UA_SET4 LZO_MEMOPS_SET4 +#endif +#ifndef UA_MOVE1 +#define UA_MOVE1 LZO_MEMOPS_MOVE1 +#endif +#ifndef UA_MOVE2 +#define UA_MOVE2 LZO_MEMOPS_MOVE2 +#endif +#ifndef UA_MOVE3 +#define UA_MOVE3 LZO_MEMOPS_MOVE3 +#endif +#ifndef UA_MOVE4 +#define UA_MOVE4 LZO_MEMOPS_MOVE4 +#endif +#ifndef UA_MOVE8 +#define UA_MOVE8 LZO_MEMOPS_MOVE8 +#endif +#ifndef UA_COPY1 +#define UA_COPY1 LZO_MEMOPS_COPY1 +#endif +#ifndef UA_COPY2 +#define UA_COPY2 LZO_MEMOPS_COPY2 +#endif +#ifndef UA_COPY3 +#define UA_COPY3 LZO_MEMOPS_COPY3 +#endif +#ifndef UA_COPY4 +#define UA_COPY4 LZO_MEMOPS_COPY4 +#endif +#ifndef UA_COPY8 +#define UA_COPY8 LZO_MEMOPS_COPY8 +#endif +#ifndef UA_COPYN +#define UA_COPYN LZO_MEMOPS_COPYN +#endif +#ifndef UA_COPYN_X +#define UA_COPYN_X LZO_MEMOPS_COPYN +#endif +#ifndef UA_GET_LE16 +#define UA_GET_LE16 LZO_MEMOPS_GET_LE16 +#endif +#ifndef UA_GET_LE32 +#define UA_GET_LE32 LZO_MEMOPS_GET_LE32 +#endif +#ifdef LZO_MEMOPS_GET_LE64 +#ifndef UA_GET_LE64 +#define UA_GET_LE64 LZO_MEMOPS_GET_LE64 +#endif +#endif +#ifndef UA_GET_NE16 +#define UA_GET_NE16 LZO_MEMOPS_GET_NE16 +#endif +#ifndef UA_GET_NE32 +#define UA_GET_NE32 LZO_MEMOPS_GET_NE32 +#endif +#ifdef LZO_MEMOPS_GET_NE64 +#ifndef UA_GET_NE64 +#define UA_GET_NE64 LZO_MEMOPS_GET_NE64 +#endif +#endif +#ifndef UA_PUT_LE16 +#define UA_PUT_LE16 LZO_MEMOPS_PUT_LE16 +#endif +#ifndef UA_PUT_LE32 +#define UA_PUT_LE32 LZO_MEMOPS_PUT_LE32 +#endif +#ifndef UA_PUT_NE16 +#define UA_PUT_NE16 LZO_MEMOPS_PUT_NE16 +#endif +#ifndef UA_PUT_NE32 +#define UA_PUT_NE32 LZO_MEMOPS_PUT_NE32 +#endif + + +/* Fast memcpy that copies multiples of 8 byte chunks. + * len is the number of bytes. + * note: all parameters must be lvalues, len >= 8 + * dest and src advance, len is undefined afterwards + */ + +#define MEMCPY8_DS(dest,src,len) \ + lzo_memcpy(dest,src,len); dest += len; src += len + +#define BZERO8_PTR(s,l,n) \ + lzo_memset((lzo_voidp)(s),0,(lzo_uint)(l)*(n)) + +#define MEMCPY_DS(dest,src,len) \ + do *dest++ = *src++; while (--len > 0) + + +/*********************************************************************** +// +************************************************************************/ + +LZO_EXTERN(const lzo_bytep) lzo_copyright(void); + +#include "lzo_ptr.h" + +/* Generate compressed data in a deterministic way. + * This is fully portable, and compression can be faster as well. + * A reason NOT to be deterministic is when the block size is + * very small (e.g. 8kB) or the dictionary is big, because + * then the initialization of the dictionary becomes a relevant + * magnitude for compression speed. + */ +#ifndef LZO_DETERMINISTIC +#define LZO_DETERMINISTIC 1 +#endif + + +#ifndef LZO_DICT_USE_PTR +#define LZO_DICT_USE_PTR 1 +#endif + +#if (LZO_DICT_USE_PTR) +# define lzo_dict_t const lzo_bytep +# define lzo_dict_p lzo_dict_t * +#else +# define lzo_dict_t lzo_uint +# define lzo_dict_p lzo_dict_t * +#endif + + +#endif /* already included */ + + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo_dict.h b/tools/z64compress/src/enc/lzo/lzo_dict.h new file mode 100644 index 0000000..e48addb --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo_dict.h @@ -0,0 +1,307 @@ +/* lzo_dict.h -- dictionary definitions for the the LZO library + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the library and is subject + to change. + */ + + +#ifndef __LZO_DICT_H +#define __LZO_DICT_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + + + +/*********************************************************************** +// dictionary size +************************************************************************/ + +/* dictionary needed for compression */ +#if !defined(D_BITS) && defined(DBITS) +# define D_BITS DBITS +#endif +#if !defined(D_BITS) +# error "D_BITS is not defined" +#endif +#if (D_BITS < 16) +# define D_SIZE LZO_SIZE(D_BITS) +# define D_MASK LZO_MASK(D_BITS) +#else +# define D_SIZE LZO_USIZE(D_BITS) +# define D_MASK LZO_UMASK(D_BITS) +#endif +#define D_HIGH ((D_MASK >> 1) + 1) + + +/* dictionary depth */ +#if !defined(DD_BITS) +# define DD_BITS 0 +#endif +#define DD_SIZE LZO_SIZE(DD_BITS) +#define DD_MASK LZO_MASK(DD_BITS) + +/* dictionary length */ +#if !defined(DL_BITS) +# define DL_BITS (D_BITS - DD_BITS) +#endif +#if (DL_BITS < 16) +# define DL_SIZE LZO_SIZE(DL_BITS) +# define DL_MASK LZO_MASK(DL_BITS) +#else +# define DL_SIZE LZO_USIZE(DL_BITS) +# define DL_MASK LZO_UMASK(DL_BITS) +#endif + + +#if (D_BITS != DL_BITS + DD_BITS) +# error "D_BITS does not match" +#endif +#if (D_BITS < 6 || D_BITS > 18) +# error "invalid D_BITS" +#endif +#if (DL_BITS < 6 || DL_BITS > 20) +# error "invalid DL_BITS" +#endif +#if (DD_BITS < 0 || DD_BITS > 6) +# error "invalid DD_BITS" +#endif + + +#if !defined(DL_MIN_LEN) +# define DL_MIN_LEN 3 +#endif +#if !defined(DL_SHIFT) +# define DL_SHIFT ((DL_BITS + (DL_MIN_LEN - 1)) / DL_MIN_LEN) +#endif + + + +/*********************************************************************** +// dictionary access +************************************************************************/ + +#define LZO_HASH_GZIP 1 +#define LZO_HASH_GZIP_INCREMENTAL 2 +#define LZO_HASH_LZO_INCREMENTAL_A 3 +#define LZO_HASH_LZO_INCREMENTAL_B 4 + +#if !defined(LZO_HASH) +# error "choose a hashing strategy" +#endif + +#undef DM +#undef DX + +#if (DL_MIN_LEN == 3) +# define _DV2_A(p,shift1,shift2) \ + (((( (lzo_xint)((p)[0]) << shift1) ^ (p)[1]) << shift2) ^ (p)[2]) +# define _DV2_B(p,shift1,shift2) \ + (((( (lzo_xint)((p)[2]) << shift1) ^ (p)[1]) << shift2) ^ (p)[0]) +# define _DV3_B(p,shift1,shift2,shift3) \ + ((_DV2_B((p)+1,shift1,shift2) << (shift3)) ^ (p)[0]) +#elif (DL_MIN_LEN == 2) +# define _DV2_A(p,shift1,shift2) \ + (( (lzo_xint)(p[0]) << shift1) ^ p[1]) +# define _DV2_B(p,shift1,shift2) \ + (( (lzo_xint)(p[1]) << shift1) ^ p[2]) +#else +# error "invalid DL_MIN_LEN" +#endif +#define _DV_A(p,shift) _DV2_A(p,shift,shift) +#define _DV_B(p,shift) _DV2_B(p,shift,shift) +#define DA2(p,s1,s2) \ + (((((lzo_xint)((p)[2]) << (s2)) + (p)[1]) << (s1)) + (p)[0]) +#define DS2(p,s1,s2) \ + (((((lzo_xint)((p)[2]) << (s2)) - (p)[1]) << (s1)) - (p)[0]) +#define DX2(p,s1,s2) \ + (((((lzo_xint)((p)[2]) << (s2)) ^ (p)[1]) << (s1)) ^ (p)[0]) +#define DA3(p,s1,s2,s3) ((DA2((p)+1,s2,s3) << (s1)) + (p)[0]) +#define DS3(p,s1,s2,s3) ((DS2((p)+1,s2,s3) << (s1)) - (p)[0]) +#define DX3(p,s1,s2,s3) ((DX2((p)+1,s2,s3) << (s1)) ^ (p)[0]) +#define DMS(v,s) ((lzo_uint) (((v) & (D_MASK >> (s))) << (s))) +#define DM(v) DMS(v,0) + + +#if (LZO_HASH == LZO_HASH_GZIP) + /* hash function like in gzip/zlib (deflate) */ +# define _DINDEX(dv,p) (_DV_A((p),DL_SHIFT)) + +#elif (LZO_HASH == LZO_HASH_GZIP_INCREMENTAL) + /* incremental hash like in gzip/zlib (deflate) */ +# define __LZO_HASH_INCREMENTAL 1 +# define DVAL_FIRST(dv,p) dv = _DV_A((p),DL_SHIFT) +# define DVAL_NEXT(dv,p) dv = (((dv) << DL_SHIFT) ^ p[2]) +# define _DINDEX(dv,p) (dv) +# define DVAL_LOOKAHEAD DL_MIN_LEN + +#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_A) + /* incremental LZO hash version A */ +# define __LZO_HASH_INCREMENTAL 1 +# define DVAL_FIRST(dv,p) dv = _DV_A((p),5) +# define DVAL_NEXT(dv,p) \ + dv ^= (lzo_xint)(p[-1]) << (2*5); dv = (((dv) << 5) ^ p[2]) +# define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5) +# define DVAL_LOOKAHEAD DL_MIN_LEN + +#elif (LZO_HASH == LZO_HASH_LZO_INCREMENTAL_B) + /* incremental LZO hash version B */ +# define __LZO_HASH_INCREMENTAL 1 +# define DVAL_FIRST(dv,p) dv = _DV_B((p),5) +# define DVAL_NEXT(dv,p) \ + dv ^= p[-1]; dv = (((dv) >> 5) ^ ((lzo_xint)(p[2]) << (2*5))) +# define _DINDEX(dv,p) ((DMUL(0x9f5f,dv)) >> 5) +# define DVAL_LOOKAHEAD DL_MIN_LEN + +#else +# error "choose a hashing strategy" +#endif + + +#ifndef DINDEX +#define DINDEX(dv,p) ((lzo_uint)((_DINDEX(dv,p)) & DL_MASK) << DD_BITS) +#endif +#if !defined(DINDEX1) && defined(D_INDEX1) +#define DINDEX1 D_INDEX1 +#endif +#if !defined(DINDEX2) && defined(D_INDEX2) +#define DINDEX2 D_INDEX2 +#endif + + + +#if !defined(__LZO_HASH_INCREMENTAL) +# define DVAL_FIRST(dv,p) ((void) 0) +# define DVAL_NEXT(dv,p) ((void) 0) +# define DVAL_LOOKAHEAD 0 +#endif + + +#if !defined(DVAL_ASSERT) +#if defined(__LZO_HASH_INCREMENTAL) && !defined(NDEBUG) +#if 1 && (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || (LZO_CC_GNUC >= 0x020700ul) || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) +static void __attribute__((__unused__)) +#else +static void +#endif +DVAL_ASSERT(lzo_xint dv, const lzo_bytep p) +{ + lzo_xint df; + DVAL_FIRST(df,(p)); + assert(DINDEX(dv,p) == DINDEX(df,p)); +} +#else +# define DVAL_ASSERT(dv,p) ((void) 0) +#endif +#endif + + + +/*********************************************************************** +// dictionary updating +************************************************************************/ + +#if (LZO_DICT_USE_PTR) +# define DENTRY(p,in) (p) +# define GINDEX(m_pos,m_off,dict,dindex,in) m_pos = dict[dindex] +#else +# define DENTRY(p,in) ((lzo_dict_t) pd(p, in)) +# define GINDEX(m_pos,m_off,dict,dindex,in) m_off = dict[dindex] +#endif + + +#if (DD_BITS == 0) + +# define UPDATE_D(dict,drun,dv,p,in) dict[ DINDEX(dv,p) ] = DENTRY(p,in) +# define UPDATE_I(dict,drun,index,p,in) dict[index] = DENTRY(p,in) +# define UPDATE_P(ptr,drun,p,in) (ptr)[0] = DENTRY(p,in) + +#else + +# define UPDATE_D(dict,drun,dv,p,in) \ + dict[ DINDEX(dv,p) + drun++ ] = DENTRY(p,in); drun &= DD_MASK +# define UPDATE_I(dict,drun,index,p,in) \ + dict[ (index) + drun++ ] = DENTRY(p,in); drun &= DD_MASK +# define UPDATE_P(ptr,drun,p,in) \ + (ptr) [ drun++ ] = DENTRY(p,in); drun &= DD_MASK + +#endif + + +/*********************************************************************** +// test for a match +************************************************************************/ + +#if (LZO_DICT_USE_PTR) + +/* m_pos is either NULL or a valid pointer */ +#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ + (m_pos == NULL || (m_off = pd(ip, m_pos)) > max_offset) + +/* m_pos may point anywhere... */ +#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ + (BOUNDS_CHECKING_OFF_IN_EXPR(( \ + m_pos = ip - (lzo_uint) PTR_DIFF(ip,m_pos), \ + PTR_LT(m_pos,in) || \ + (m_off = (lzo_uint) PTR_DIFF(ip,m_pos)) == 0 || \ + m_off > max_offset ))) + +#else + +#define LZO_CHECK_MPOS_DET(m_pos,m_off,in,ip,max_offset) \ + (m_off == 0 || \ + ((m_off = pd(ip, in) - m_off) > max_offset) || \ + (m_pos = (ip) - (m_off), 0) ) + +#define LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,max_offset) \ + (pd(ip, in) <= m_off || \ + ((m_off = pd(ip, in) - m_off) > max_offset) || \ + (m_pos = (ip) - (m_off), 0) ) + +#endif + + +#if (LZO_DETERMINISTIC) +# define LZO_CHECK_MPOS LZO_CHECK_MPOS_DET +#else +# define LZO_CHECK_MPOS LZO_CHECK_MPOS_NON_DET +#endif + + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* already included */ + + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo_func.h b/tools/z64compress/src/enc/lzo/lzo_func.h new file mode 100644 index 0000000..f3ac8e3 --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo_func.h @@ -0,0 +1,491 @@ +/* lzo_func.h -- functions + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the library and is subject + to change. + */ + + +#ifndef __LZO_FUNC_H +#define __LZO_FUNC_H 1 + + +/*********************************************************************** +// bitops +************************************************************************/ + +#if !defined(LZO_BITOPS_USE_ASM_BITSCAN) && !defined(LZO_BITOPS_USE_GNUC_BITSCAN) && !defined(LZO_BITOPS_USE_MSC_BITSCAN) +#if 1 && (LZO_ARCH_AMD64) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_ASM_SYNTAX_GNUC) +#define LZO_BITOPS_USE_ASM_BITSCAN 1 +#elif (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x030400ul) || (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 1000)) || (LZO_CC_LLVM && (!defined(__llvm_tools_version__) || (__llvm_tools_version__+0 >= 0x010500ul)))) +#define LZO_BITOPS_USE_GNUC_BITSCAN 1 +#elif (LZO_OS_WIN32 || LZO_OS_WIN64) && ((LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 1010)) || (LZO_CC_MSC && (_MSC_VER >= 1400))) +#define LZO_BITOPS_USE_MSC_BITSCAN 1 +#if (LZO_CC_MSC) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) +#include <intrin.h> +#endif +#if (LZO_CC_MSC) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) +#pragma intrinsic(_BitScanReverse) +#pragma intrinsic(_BitScanForward) +#endif +#if (LZO_CC_MSC) && (LZO_ARCH_AMD64) +#pragma intrinsic(_BitScanReverse64) +#pragma intrinsic(_BitScanForward64) +#endif +#endif +#endif + +__lzo_static_forceinline unsigned lzo_bitops_ctlz32_func(lzo_uint32_t v) +{ +#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) + unsigned long r; (void) _BitScanReverse(&r, v); return (unsigned) r ^ 31; +#define lzo_bitops_ctlz32(v) lzo_bitops_ctlz32_func(v) +#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC) + lzo_uint32_t r; + __asm__("bsr %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC); + return (unsigned) r ^ 31; +#define lzo_bitops_ctlz32(v) lzo_bitops_ctlz32_func(v) +#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_INT == 4) + unsigned r; r = (unsigned) __builtin_clz(v); return r; +#define lzo_bitops_ctlz32(v) ((unsigned) __builtin_clz(v)) +#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG == 8) && (LZO_WORDSIZE >= 8) + unsigned r; r = (unsigned) __builtin_clzl(v); return r ^ 32; +#define lzo_bitops_ctlz32(v) (((unsigned) __builtin_clzl(v)) ^ 32) +#else + LZO_UNUSED(v); return 0; +#endif +} + +#if defined(lzo_uint64_t) +__lzo_static_forceinline unsigned lzo_bitops_ctlz64_func(lzo_uint64_t v) +{ +#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64) + unsigned long r; (void) _BitScanReverse64(&r, v); return (unsigned) r ^ 63; +#define lzo_bitops_ctlz64(v) lzo_bitops_ctlz64_func(v) +#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64) && (LZO_ASM_SYNTAX_GNUC) + lzo_uint64_t r; + __asm__("bsr %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC); + return (unsigned) r ^ 63; +#define lzo_bitops_ctlz64(v) lzo_bitops_ctlz64_func(v) +#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG == 8) && (LZO_WORDSIZE >= 8) + unsigned r; r = (unsigned) __builtin_clzl(v); return r; +#define lzo_bitops_ctlz64(v) ((unsigned) __builtin_clzl(v)) +#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG_LONG == 8) && (LZO_WORDSIZE >= 8) + unsigned r; r = (unsigned) __builtin_clzll(v); return r; +#define lzo_bitops_ctlz64(v) ((unsigned) __builtin_clzll(v)) +#else + LZO_UNUSED(v); return 0; +#endif +} +#endif + +__lzo_static_forceinline unsigned lzo_bitops_cttz32_func(lzo_uint32_t v) +{ +#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) + unsigned long r; (void) _BitScanForward(&r, v); return (unsigned) r; +#define lzo_bitops_cttz32(v) lzo_bitops_cttz32_func(v) +#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC) + lzo_uint32_t r; + __asm__("bsf %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC); + return (unsigned) r; +#define lzo_bitops_cttz32(v) lzo_bitops_cttz32_func(v) +#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_INT >= 4) + unsigned r; r = (unsigned) __builtin_ctz(v); return r; +#define lzo_bitops_cttz32(v) ((unsigned) __builtin_ctz(v)) +#else + LZO_UNUSED(v); return 0; +#endif +} + +#if defined(lzo_uint64_t) +__lzo_static_forceinline unsigned lzo_bitops_cttz64_func(lzo_uint64_t v) +{ +#if (LZO_BITOPS_USE_MSC_BITSCAN) && (LZO_ARCH_AMD64) + unsigned long r; (void) _BitScanForward64(&r, v); return (unsigned) r; +#define lzo_bitops_cttz64(v) lzo_bitops_cttz64_func(v) +#elif (LZO_BITOPS_USE_ASM_BITSCAN) && (LZO_ARCH_AMD64) && (LZO_ASM_SYNTAX_GNUC) + lzo_uint64_t r; + __asm__("bsf %1,%0" : "=r" (r) : "rm" (v) __LZO_ASM_CLOBBER_LIST_CC); + return (unsigned) r; +#define lzo_bitops_cttz64(v) lzo_bitops_cttz64_func(v) +#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG >= 8) && (LZO_WORDSIZE >= 8) + unsigned r; r = (unsigned) __builtin_ctzl(v); return r; +#define lzo_bitops_cttz64(v) ((unsigned) __builtin_ctzl(v)) +#elif (LZO_BITOPS_USE_GNUC_BITSCAN) && (LZO_SIZEOF_LONG_LONG >= 8) && (LZO_WORDSIZE >= 8) + unsigned r; r = (unsigned) __builtin_ctzll(v); return r; +#define lzo_bitops_cttz64(v) ((unsigned) __builtin_ctzll(v)) +#else + LZO_UNUSED(v); return 0; +#endif +} +#endif + +lzo_unused_funcs_impl(void, lzo_bitops_unused_funcs)(void) +{ + LZO_UNUSED_FUNC(lzo_bitops_unused_funcs); + LZO_UNUSED_FUNC(lzo_bitops_ctlz32_func); + LZO_UNUSED_FUNC(lzo_bitops_cttz32_func); +#if defined(lzo_uint64_t) + LZO_UNUSED_FUNC(lzo_bitops_ctlz64_func); + LZO_UNUSED_FUNC(lzo_bitops_cttz64_func); +#endif +} + + +/*********************************************************************** +// memops +************************************************************************/ + +#if defined(__lzo_alignof) && !(LZO_CFG_NO_UNALIGNED) +/* CBUG: disabled because of gcc bug 64516 */ +#if !defined(lzo_memops_tcheck__) && 0 +#define lzo_memops_tcheck__(t,a,b) ((void)0, sizeof(t) == (a) && __lzo_alignof(t) == (b)) +#endif +#endif +#ifndef lzo_memops_TU0p +#define lzo_memops_TU0p void __LZO_MMODEL * +#endif +#ifndef lzo_memops_TU1p +#define lzo_memops_TU1p unsigned char __LZO_MMODEL * +#endif +#ifndef lzo_memops_TU2p +#if (LZO_OPT_UNALIGNED16) +typedef lzo_uint16_t __lzo_may_alias lzo_memops_TU2; +#define lzo_memops_TU2p volatile lzo_memops_TU2 * +#elif defined(__lzo_byte_struct) +__lzo_byte_struct(lzo_memops_TU2_struct,2) +typedef struct lzo_memops_TU2_struct lzo_memops_TU2; +#else +struct lzo_memops_TU2_struct { unsigned char a[2]; } __lzo_may_alias; +typedef struct lzo_memops_TU2_struct lzo_memops_TU2; +#endif +#ifndef lzo_memops_TU2p +#define lzo_memops_TU2p lzo_memops_TU2 * +#endif +#endif +#ifndef lzo_memops_TU4p +#if (LZO_OPT_UNALIGNED32) +typedef lzo_uint32_t __lzo_may_alias lzo_memops_TU4; +#define lzo_memops_TU4p volatile lzo_memops_TU4 __LZO_MMODEL * +#elif defined(__lzo_byte_struct) +__lzo_byte_struct(lzo_memops_TU4_struct,4) +typedef struct lzo_memops_TU4_struct lzo_memops_TU4; +#else +struct lzo_memops_TU4_struct { unsigned char a[4]; } __lzo_may_alias; +typedef struct lzo_memops_TU4_struct lzo_memops_TU4; +#endif +#ifndef lzo_memops_TU4p +#define lzo_memops_TU4p lzo_memops_TU4 __LZO_MMODEL * +#endif +#endif +#ifndef lzo_memops_TU8p +#if (LZO_OPT_UNALIGNED64) +typedef lzo_uint64_t __lzo_may_alias lzo_memops_TU8; +#define lzo_memops_TU8p volatile lzo_memops_TU8 __LZO_MMODEL * +#elif defined(__lzo_byte_struct) +__lzo_byte_struct(lzo_memops_TU8_struct,8) +typedef struct lzo_memops_TU8_struct lzo_memops_TU8; +#else +struct lzo_memops_TU8_struct { unsigned char a[8]; } __lzo_may_alias; +typedef struct lzo_memops_TU8_struct lzo_memops_TU8; +#endif +#ifndef lzo_memops_TU8p +#define lzo_memops_TU8p lzo_memops_TU8 __LZO_MMODEL * +#endif +#endif +#ifndef lzo_memops_set_TU1p +#define lzo_memops_set_TU1p volatile lzo_memops_TU1p +#endif +#ifndef lzo_memops_move_TU1p +#define lzo_memops_move_TU1p lzo_memops_TU1p +#endif +#define LZO_MEMOPS_SET1(dd,cc) \ + LZO_BLOCK_BEGIN \ + lzo_memops_set_TU1p d__1 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \ + d__1[0] = LZO_BYTE(cc); \ + LZO_BLOCK_END +#define LZO_MEMOPS_SET2(dd,cc) \ + LZO_BLOCK_BEGIN \ + lzo_memops_set_TU1p d__2 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \ + d__2[0] = LZO_BYTE(cc); d__2[1] = LZO_BYTE(cc); \ + LZO_BLOCK_END +#define LZO_MEMOPS_SET3(dd,cc) \ + LZO_BLOCK_BEGIN \ + lzo_memops_set_TU1p d__3 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \ + d__3[0] = LZO_BYTE(cc); d__3[1] = LZO_BYTE(cc); d__3[2] = LZO_BYTE(cc); \ + LZO_BLOCK_END +#define LZO_MEMOPS_SET4(dd,cc) \ + LZO_BLOCK_BEGIN \ + lzo_memops_set_TU1p d__4 = (lzo_memops_set_TU1p) (lzo_memops_TU0p) (dd); \ + d__4[0] = LZO_BYTE(cc); d__4[1] = LZO_BYTE(cc); d__4[2] = LZO_BYTE(cc); d__4[3] = LZO_BYTE(cc); \ + LZO_BLOCK_END +#define LZO_MEMOPS_MOVE1(dd,ss) \ + LZO_BLOCK_BEGIN \ + lzo_memops_move_TU1p d__1 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \ + const lzo_memops_move_TU1p s__1 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \ + d__1[0] = s__1[0]; \ + LZO_BLOCK_END +#define LZO_MEMOPS_MOVE2(dd,ss) \ + LZO_BLOCK_BEGIN \ + lzo_memops_move_TU1p d__2 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \ + const lzo_memops_move_TU1p s__2 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \ + d__2[0] = s__2[0]; d__2[1] = s__2[1]; \ + LZO_BLOCK_END +#define LZO_MEMOPS_MOVE3(dd,ss) \ + LZO_BLOCK_BEGIN \ + lzo_memops_move_TU1p d__3 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \ + const lzo_memops_move_TU1p s__3 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \ + d__3[0] = s__3[0]; d__3[1] = s__3[1]; d__3[2] = s__3[2]; \ + LZO_BLOCK_END +#define LZO_MEMOPS_MOVE4(dd,ss) \ + LZO_BLOCK_BEGIN \ + lzo_memops_move_TU1p d__4 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \ + const lzo_memops_move_TU1p s__4 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \ + d__4[0] = s__4[0]; d__4[1] = s__4[1]; d__4[2] = s__4[2]; d__4[3] = s__4[3]; \ + LZO_BLOCK_END +#define LZO_MEMOPS_MOVE8(dd,ss) \ + LZO_BLOCK_BEGIN \ + lzo_memops_move_TU1p d__8 = (lzo_memops_move_TU1p) (lzo_memops_TU0p) (dd); \ + const lzo_memops_move_TU1p s__8 = (const lzo_memops_move_TU1p) (const lzo_memops_TU0p) (ss); \ + d__8[0] = s__8[0]; d__8[1] = s__8[1]; d__8[2] = s__8[2]; d__8[3] = s__8[3]; \ + d__8[4] = s__8[4]; d__8[5] = s__8[5]; d__8[6] = s__8[6]; d__8[7] = s__8[7]; \ + LZO_BLOCK_END +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU1p)0)==1) +#define LZO_MEMOPS_COPY1(dd,ss) LZO_MEMOPS_MOVE1(dd,ss) +#if (LZO_OPT_UNALIGNED16) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU2p)0)==2) +#define LZO_MEMOPS_COPY2(dd,ss) \ + * (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss) +#elif defined(lzo_memops_tcheck__) +#define LZO_MEMOPS_COPY2(dd,ss) \ + LZO_BLOCK_BEGIN if (lzo_memops_tcheck__(lzo_memops_TU2,2,1)) { \ + * (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss); \ + } else { LZO_MEMOPS_MOVE2(dd,ss); } LZO_BLOCK_END +#else +#define LZO_MEMOPS_COPY2(dd,ss) LZO_MEMOPS_MOVE2(dd,ss) +#endif +#if (LZO_OPT_UNALIGNED32) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU4p)0)==4) +#define LZO_MEMOPS_COPY4(dd,ss) \ + * (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss) +#elif defined(lzo_memops_tcheck__) +#define LZO_MEMOPS_COPY4(dd,ss) \ + LZO_BLOCK_BEGIN if (lzo_memops_tcheck__(lzo_memops_TU4,4,1)) { \ + * (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss); \ + } else { LZO_MEMOPS_MOVE4(dd,ss); } LZO_BLOCK_END +#else +#define LZO_MEMOPS_COPY4(dd,ss) LZO_MEMOPS_MOVE4(dd,ss) +#endif +#if (LZO_WORDSIZE != 8) +#define LZO_MEMOPS_COPY8(dd,ss) \ + LZO_BLOCK_BEGIN LZO_MEMOPS_COPY4(dd,ss); LZO_MEMOPS_COPY4((lzo_memops_TU1p)(lzo_memops_TU0p)(dd)+4,(const lzo_memops_TU1p)(const lzo_memops_TU0p)(ss)+4); LZO_BLOCK_END +#else +#if (LZO_OPT_UNALIGNED64) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU8p)0)==8) +#define LZO_MEMOPS_COPY8(dd,ss) \ + * (lzo_memops_TU8p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss) +#elif (LZO_OPT_UNALIGNED32) +#define LZO_MEMOPS_COPY8(dd,ss) \ + LZO_BLOCK_BEGIN LZO_MEMOPS_COPY4(dd,ss); LZO_MEMOPS_COPY4((lzo_memops_TU1p)(lzo_memops_TU0p)(dd)+4,(const lzo_memops_TU1p)(const lzo_memops_TU0p)(ss)+4); LZO_BLOCK_END +#elif defined(lzo_memops_tcheck__) +#define LZO_MEMOPS_COPY8(dd,ss) \ + LZO_BLOCK_BEGIN if (lzo_memops_tcheck__(lzo_memops_TU8,8,1)) { \ + * (lzo_memops_TU8p) (lzo_memops_TU0p) (dd) = * (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss); \ + } else { LZO_MEMOPS_MOVE8(dd,ss); } LZO_BLOCK_END +#else +#define LZO_MEMOPS_COPY8(dd,ss) LZO_MEMOPS_MOVE8(dd,ss) +#endif +#endif +#define LZO_MEMOPS_COPYN(dd,ss,nn) \ + LZO_BLOCK_BEGIN \ + lzo_memops_TU1p d__n = (lzo_memops_TU1p) (lzo_memops_TU0p) (dd); \ + const lzo_memops_TU1p s__n = (const lzo_memops_TU1p) (const lzo_memops_TU0p) (ss); \ + lzo_uint n__n = (nn); \ + while ((void)0, n__n >= 8) { LZO_MEMOPS_COPY8(d__n, s__n); d__n += 8; s__n += 8; n__n -= 8; } \ + if ((void)0, n__n >= 4) { LZO_MEMOPS_COPY4(d__n, s__n); d__n += 4; s__n += 4; n__n -= 4; } \ + if ((void)0, n__n > 0) do { *d__n++ = *s__n++; } while (--n__n > 0); \ + LZO_BLOCK_END + +__lzo_static_forceinline lzo_uint16_t lzo_memops_get_le16(const lzo_voidp ss) +{ + lzo_uint16_t v; +#if (LZO_ABI_LITTLE_ENDIAN) + LZO_MEMOPS_COPY2(&v, ss); +#elif (LZO_OPT_UNALIGNED16 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC) + const lzo_memops_TU2p s = (const lzo_memops_TU2p) ss; + unsigned long vv; + __asm__("lhbrx %0,0,%1" : "=r" (vv) : "r" (s), "m" (*s)); + v = (lzo_uint16_t) vv; +#else + const lzo_memops_TU1p s = (const lzo_memops_TU1p) ss; + v = (lzo_uint16_t) (((lzo_uint16_t)s[0]) | ((lzo_uint16_t)s[1] << 8)); +#endif + return v; +} +#if (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN) +#define LZO_MEMOPS_GET_LE16(ss) (* (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss)) +#else +#define LZO_MEMOPS_GET_LE16(ss) lzo_memops_get_le16(ss) +#endif + +__lzo_static_forceinline lzo_uint32_t lzo_memops_get_le32(const lzo_voidp ss) +{ + lzo_uint32_t v; +#if (LZO_ABI_LITTLE_ENDIAN) + LZO_MEMOPS_COPY4(&v, ss); +#elif (LZO_OPT_UNALIGNED32 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC) + const lzo_memops_TU4p s = (const lzo_memops_TU4p) ss; + unsigned long vv; + __asm__("lwbrx %0,0,%1" : "=r" (vv) : "r" (s), "m" (*s)); + v = (lzo_uint32_t) vv; +#else + const lzo_memops_TU1p s = (const lzo_memops_TU1p) ss; + v = (lzo_uint32_t) (((lzo_uint32_t)s[0]) | ((lzo_uint32_t)s[1] << 8) | ((lzo_uint32_t)s[2] << 16) | ((lzo_uint32_t)s[3] << 24)); +#endif + return v; +} +#if (LZO_OPT_UNALIGNED32) && (LZO_ABI_LITTLE_ENDIAN) +#define LZO_MEMOPS_GET_LE32(ss) (* (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss)) +#else +#define LZO_MEMOPS_GET_LE32(ss) lzo_memops_get_le32(ss) +#endif + +#if (LZO_OPT_UNALIGNED64) && (LZO_ABI_LITTLE_ENDIAN) +#define LZO_MEMOPS_GET_LE64(ss) (* (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss)) +#endif + +__lzo_static_forceinline lzo_uint16_t lzo_memops_get_ne16(const lzo_voidp ss) +{ + lzo_uint16_t v; + LZO_MEMOPS_COPY2(&v, ss); + return v; +} +#if (LZO_OPT_UNALIGNED16) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU2p)0)==2) +#define LZO_MEMOPS_GET_NE16(ss) (* (const lzo_memops_TU2p) (const lzo_memops_TU0p) (ss)) +#else +#define LZO_MEMOPS_GET_NE16(ss) lzo_memops_get_ne16(ss) +#endif + +__lzo_static_forceinline lzo_uint32_t lzo_memops_get_ne32(const lzo_voidp ss) +{ + lzo_uint32_t v; + LZO_MEMOPS_COPY4(&v, ss); + return v; +} +#if (LZO_OPT_UNALIGNED32) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU4p)0)==4) +#define LZO_MEMOPS_GET_NE32(ss) (* (const lzo_memops_TU4p) (const lzo_memops_TU0p) (ss)) +#else +#define LZO_MEMOPS_GET_NE32(ss) lzo_memops_get_ne32(ss) +#endif + +#if (LZO_OPT_UNALIGNED64) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(*(lzo_memops_TU8p)0)==8) +#define LZO_MEMOPS_GET_NE64(ss) (* (const lzo_memops_TU8p) (const lzo_memops_TU0p) (ss)) +#endif + +__lzo_static_forceinline void lzo_memops_put_le16(lzo_voidp dd, lzo_uint16_t vv) +{ +#if (LZO_ABI_LITTLE_ENDIAN) + LZO_MEMOPS_COPY2(dd, &vv); +#elif (LZO_OPT_UNALIGNED16 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC) + lzo_memops_TU2p d = (lzo_memops_TU2p) dd; + unsigned long v = vv; + __asm__("sthbrx %2,0,%1" : "=m" (*d) : "r" (d), "r" (v)); +#else + lzo_memops_TU1p d = (lzo_memops_TU1p) dd; + d[0] = LZO_BYTE((vv ) & 0xff); + d[1] = LZO_BYTE((vv >> 8) & 0xff); +#endif +} +#if (LZO_OPT_UNALIGNED16) && (LZO_ABI_LITTLE_ENDIAN) +#define LZO_MEMOPS_PUT_LE16(dd,vv) (* (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = (vv)) +#else +#define LZO_MEMOPS_PUT_LE16(dd,vv) lzo_memops_put_le16(dd,vv) +#endif + +__lzo_static_forceinline void lzo_memops_put_le32(lzo_voidp dd, lzo_uint32_t vv) +{ +#if (LZO_ABI_LITTLE_ENDIAN) + LZO_MEMOPS_COPY4(dd, &vv); +#elif (LZO_OPT_UNALIGNED32 && LZO_ARCH_POWERPC && LZO_ABI_BIG_ENDIAN) && (LZO_ASM_SYNTAX_GNUC) + lzo_memops_TU4p d = (lzo_memops_TU4p) dd; + unsigned long v = vv; + __asm__("stwbrx %2,0,%1" : "=m" (*d) : "r" (d), "r" (v)); +#else + lzo_memops_TU1p d = (lzo_memops_TU1p) dd; + d[0] = LZO_BYTE((vv ) & 0xff); + d[1] = LZO_BYTE((vv >> 8) & 0xff); + d[2] = LZO_BYTE((vv >> 16) & 0xff); + d[3] = LZO_BYTE((vv >> 24) & 0xff); +#endif +} +#if (LZO_OPT_UNALIGNED32) && (LZO_ABI_LITTLE_ENDIAN) +#define LZO_MEMOPS_PUT_LE32(dd,vv) (* (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = (vv)) +#else +#define LZO_MEMOPS_PUT_LE32(dd,vv) lzo_memops_put_le32(dd,vv) +#endif + +__lzo_static_forceinline void lzo_memops_put_ne16(lzo_voidp dd, lzo_uint16_t vv) +{ + LZO_MEMOPS_COPY2(dd, &vv); +} +#if (LZO_OPT_UNALIGNED16) +#define LZO_MEMOPS_PUT_NE16(dd,vv) (* (lzo_memops_TU2p) (lzo_memops_TU0p) (dd) = (vv)) +#else +#define LZO_MEMOPS_PUT_NE16(dd,vv) lzo_memops_put_ne16(dd,vv) +#endif + +__lzo_static_forceinline void lzo_memops_put_ne32(lzo_voidp dd, lzo_uint32_t vv) +{ + LZO_MEMOPS_COPY4(dd, &vv); +} +#if (LZO_OPT_UNALIGNED32) +#define LZO_MEMOPS_PUT_NE32(dd,vv) (* (lzo_memops_TU4p) (lzo_memops_TU0p) (dd) = (vv)) +#else +#define LZO_MEMOPS_PUT_NE32(dd,vv) lzo_memops_put_ne32(dd,vv) +#endif + +lzo_unused_funcs_impl(void, lzo_memops_unused_funcs)(void) +{ + LZO_UNUSED_FUNC(lzo_memops_unused_funcs); + LZO_UNUSED_FUNC(lzo_memops_get_le16); + LZO_UNUSED_FUNC(lzo_memops_get_le32); + LZO_UNUSED_FUNC(lzo_memops_get_ne16); + LZO_UNUSED_FUNC(lzo_memops_get_ne32); + LZO_UNUSED_FUNC(lzo_memops_put_le16); + LZO_UNUSED_FUNC(lzo_memops_put_le32); + LZO_UNUSED_FUNC(lzo_memops_put_ne16); + LZO_UNUSED_FUNC(lzo_memops_put_ne32); +} + +#endif /* already included */ + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo_mchw.ch b/tools/z64compress/src/enc/lzo/lzo_mchw.ch new file mode 100644 index 0000000..94bedc3 --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo_mchw.ch @@ -0,0 +1,222 @@ +/* lzo_mchw.ch -- matching functions using a window + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +/*********************************************************************** +// +************************************************************************/ + +typedef struct +{ + unsigned init; + + lzo_uint look; /* bytes in lookahead buffer */ + + lzo_uint m_len; + lzo_uint m_off; + + lzo_uint last_m_len; + lzo_uint last_m_off; + + const lzo_bytep bp; + const lzo_bytep ip; + const lzo_bytep in; + const lzo_bytep in_end; + lzo_bytep out; + + lzo_callback_p cb; + + lzo_uint textsize; /* text size counter */ + lzo_uint codesize; /* code size counter */ + lzo_uint printcount; /* counter for reporting progress every 1K bytes */ + + /* some stats */ + lzo_uint lit_bytes; + lzo_uint match_bytes; + lzo_uint rep_bytes; + lzo_uint lazy; + +#if defined(LZO1B) + lzo_uint r1_m_len; + + /* some stats */ + lzo_uint r1_r, m3_r, m2_m, m3_m; +#endif + +#if defined(LZO1C) + lzo_uint r1_m_len; + lzo_bytep m3; + + /* some stats */ + lzo_uint r1_r, m3_r, m2_m, m3_m; +#endif + +#if defined(LZO1F) + lzo_uint r1_lit; + lzo_uint r1_m_len; + + /* some stats */ + lzo_uint r1_r, m2_m, m3_m; +#endif + +#if defined(LZO1X) || defined(LZO1Y) || defined(LZO1Z) + lzo_uint r1_lit; + lzo_uint r1_m_len; + + /* some stats */ + lzo_uint m1a_m, m1b_m, m2_m, m3_m, m4_m; + lzo_uint lit1_r, lit2_r, lit3_r; +#endif + +#if defined(LZO2A) + /* some stats */ + lzo_uint m1, m2, m3, m4; +#endif +} +LZO_COMPRESS_T; + + +#define getbyte(c) ((c).ip < (c).in_end ? *((c).ip)++ : (-1)) + +#include "lzo_swd.ch" + + +/*********************************************************************** +// +************************************************************************/ + +static int +init_match ( LZO_COMPRESS_T *c, lzo_swd_p s, + const lzo_bytep dict, lzo_uint dict_len, + lzo_uint32_t flags ) +{ + int r; + + assert(!c->init); + c->init = 1; + + s->c = c; + + c->last_m_len = c->last_m_off = 0; + + c->textsize = c->codesize = c->printcount = 0; + c->lit_bytes = c->match_bytes = c->rep_bytes = 0; + c->lazy = 0; + + r = swd_init(s,dict,dict_len); + if (r != LZO_E_OK) + { + swd_exit(s); + return r; + } + + s->use_best_off = (flags & 1) ? 1 : 0; + return LZO_E_OK; +} + + +/*********************************************************************** +// +************************************************************************/ + +static int +find_match ( LZO_COMPRESS_T *c, lzo_swd_p s, + lzo_uint this_len, lzo_uint skip ) +{ + assert(c->init); + + if (skip > 0) + { + assert(this_len >= skip); + swd_accept(s, this_len - skip); + c->textsize += this_len - skip + 1; + } + else + { + assert(this_len <= 1); + c->textsize += this_len - skip; + } + + s->m_len = SWD_THRESHOLD; + s->m_off = 0; +#ifdef SWD_BEST_OFF + if (s->use_best_off) + lzo_memset(s->best_pos,0,sizeof(s->best_pos)); +#endif + swd_findbest(s); + c->m_len = s->m_len; + c->m_off = s->m_off; + + swd_getbyte(s); + + if (s->b_char < 0) + { + c->look = 0; + c->m_len = 0; + swd_exit(s); + } + else + { + c->look = s->look + 1; + } + c->bp = c->ip - c->look; + +#if 0 + /* brute force match search */ + if (c->m_len > SWD_THRESHOLD && c->m_len + 1 <= c->look) + { + const lzo_bytep ip = c->bp; + const lzo_bytep m = c->bp - c->m_off; + const lzo_bytep in = c->in; + + if (ip - in > s->swd_n) + in = ip - s->swd_n; + for (;;) + { + while (*in != *ip) + in++; + if (in == ip) + break; + if (in != m) + if (lzo_memcmp(in,ip,c->m_len+1) == 0) + printf("%p %p %p %5d\n",in,ip,m,c->m_len); + in++; + } + } +#endif + + if (c->cb && c->cb->nprogress && c->textsize > c->printcount) + { + (*c->cb->nprogress)(c->cb, c->textsize, c->codesize, 0); + c->printcount += 1024; + } + + return LZO_E_OK; +} + + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo_ptr.c b/tools/z64compress/src/enc/lzo/lzo_ptr.c new file mode 100644 index 0000000..d2def7f --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo_ptr.c @@ -0,0 +1,80 @@ +/* lzo_ptr.c -- low-level pointer constructs + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +#include "lzo_conf.h" + + +/*********************************************************************** +// +************************************************************************/ + +LZO_PUBLIC(lzo_uintptr_t) +__lzo_ptr_linear(const lzo_voidp ptr) +{ + lzo_uintptr_t p; + +#if (LZO_ARCH_I086) +#error "LZO_ARCH_I086 is unsupported" +#elif (LZO_MM_PVP) +#error "LZO_MM_PVP is unsupported" +#else + p = (lzo_uintptr_t) PTR_LINEAR(ptr); +#endif + + return p; +} + + +/*********************************************************************** +// +************************************************************************/ + +LZO_PUBLIC(unsigned) +__lzo_align_gap(const lzo_voidp ptr, lzo_uint size) +{ +#if (__LZO_UINTPTR_T_IS_POINTER) +#error "__LZO_UINTPTR_T_IS_POINTER is unsupported" +#else + lzo_uintptr_t p, n; + if (size < 2) return 0; + p = __lzo_ptr_linear(ptr); +#if 0 + n = (((p + size - 1) / size) * size) - p; +#else + if ((size & (size - 1)) != 0) + return 0; + n = size; n = ((p + n - 1) & ~(n - 1)) - p; +#endif +#endif + assert((long)n >= 0); + assert(n <= size); + return (unsigned)n; +} + + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo_ptr.h b/tools/z64compress/src/enc/lzo/lzo_ptr.h new file mode 100644 index 0000000..8d7ee44 --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo_ptr.h @@ -0,0 +1,123 @@ +/* lzo_ptr.h -- low-level pointer constructs + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the library and is subject + to change. + */ + + +#ifndef __LZO_PTR_H +#define __LZO_PTR_H 1 + +#ifdef __cplusplus +extern "C" { +#endif + + +/*********************************************************************** +// +************************************************************************/ + +/* Always use the safe (=integral) version for pointer-comparisons. + * The compiler should optimize away the additional casts anyway. + * + * Note that this only works if the representation and ordering + * of the pointer and the integral is the same (at bit level). + */ + +#if (LZO_ARCH_I086) +#error "LZO_ARCH_I086 is unsupported" +#elif (LZO_MM_PVP) +#error "LZO_MM_PVP is unsupported" +#else +#define PTR(a) ((lzo_uintptr_t) (a)) +#define PTR_LINEAR(a) PTR(a) +#define PTR_ALIGNED_4(a) ((PTR_LINEAR(a) & 3) == 0) +#define PTR_ALIGNED_8(a) ((PTR_LINEAR(a) & 7) == 0) +#define PTR_ALIGNED2_4(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 3) == 0) +#define PTR_ALIGNED2_8(a,b) (((PTR_LINEAR(a) | PTR_LINEAR(b)) & 7) == 0) +#endif + +#define PTR_LT(a,b) (PTR(a) < PTR(b)) +#define PTR_GE(a,b) (PTR(a) >= PTR(b)) +#define PTR_DIFF(a,b) (PTR(a) - PTR(b)) +#define pd(a,b) ((lzo_uint) ((a)-(b))) + + +LZO_EXTERN(lzo_uintptr_t) +__lzo_ptr_linear(const lzo_voidp ptr); + + +typedef union +{ + char a_char; + unsigned char a_uchar; + short a_short; + unsigned short a_ushort; + int a_int; + unsigned int a_uint; + long a_long; + unsigned long a_ulong; + lzo_int a_lzo_int; + lzo_uint a_lzo_uint; + lzo_xint a_lzo_xint; + lzo_int16_t a_lzo_int16_t; + lzo_uint16_t a_lzo_uint16_t; + lzo_int32_t a_lzo_int32_t; + lzo_uint32_t a_lzo_uint32_t; +#if defined(lzo_uint64_t) + lzo_int64_t a_lzo_int64_t; + lzo_uint64_t a_lzo_uint64_t; +#endif + size_t a_size_t; + ptrdiff_t a_ptrdiff_t; + lzo_uintptr_t a_lzo_uintptr_t; + void * a_void_p; + char * a_char_p; + unsigned char * a_uchar_p; + const void * a_c_void_p; + const char * a_c_char_p; + const unsigned char * a_c_uchar_p; + lzo_voidp a_lzo_voidp; + lzo_bytep a_lzo_bytep; + const lzo_voidp a_c_lzo_voidp; + const lzo_bytep a_c_lzo_bytep; +} +lzo_full_align_t; + + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* already included */ + + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo_supp.h b/tools/z64compress/src/enc/lzo/lzo_supp.h new file mode 100644 index 0000000..a2c9021 --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo_supp.h @@ -0,0 +1,3678 @@ +/* lzo_supp.h -- architecture, OS and compiler specific defines + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +#ifndef __LZO_SUPP_H_INCLUDED +#define __LZO_SUPP_H_INCLUDED 1 +#if (LZO_CFG_NO_CONFIG_HEADER) +#elif defined(LZO_CFG_CONFIG_HEADER) +#else +#if !(LZO_CFG_AUTO_NO_HEADERS) +#if (LZO_LIBC_NAKED) +#elif (LZO_LIBC_FREESTANDING) +# define HAVE_LIMITS_H 1 +# define HAVE_STDARG_H 1 +# define HAVE_STDDEF_H 1 +#elif (LZO_LIBC_MOSTLY_FREESTANDING) +# define HAVE_LIMITS_H 1 +# define HAVE_SETJMP_H 1 +# define HAVE_STDARG_H 1 +# define HAVE_STDDEF_H 1 +# define HAVE_STDIO_H 1 +# define HAVE_STRING_H 1 +#else +#define STDC_HEADERS 1 +#define HAVE_ASSERT_H 1 +#define HAVE_CTYPE_H 1 +#define HAVE_DIRENT_H 1 +#define HAVE_ERRNO_H 1 +#define HAVE_FCNTL_H 1 +#define HAVE_FLOAT_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_MALLOC_H 1 +#define HAVE_MEMORY_H 1 +#define HAVE_SETJMP_H 1 +#define HAVE_SIGNAL_H 1 +#define HAVE_STDARG_H 1 +#define HAVE_STDDEF_H 1 +#define HAVE_STDIO_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_TIME_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_UTIME_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_SYS_TIME_H 1 +#define HAVE_SYS_TYPES_H 1 +#if (LZO_OS_POSIX) +# if (LZO_OS_POSIX_AIX) +# define HAVE_SYS_RESOURCE_H 1 +# elif (LZO_OS_POSIX_DARWIN || LZO_OS_POSIX_FREEBSD || LZO_OS_POSIX_NETBSD || LZO_OS_POSIX_OPENBSD) +# define HAVE_STRINGS_H 1 +# undef HAVE_MALLOC_H +# elif (LZO_OS_POSIX_HPUX || LZO_OS_POSIX_INTERIX) +# define HAVE_ALLOCA_H 1 +# elif (LZO_OS_POSIX_DARWIN && LZO_LIBC_MSL) +# undef HAVE_SYS_TIME_H +# undef HAVE_SYS_TYPES_H +# elif (LZO_OS_POSIX_SOLARIS || LZO_OS_POSIX_SUNOS) +# define HAVE_ALLOCA_H 1 +# endif +# if (LZO_LIBC_DIETLIBC || LZO_LIBC_GLIBC || LZO_LIBC_UCLIBC) +# define HAVE_STRINGS_H 1 +# define HAVE_SYS_MMAN_H 1 +# define HAVE_SYS_RESOURCE_H 1 +# define HAVE_SYS_WAIT_H 1 +# endif +# if (LZO_LIBC_NEWLIB) +# undef HAVE_STRINGS_H +# endif +#elif (LZO_OS_CYGWIN) +# define HAVE_IO_H 1 +#elif (LZO_OS_EMX) +# define HAVE_ALLOCA_H 1 +# define HAVE_IO_H 1 +#elif (LZO_ARCH_M68K && LZO_OS_TOS && LZO_CC_GNUC) +# if !defined(__MINT__) +# undef HAVE_MALLOC_H +# endif +#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC)) +# undef HAVE_DIRENT_H +# undef HAVE_FCNTL_H +# undef HAVE_MALLOC_H +# undef HAVE_MEMORY_H +# undef HAVE_UNISTD_H +# undef HAVE_UTIME_H +# undef HAVE_SYS_STAT_H +# undef HAVE_SYS_TIME_H +# undef HAVE_SYS_TYPES_H +#endif +#if (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64) +#define HAVE_CONIO_H 1 +#define HAVE_DIRECT_H 1 +#define HAVE_DOS_H 1 +#define HAVE_IO_H 1 +#define HAVE_SHARE_H 1 +#if (LZO_CC_AZTECC) +# undef HAVE_CONIO_H +# undef HAVE_DIRECT_H +# undef HAVE_DIRENT_H +# undef HAVE_MALLOC_H +# undef HAVE_SHARE_H +# undef HAVE_UNISTD_H +# undef HAVE_UTIME_H +# undef HAVE_SYS_STAT_H +# undef HAVE_SYS_TIME_H +# undef HAVE_SYS_TYPES_H +#elif (LZO_CC_BORLANDC) +# undef HAVE_UNISTD_H +# undef HAVE_SYS_TIME_H +# if (LZO_OS_WIN32 || LZO_OS_WIN64) +# undef HAVE_DIRENT_H +# endif +# if (__BORLANDC__ < 0x0400) +# undef HAVE_DIRENT_H +# undef HAVE_UTIME_H +# endif +#elif (LZO_CC_DMC) +# undef HAVE_DIRENT_H +# undef HAVE_UNISTD_H +# define HAVE_SYS_DIRENT_H 1 +#elif (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__) +#elif (LZO_OS_DOS32 && LZO_CC_HIGHC) +# define HAVE_ALLOCA_H 1 +# undef HAVE_DIRENT_H +# undef HAVE_UNISTD_H +#elif (LZO_CC_IBMC && LZO_OS_OS2) +# undef HAVE_DOS_H +# undef HAVE_DIRENT_H +# undef HAVE_UNISTD_H +# undef HAVE_UTIME_H +# undef HAVE_SYS_TIME_H +# define HAVE_SYS_UTIME_H 1 +#elif (LZO_CC_CLANG_C2 || LZO_CC_CLANG_MSC || LZO_CC_GHS || LZO_CC_INTELC_MSC || LZO_CC_MSC) +# undef HAVE_DIRENT_H +# undef HAVE_UNISTD_H +# undef HAVE_UTIME_H +# undef HAVE_SYS_TIME_H +# define HAVE_SYS_UTIME_H 1 +#elif (LZO_CC_LCCWIN32) +# undef HAVE_DIRENT_H +# undef HAVE_DOS_H +# undef HAVE_UNISTD_H +# undef HAVE_SYS_TIME_H +#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__MINGW32__) +# undef HAVE_UTIME_H +# define HAVE_SYS_UTIME_H 1 +#elif (LZO_OS_WIN32 && LZO_LIBC_MSL) +# define HAVE_ALLOCA_H 1 +# undef HAVE_DOS_H +# undef HAVE_SHARE_H +# undef HAVE_SYS_TIME_H +#elif (LZO_CC_NDPC) +# undef HAVE_DIRENT_H +# undef HAVE_DOS_H +# undef HAVE_UNISTD_H +# undef HAVE_UTIME_H +# undef HAVE_SYS_TIME_H +#elif (LZO_CC_PACIFICC) +# undef HAVE_DIRECT_H +# undef HAVE_DIRENT_H +# undef HAVE_FCNTL_H +# undef HAVE_IO_H +# undef HAVE_MALLOC_H +# undef HAVE_MEMORY_H +# undef HAVE_SHARE_H +# undef HAVE_UNISTD_H +# undef HAVE_UTIME_H +# undef HAVE_SYS_STAT_H +# undef HAVE_SYS_TIME_H +# undef HAVE_SYS_TYPES_H +#elif (LZO_OS_WIN32 && LZO_CC_PELLESC) +# undef HAVE_DIRENT_H +# undef HAVE_DOS_H +# undef HAVE_MALLOC_H +# undef HAVE_SHARE_H +# undef HAVE_UNISTD_H +# undef HAVE_UTIME_H +# undef HAVE_SYS_TIME_H +# if (__POCC__ < 280) +# else +# define HAVE_SYS_UTIME_H 1 +# endif +#elif (LZO_OS_WIN32 && LZO_CC_PGI) && defined(__MINGW32__) +# undef HAVE_UTIME_H +# define HAVE_SYS_UTIME_H 1 +#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__) +#elif (LZO_CC_SYMANTECC) +# undef HAVE_DIRENT_H +# undef HAVE_UNISTD_H +# if (__SC__ < 0x700) +# undef HAVE_UTIME_H +# undef HAVE_SYS_TIME_H +# endif +#elif (LZO_CC_TOPSPEEDC) +# undef HAVE_DIRENT_H +# undef HAVE_UNISTD_H +# undef HAVE_UTIME_H +# undef HAVE_SYS_STAT_H +# undef HAVE_SYS_TIME_H +# undef HAVE_SYS_TYPES_H +#elif (LZO_CC_TURBOC) +# undef HAVE_UNISTD_H +# undef HAVE_SYS_TIME_H +# undef HAVE_SYS_TYPES_H +# if (LZO_OS_WIN32 || LZO_OS_WIN64) +# undef HAVE_DIRENT_H +# endif +# if (__TURBOC__ < 0x0200) +# undef HAVE_SIGNAL_H +# endif +# if (__TURBOC__ < 0x0400) +# undef HAVE_DIRECT_H +# undef HAVE_DIRENT_H +# undef HAVE_MALLOC_H +# undef HAVE_MEMORY_H +# undef HAVE_UTIME_H +# endif +#elif (LZO_CC_WATCOMC) +# undef HAVE_DIRENT_H +# undef HAVE_UTIME_H +# undef HAVE_SYS_TIME_H +# define HAVE_SYS_UTIME_H 1 +# if (__WATCOMC__ < 950) +# undef HAVE_UNISTD_H +# endif +#elif (LZO_CC_ZORTECHC) +# undef HAVE_DIRENT_H +# undef HAVE_MEMORY_H +# undef HAVE_UNISTD_H +# undef HAVE_UTIME_H +# undef HAVE_SYS_TIME_H +#endif +#endif +#if (LZO_OS_CONSOLE) +# undef HAVE_DIRENT_H +#endif +#if (LZO_OS_EMBEDDED) +# undef HAVE_DIRENT_H +#endif +#if (LZO_LIBC_ISOC90 || LZO_LIBC_ISOC99) +# undef HAVE_DIRENT_H +# undef HAVE_FCNTL_H +# undef HAVE_MALLOC_H +# undef HAVE_UNISTD_H +# undef HAVE_UTIME_H +# undef HAVE_SYS_STAT_H +# undef HAVE_SYS_TIME_H +# undef HAVE_SYS_TYPES_H +#endif +#if (LZO_LIBC_GLIBC >= 0x020100ul) +# define HAVE_STDINT_H 1 +#elif (LZO_LIBC_DIETLIBC) +# undef HAVE_STDINT_H +#elif (LZO_LIBC_UCLIBC) +# define HAVE_STDINT_H 1 +#elif (LZO_CC_BORLANDC) && (__BORLANDC__ >= 0x560) +# undef HAVE_STDINT_H +#elif (LZO_CC_DMC) && (__DMC__ >= 0x825) +# define HAVE_STDINT_H 1 +#endif +#if (HAVE_SYS_TIME_H && HAVE_TIME_H) +# define TIME_WITH_SYS_TIME 1 +#endif +#endif +#endif +#if !(LZO_CFG_AUTO_NO_FUNCTIONS) +#if (LZO_LIBC_NAKED) +#elif (LZO_LIBC_FREESTANDING) +#elif (LZO_LIBC_MOSTLY_FREESTANDING) +# define HAVE_LONGJMP 1 +# define HAVE_MEMCMP 1 +# define HAVE_MEMCPY 1 +# define HAVE_MEMMOVE 1 +# define HAVE_MEMSET 1 +# define HAVE_SETJMP 1 +#else +#define HAVE_ACCESS 1 +#define HAVE_ALLOCA 1 +#define HAVE_ATEXIT 1 +#define HAVE_ATOI 1 +#define HAVE_ATOL 1 +#define HAVE_CHMOD 1 +#define HAVE_CHOWN 1 +#define HAVE_CTIME 1 +#define HAVE_DIFFTIME 1 +#define HAVE_FILENO 1 +#define HAVE_FSTAT 1 +#define HAVE_GETENV 1 +#define HAVE_GETTIMEOFDAY 1 +#define HAVE_GMTIME 1 +#define HAVE_ISATTY 1 +#define HAVE_LOCALTIME 1 +#define HAVE_LONGJMP 1 +#define HAVE_LSTAT 1 +#define HAVE_MEMCMP 1 +#define HAVE_MEMCPY 1 +#define HAVE_MEMMOVE 1 +#define HAVE_MEMSET 1 +#define HAVE_MKDIR 1 +#define HAVE_MKTIME 1 +#define HAVE_QSORT 1 +#define HAVE_RAISE 1 +#define HAVE_RMDIR 1 +#define HAVE_SETJMP 1 +#define HAVE_SIGNAL 1 +#define HAVE_SNPRINTF 1 +#define HAVE_STAT 1 +#define HAVE_STRCHR 1 +#define HAVE_STRDUP 1 +#define HAVE_STRERROR 1 +#define HAVE_STRFTIME 1 +#define HAVE_STRRCHR 1 +#define HAVE_STRSTR 1 +#define HAVE_TIME 1 +#define HAVE_UMASK 1 +#define HAVE_UTIME 1 +#define HAVE_VSNPRINTF 1 +#if (LZO_OS_BEOS || LZO_OS_CYGWIN || LZO_OS_POSIX || LZO_OS_QNX || LZO_OS_VMS) +# define HAVE_STRCASECMP 1 +# define HAVE_STRNCASECMP 1 +#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__) +# define HAVE_STRCASECMP 1 +# define HAVE_STRNCASECMP 1 +#else +# define HAVE_STRICMP 1 +# define HAVE_STRNICMP 1 +#endif +#if (LZO_OS_POSIX) +# if (LZO_OS_POSIX_AIX) +# define HAVE_GETRUSAGE 1 +# elif (LZO_OS_POSIX_DARWIN && LZO_LIBC_MSL) +# undef HAVE_CHOWN +# undef HAVE_LSTAT +# elif (LZO_OS_POSIX_UNICOS) +# undef HAVE_ALLOCA +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +# endif +# if (LZO_CC_TINYC) +# undef HAVE_ALLOCA +# endif +# if (LZO_LIBC_DIETLIBC || LZO_LIBC_GLIBC || LZO_LIBC_UCLIBC) +# define HAVE_GETRUSAGE 1 +# define HAVE_GETPAGESIZE 1 +# define HAVE_MMAP 1 +# define HAVE_MPROTECT 1 +# define HAVE_MUNMAP 1 +# endif +#elif (LZO_OS_CYGWIN) +# if (LZO_CC_GNUC < 0x025a00ul) +# undef HAVE_GETTIMEOFDAY +# undef HAVE_LSTAT +# endif +# if (LZO_CC_GNUC < 0x025f00ul) +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +# endif +#elif (LZO_OS_EMX) +# undef HAVE_CHOWN +# undef HAVE_LSTAT +#elif (LZO_ARCH_M68K && LZO_OS_TOS && LZO_CC_GNUC) +# if !defined(__MINT__) +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +# endif +#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC)) +# undef HAVE_ALLOCA +# undef HAVE_ACCESS +# undef HAVE_CHMOD +# undef HAVE_CHOWN +# undef HAVE_FSTAT +# undef HAVE_GETTIMEOFDAY +# undef HAVE_LSTAT +# undef HAVE_SNPRINTF +# undef HAVE_UMASK +# undef HAVE_UTIME +# undef HAVE_VSNPRINTF +#endif +#if (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64) +#undef HAVE_CHOWN +#undef HAVE_GETTIMEOFDAY +#undef HAVE_LSTAT +#undef HAVE_UMASK +#if (LZO_CC_AZTECC) +# undef HAVE_ALLOCA +# undef HAVE_DIFFTIME +# undef HAVE_FSTAT +# undef HAVE_STRDUP +# undef HAVE_SNPRINTF +# undef HAVE_UTIME +# undef HAVE_VSNPRINTF +#elif (LZO_CC_BORLANDC) +# if (__BORLANDC__ < 0x0400) +# undef HAVE_ALLOCA +# undef HAVE_UTIME +# endif +# if ((__BORLANDC__ < 0x0410) && LZO_OS_WIN16) +# undef HAVE_ALLOCA +# endif +# if (__BORLANDC__ < 0x0550) +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +# endif +#elif (LZO_CC_DMC) +# if (LZO_OS_WIN16) +# undef HAVE_ALLOCA +# endif +# define snprintf _snprintf +# define vsnprintf _vsnprintf +#elif (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__) +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +#elif (LZO_OS_DOS32 && LZO_CC_HIGHC) +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +#elif (LZO_CC_GHS) +# undef HAVE_ALLOCA +# ifndef snprintf +# define snprintf _snprintf +# endif +# ifndef vsnprintf +# define vsnprintf _vsnprintf +# endif +#elif (LZO_CC_IBMC) +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +#elif (LZO_CC_CLANG_MSC || LZO_CC_INTELC_MSC) +# ifndef snprintf +# define snprintf _snprintf +# endif +# ifndef vsnprintf +# define vsnprintf _vsnprintf +# endif +#elif (LZO_CC_LCCWIN32) +# define utime _utime +#elif (LZO_CC_CLANG_C2 || LZO_CC_MSC) +# if (_MSC_VER < 600) +# undef HAVE_STRFTIME +# endif +# if (_MSC_VER < 700) +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +# elif (_MSC_VER < 1500) +# ifndef snprintf +# define snprintf _snprintf +# endif +# ifndef vsnprintf +# define vsnprintf _vsnprintf +# endif +# elif (_MSC_VER < 1900) +# ifndef snprintf +# define snprintf _snprintf +# endif +# endif +# if ((_MSC_VER < 800) && LZO_OS_WIN16) +# undef HAVE_ALLOCA +# endif +# if (LZO_ARCH_I086) && defined(__cplusplus) +# undef HAVE_LONGJMP +# undef HAVE_SETJMP +# endif +#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__MINGW32__) +# if (LZO_CC_GNUC < 0x025f00ul) +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +# else +# define snprintf _snprintf +# define vsnprintf _vsnprintf +# endif +#elif (LZO_OS_WIN32 && LZO_LIBC_MSL) +# if (__MSL__ < 0x8000ul) +# undef HAVE_CHMOD +# endif +#elif (LZO_CC_NDPC) +# undef HAVE_ALLOCA +# undef HAVE_SNPRINTF +# undef HAVE_STRNICMP +# undef HAVE_UTIME +# undef HAVE_VSNPRINTF +# if defined(__cplusplus) +# undef HAVE_STAT +# endif +#elif (LZO_CC_PACIFICC) +# undef HAVE_ACCESS +# undef HAVE_ALLOCA +# undef HAVE_CHMOD +# undef HAVE_DIFFTIME +# undef HAVE_FSTAT +# undef HAVE_MKTIME +# undef HAVE_RAISE +# undef HAVE_SNPRINTF +# undef HAVE_STRFTIME +# undef HAVE_UTIME +# undef HAVE_VSNPRINTF +#elif (LZO_OS_WIN32 && LZO_CC_PELLESC) +# if (__POCC__ < 280) +# define alloca _alloca +# undef HAVE_UTIME +# endif +#elif (LZO_OS_WIN32 && LZO_CC_PGI) && defined(__MINGW32__) +# define snprintf _snprintf +# define vsnprintf _vsnprintf +#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__) +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +#elif (LZO_CC_SYMANTECC) +# if (LZO_OS_WIN16 && (LZO_MM_MEDIUM || LZO_MM_LARGE || LZO_MM_HUGE)) +# undef HAVE_ALLOCA +# endif +# if (__SC__ < 0x600) +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +# else +# define snprintf _snprintf +# define vsnprintf _vsnprintf +# endif +# if (__SC__ < 0x700) +# undef HAVE_DIFFTIME +# undef HAVE_UTIME +# endif +#elif (LZO_CC_TOPSPEEDC) +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +#elif (LZO_CC_TURBOC) +# undef HAVE_ALLOCA +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +# if (__TURBOC__ < 0x0200) +# undef HAVE_RAISE +# undef HAVE_SIGNAL +# endif +# if (__TURBOC__ < 0x0295) +# undef HAVE_MKTIME +# undef HAVE_STRFTIME +# endif +# if (__TURBOC__ < 0x0400) +# undef HAVE_UTIME +# endif +#elif (LZO_CC_WATCOMC) +# if (__WATCOMC__ < 1100) +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +# elif (__WATCOMC__ < 1200) +# define snprintf _snprintf +# define vsnprintf _vsnprintf +# endif +#elif (LZO_CC_ZORTECHC) +# if (LZO_OS_WIN16 && (LZO_MM_MEDIUM || LZO_MM_LARGE || LZO_MM_HUGE)) +# undef HAVE_ALLOCA +# endif +# undef HAVE_DIFFTIME +# undef HAVE_SNPRINTF +# undef HAVE_UTIME +# undef HAVE_VSNPRINTF +#endif +#endif +#if (LZO_OS_CONSOLE) +# undef HAVE_ACCESS +# undef HAVE_CHMOD +# undef HAVE_CHOWN +# undef HAVE_GETTIMEOFDAY +# undef HAVE_LSTAT +# undef HAVE_TIME +# undef HAVE_UMASK +# undef HAVE_UTIME +#endif +#if (LZO_LIBC_ISOC90 || LZO_LIBC_ISOC99) +# undef HAVE_ACCESS +# undef HAVE_CHMOD +# undef HAVE_CHOWN +# undef HAVE_FILENO +# undef HAVE_FSTAT +# undef HAVE_GETTIMEOFDAY +# undef HAVE_LSTAT +# undef HAVE_STAT +# undef HAVE_UMASK +# undef HAVE_UTIME +# if 1 +# undef HAVE_ALLOCA +# undef HAVE_ISATTY +# undef HAVE_MKDIR +# undef HAVE_RMDIR +# undef HAVE_STRDUP +# undef HAVE_STRICMP +# undef HAVE_STRNICMP +# endif +#endif +#endif +#endif +#if !(LZO_CFG_AUTO_NO_SIZES) +#if !defined(SIZEOF_SHORT) && defined(LZO_SIZEOF_SHORT) +# define SIZEOF_SHORT LZO_SIZEOF_SHORT +#endif +#if !defined(SIZEOF_INT) && defined(LZO_SIZEOF_INT) +# define SIZEOF_INT LZO_SIZEOF_INT +#endif +#if !defined(SIZEOF_LONG) && defined(LZO_SIZEOF_LONG) +# define SIZEOF_LONG LZO_SIZEOF_LONG +#endif +#if !defined(SIZEOF_LONG_LONG) && defined(LZO_SIZEOF_LONG_LONG) +# define SIZEOF_LONG_LONG LZO_SIZEOF_LONG_LONG +#endif +#if !defined(SIZEOF___INT32) && defined(LZO_SIZEOF___INT32) +# define SIZEOF___INT32 LZO_SIZEOF___INT32 +#endif +#if !defined(SIZEOF___INT64) && defined(LZO_SIZEOF___INT64) +# define SIZEOF___INT64 LZO_SIZEOF___INT64 +#endif +#if !defined(SIZEOF_VOID_P) && defined(LZO_SIZEOF_VOID_P) +# define SIZEOF_VOID_P LZO_SIZEOF_VOID_P +#endif +#if !defined(SIZEOF_SIZE_T) && defined(LZO_SIZEOF_SIZE_T) +# define SIZEOF_SIZE_T LZO_SIZEOF_SIZE_T +#endif +#if !defined(SIZEOF_PTRDIFF_T) && defined(LZO_SIZEOF_PTRDIFF_T) +# define SIZEOF_PTRDIFF_T LZO_SIZEOF_PTRDIFF_T +#endif +#endif +#if (HAVE_SIGNAL) && !defined(RETSIGTYPE) +# define RETSIGTYPE void +#endif +#endif +#if !(LZO_CFG_SKIP_LZO_TYPES) +#if 1 && !defined(lzo_signo_t) && defined(__linux__) && defined(__dietlibc__) && (LZO_SIZEOF_INT != 4) +# define lzo_signo_t lzo_int32e_t +#endif +#if !defined(lzo_signo_t) +# define lzo_signo_t int +#endif +#if defined(__cplusplus) +extern "C" { +#endif +#if (LZO_BROKEN_CDECL_ALT_SYNTAX) +typedef void __lzo_cdecl_sighandler (*lzo_sighandler_t)(lzo_signo_t); +#else +typedef void (__lzo_cdecl_sighandler *lzo_sighandler_t)(lzo_signo_t); +#endif +#if defined(__cplusplus) +} +#endif +#endif +#endif +#if defined(LZO_WANT_ACC_INCD_H) +# undef LZO_WANT_ACC_INCD_H +#ifndef __LZO_INCD_H_INCLUDED +#define __LZO_INCD_H_INCLUDED 1 +#if (LZO_LIBC_NAKED) +#ifndef __LZO_FALLBACK_STDDEF_H_INCLUDED +#define __LZO_FALLBACK_STDDEF_H_INCLUDED 1 +#if defined(__PTRDIFF_TYPE__) +typedef __PTRDIFF_TYPE__ lzo_fallback_ptrdiff_t; +#elif defined(__MIPS_PSX2__) +typedef int lzo_fallback_ptrdiff_t; +#else +typedef long lzo_fallback_ptrdiff_t; +#endif +#if defined(__SIZE_TYPE__) +typedef __SIZE_TYPE__ lzo_fallback_size_t; +#elif defined(__MIPS_PSX2__) +typedef unsigned int lzo_fallback_size_t; +#else +typedef unsigned long lzo_fallback_size_t; +#endif +#if !defined(ptrdiff_t) +typedef lzo_fallback_ptrdiff_t ptrdiff_t; +#ifndef _PTRDIFF_T_DEFINED +#define _PTRDIFF_T_DEFINED 1 +#endif +#endif +#if !defined(size_t) +typedef lzo_fallback_size_t size_t; +#ifndef _SIZE_T_DEFINED +#define _SIZE_T_DEFINED 1 +#endif +#endif +#if !defined(__cplusplus) && !defined(wchar_t) +typedef unsigned short wchar_t; +#ifndef _WCHAR_T_DEFINED +#define _WCHAR_T_DEFINED 1 +#endif +#endif +#ifndef NULL +#if defined(__cplusplus) && defined(__GNUC__) && (__GNUC__ >= 4) +#define NULL __null +#elif defined(__cplusplus) +#define NULL 0 +#else +#define NULL ((void*)0) +#endif +#endif +#ifndef offsetof +#define offsetof(s,m) ((size_t)((ptrdiff_t)&(((s*)0)->m))) +#endif +#endif +#elif (LZO_LIBC_FREESTANDING) +# if defined(HAVE_STDDEF_H) && (HAVE_STDDEF_H+0) +# include <stddef.h> +# endif +# if defined(HAVE_STDINT_H) && (HAVE_STDINT_H+0) +# include <stdint.h> +# endif +#elif (LZO_LIBC_MOSTLY_FREESTANDING) +# if defined(HAVE_STDIO_H) && (HAVE_STDIO_H+0) +# include <stdio.h> +# endif +# if defined(HAVE_STDDEF_H) && (HAVE_STDDEF_H+0) +# include <stddef.h> +# endif +# if defined(HAVE_STDINT_H) && (HAVE_STDINT_H+0) +# include <stdint.h> +# endif +#else +#include <stdio.h> +#if defined(HAVE_TIME_H) && (HAVE_TIME_H+0) && defined(__MSL__) && defined(__cplusplus) +# include <time.h> +#endif +#if defined(HAVE_SYS_TYPES_H) && (HAVE_SYS_TYPES_H+0) +# include <sys/types.h> +#endif +#if defined(HAVE_SYS_STAT_H) && (HAVE_SYS_STAT_H+0) +# include <sys/stat.h> +#endif +#if defined(STDC_HEADERS) && (STDC_HEADERS+0) +# include <stdlib.h> +#elif defined(HAVE_STDLIB_H) && (HAVE_STDLIB_H+0) +# include <stdlib.h> +#endif +#include <stddef.h> +#if defined(HAVE_STRING_H) && (HAVE_STRING_H+0) +# if defined(STDC_HEADERS) && (STDC_HEADERS+0) +# elif defined(HAVE_MEMORY_H) && (HAVE_MEMORY_H+0) +# include <memory.h> +# endif +# include <string.h> +#endif +#if defined(HAVE_STRINGS_H) && (HAVE_STRINGS_H+0) +# include <strings.h> +#endif +#if defined(HAVE_INTTYPES_H) && (HAVE_INTTYPES_H+0) +# include <inttypes.h> +#endif +#if defined(HAVE_STDINT_H) && (HAVE_STDINT_H+0) +# include <stdint.h> +#endif +#if defined(HAVE_UNISTD_H) && (HAVE_UNISTD_H+0) +# include <unistd.h> +#endif +#endif +#endif +#endif +#if defined(LZO_WANT_ACC_INCE_H) +# undef LZO_WANT_ACC_INCE_H +#ifndef __LZO_INCE_H_INCLUDED +#define __LZO_INCE_H_INCLUDED 1 +#if (LZO_LIBC_NAKED) +#elif (LZO_LIBC_FREESTANDING) +#elif (LZO_LIBC_MOSTLY_FREESTANDING) +# if (HAVE_SETJMP_H) +# include <setjmp.h> +# endif +#else +#if (HAVE_STDARG_H) +# include <stdarg.h> +#endif +#if (HAVE_CTYPE_H) +# include <ctype.h> +#endif +#if (HAVE_ERRNO_H) +# include <errno.h> +#endif +#if (HAVE_MALLOC_H) +# include <malloc.h> +#endif +#if (HAVE_ALLOCA_H) +# include <alloca.h> +#endif +#if (HAVE_FCNTL_H) +# include <fcntl.h> +#endif +#if (HAVE_DIRENT_H) +# include <dirent.h> +#endif +#if (HAVE_SETJMP_H) +# include <setjmp.h> +#endif +#if (HAVE_SIGNAL_H) +# include <signal.h> +#endif +#if (HAVE_SYS_TIME_H && HAVE_TIME_H) +# include <sys/time.h> +# include <time.h> +#elif (HAVE_TIME_H) +# include <time.h> +#endif +#if (HAVE_UTIME_H) +# include <utime.h> +#elif (HAVE_SYS_UTIME_H) +# include <sys/utime.h> +#endif +#if (HAVE_IO_H) +# include <io.h> +#endif +#if (HAVE_DOS_H) +# include <dos.h> +#endif +#if (HAVE_DIRECT_H) +# include <direct.h> +#endif +#if (HAVE_SHARE_H) +# include <share.h> +#endif +#if (LZO_CC_NDPC) +# include <os.h> +#endif +#if defined(__TOS__) && (defined(__PUREC__) || defined(__TURBOC__)) +# include <ext.h> +#endif +#endif +#endif +#endif +#if defined(LZO_WANT_ACC_INCI_H) +# undef LZO_WANT_ACC_INCI_H +#ifndef __LZO_INCI_H_INCLUDED +#define __LZO_INCI_H_INCLUDED 1 +#if (LZO_LIBC_NAKED) +#elif (LZO_LIBC_FREESTANDING) +#elif (LZO_LIBC_MOSTLY_FREESTANDING) +#else +#if (LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC)) +# include <tos.h> +#elif (LZO_HAVE_WINDOWS_H) +# if 1 && !defined(WIN32_LEAN_AND_MEAN) +# define WIN32_LEAN_AND_MEAN 1 +# endif +# if 1 && !defined(_WIN32_WINNT) +# define _WIN32_WINNT 0x0400 +# endif +# include <windows.h> +# if (LZO_CC_BORLANDC || LZO_CC_TURBOC) +# include <dir.h> +# endif +#elif (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_WIN16) +# if (LZO_CC_AZTECC) +# include <model.h> +# include <stat.h> +# elif (LZO_CC_BORLANDC || LZO_CC_TURBOC) +# include <alloc.h> +# include <dir.h> +# elif (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__) +# include <sys/exceptn.h> +# elif (LZO_CC_PACIFICC) +# include <unixio.h> +# include <stat.h> +# include <sys.h> +# elif (LZO_CC_WATCOMC) +# include <i86.h> +# endif +#elif (LZO_OS_OS216) +# if (LZO_CC_WATCOMC) +# include <i86.h> +# endif +#endif +#if (HAVE_SYS_MMAN_H) +# include <sys/mman.h> +#endif +#if (HAVE_SYS_RESOURCE_H) +# include <sys/resource.h> +#endif +#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) +# if defined(FP_OFF) +# define LZO_PTR_FP_OFF(x) FP_OFF(x) +# elif defined(_FP_OFF) +# define LZO_PTR_FP_OFF(x) _FP_OFF(x) +# else +# define LZO_PTR_FP_OFF(x) (((const unsigned __far*)&(x))[0]) +# endif +# if defined(FP_SEG) +# define LZO_PTR_FP_SEG(x) FP_SEG(x) +# elif defined(_FP_SEG) +# define LZO_PTR_FP_SEG(x) _FP_SEG(x) +# else +# define LZO_PTR_FP_SEG(x) (((const unsigned __far*)&(x))[1]) +# endif +# if defined(MK_FP) +# define LZO_PTR_MK_FP(s,o) MK_FP(s,o) +# elif defined(_MK_FP) +# define LZO_PTR_MK_FP(s,o) _MK_FP(s,o) +# else +# define LZO_PTR_MK_FP(s,o) ((void __far*)(((unsigned long)(s)<<16)+(unsigned)(o))) +# endif +# if 0 +# undef LZO_PTR_FP_OFF +# undef LZO_PTR_FP_SEG +# undef LZO_PTR_MK_FP +# define LZO_PTR_FP_OFF(x) (((const unsigned __far*)&(x))[0]) +# define LZO_PTR_FP_SEG(x) (((const unsigned __far*)&(x))[1]) +# define LZO_PTR_MK_FP(s,o) ((void __far*)(((unsigned long)(s)<<16)+(unsigned)(o))) +# endif +#endif +#endif +#endif +#endif +#if defined(LZO_WANT_ACC_LIB_H) +# undef LZO_WANT_ACC_LIB_H +#ifndef __LZO_LIB_H_INCLUDED +#define __LZO_LIB_H_INCLUDED 1 +#if !defined(__LZOLIB_FUNCNAME) +# define __LZOLIB_FUNCNAME(f) f +#endif +#if !defined(LZOLIB_EXTERN) +# define LZOLIB_EXTERN(r,f) extern r __LZOLIB_FUNCNAME(f) +#endif +#if !defined(LZOLIB_EXTERN_NOINLINE) +# if defined(__lzo_noinline) +# define LZOLIB_EXTERN_NOINLINE(r,f) extern __lzo_noinline r __LZOLIB_FUNCNAME(f) +# else +# define LZOLIB_EXTERN_NOINLINE(r,f) extern r __LZOLIB_FUNCNAME(f) +# endif +#endif +#if (LZO_SIZEOF_LONG > LZO_SIZEOF_VOID_P) +# define lzolib_handle_t long +#else +# define lzolib_handle_t lzo_intptr_t +#endif +#if 0 +LZOLIB_EXTERN(int, lzo_ascii_digit) (int); +LZOLIB_EXTERN(int, lzo_ascii_islower) (int); +LZOLIB_EXTERN(int, lzo_ascii_isupper) (int); +LZOLIB_EXTERN(int, lzo_ascii_tolower) (int); +LZOLIB_EXTERN(int, lzo_ascii_toupper) (int); +LZOLIB_EXTERN(int, lzo_ascii_utolower) (int); +LZOLIB_EXTERN(int, lzo_ascii_utoupper) (int); +#endif +#define lzo_ascii_isdigit(c) ((LZO_ICAST(unsigned, c) - 48) < 10) +#define lzo_ascii_islower(c) ((LZO_ICAST(unsigned, c) - 97) < 26) +#define lzo_ascii_isupper(c) ((LZO_ICAST(unsigned, c) - 65) < 26) +#define lzo_ascii_tolower(c) (LZO_ICAST(int, c) + (lzo_ascii_isupper(c) << 5)) +#define lzo_ascii_toupper(c) (LZO_ICAST(int, c) - (lzo_ascii_islower(c) << 5)) +#define lzo_ascii_utolower(c) lzo_ascii_tolower(LZO_ITRUNC(unsigned char, c)) +#define lzo_ascii_utoupper(c) lzo_ascii_toupper(LZO_ITRUNC(unsigned char, c)) +#ifndef lzo_hsize_t +#if (LZO_HAVE_MM_HUGE_PTR) +# define lzo_hsize_t unsigned long +# define lzo_hvoid_p void __huge * +# define lzo_hchar_p char __huge * +# define lzo_hchar_pp char __huge * __huge * +# define lzo_hbyte_p unsigned char __huge * +#else +# define lzo_hsize_t size_t +# define lzo_hvoid_p void * +# define lzo_hchar_p char * +# define lzo_hchar_pp char ** +# define lzo_hbyte_p unsigned char * +#endif +#endif +LZOLIB_EXTERN(lzo_hvoid_p, lzo_halloc) (lzo_hsize_t); +LZOLIB_EXTERN(void, lzo_hfree) (lzo_hvoid_p); +#if (LZO_OS_DOS16 || LZO_OS_OS216) +LZOLIB_EXTERN(void __far*, lzo_dos_alloc) (unsigned long); +LZOLIB_EXTERN(int, lzo_dos_free) (void __far*); +#endif +LZOLIB_EXTERN(int, lzo_hmemcmp) (const lzo_hvoid_p, const lzo_hvoid_p, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hvoid_p, lzo_hmemcpy) (lzo_hvoid_p, const lzo_hvoid_p, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hvoid_p, lzo_hmemmove) (lzo_hvoid_p, const lzo_hvoid_p, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hvoid_p, lzo_hmemset) (lzo_hvoid_p, int, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hsize_t, lzo_hstrlen) (const lzo_hchar_p); +LZOLIB_EXTERN(int, lzo_hstrcmp) (const lzo_hchar_p, const lzo_hchar_p); +LZOLIB_EXTERN(int, lzo_hstrncmp)(const lzo_hchar_p, const lzo_hchar_p, lzo_hsize_t); +LZOLIB_EXTERN(int, lzo_ascii_hstricmp) (const lzo_hchar_p, const lzo_hchar_p); +LZOLIB_EXTERN(int, lzo_ascii_hstrnicmp)(const lzo_hchar_p, const lzo_hchar_p, lzo_hsize_t); +LZOLIB_EXTERN(int, lzo_ascii_hmemicmp) (const lzo_hvoid_p, const lzo_hvoid_p, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrstr) (const lzo_hchar_p, const lzo_hchar_p); +LZOLIB_EXTERN(lzo_hchar_p, lzo_ascii_hstristr) (const lzo_hchar_p, const lzo_hchar_p); +LZOLIB_EXTERN(lzo_hvoid_p, lzo_hmemmem) (const lzo_hvoid_p, lzo_hsize_t, const lzo_hvoid_p, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hvoid_p, lzo_ascii_hmemimem) (const lzo_hvoid_p, lzo_hsize_t, const lzo_hvoid_p, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrcpy) (lzo_hchar_p, const lzo_hchar_p); +LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrcat) (lzo_hchar_p, const lzo_hchar_p); +LZOLIB_EXTERN(lzo_hsize_t, lzo_hstrlcpy) (lzo_hchar_p, const lzo_hchar_p, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hsize_t, lzo_hstrlcat) (lzo_hchar_p, const lzo_hchar_p, lzo_hsize_t); +LZOLIB_EXTERN(int, lzo_hstrscpy) (lzo_hchar_p, const lzo_hchar_p, lzo_hsize_t); +LZOLIB_EXTERN(int, lzo_hstrscat) (lzo_hchar_p, const lzo_hchar_p, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrccpy) (lzo_hchar_p, const lzo_hchar_p, int); +LZOLIB_EXTERN(lzo_hvoid_p, lzo_hmemccpy) (lzo_hvoid_p, const lzo_hvoid_p, int, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrchr) (const lzo_hchar_p, int); +LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrrchr) (const lzo_hchar_p, int); +LZOLIB_EXTERN(lzo_hchar_p, lzo_ascii_hstrichr) (const lzo_hchar_p, int); +LZOLIB_EXTERN(lzo_hchar_p, lzo_ascii_hstrrichr) (const lzo_hchar_p, int); +LZOLIB_EXTERN(lzo_hvoid_p, lzo_hmemchr) (const lzo_hvoid_p, int, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hvoid_p, lzo_hmemrchr) (const lzo_hvoid_p, int, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hvoid_p, lzo_ascii_hmemichr) (const lzo_hvoid_p, int, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hvoid_p, lzo_ascii_hmemrichr) (const lzo_hvoid_p, int, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hsize_t, lzo_hstrspn) (const lzo_hchar_p, const lzo_hchar_p); +LZOLIB_EXTERN(lzo_hsize_t, lzo_hstrrspn) (const lzo_hchar_p, const lzo_hchar_p); +LZOLIB_EXTERN(lzo_hsize_t, lzo_hstrcspn) (const lzo_hchar_p, const lzo_hchar_p); +LZOLIB_EXTERN(lzo_hsize_t, lzo_hstrrcspn) (const lzo_hchar_p, const lzo_hchar_p); +LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrpbrk) (const lzo_hchar_p, const lzo_hchar_p); +LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrrpbrk) (const lzo_hchar_p, const lzo_hchar_p); +LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrsep) (lzo_hchar_pp, const lzo_hchar_p); +LZOLIB_EXTERN(lzo_hchar_p, lzo_hstrrsep) (lzo_hchar_pp, const lzo_hchar_p); +LZOLIB_EXTERN(lzo_hchar_p, lzo_ascii_hstrlwr) (lzo_hchar_p); +LZOLIB_EXTERN(lzo_hchar_p, lzo_ascii_hstrupr) (lzo_hchar_p); +LZOLIB_EXTERN(lzo_hvoid_p, lzo_ascii_hmemlwr) (lzo_hvoid_p, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hvoid_p, lzo_ascii_hmemupr) (lzo_hvoid_p, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hsize_t, lzo_hfread) (void *, lzo_hvoid_p, lzo_hsize_t); +LZOLIB_EXTERN(lzo_hsize_t, lzo_hfwrite) (void *, const lzo_hvoid_p, lzo_hsize_t); +#if (LZO_HAVE_MM_HUGE_PTR) +LZOLIB_EXTERN(long, lzo_hread) (int, lzo_hvoid_p, long); +LZOLIB_EXTERN(long, lzo_hwrite) (int, const lzo_hvoid_p, long); +#endif +LZOLIB_EXTERN(long, lzo_safe_hread) (int, lzo_hvoid_p, long); +LZOLIB_EXTERN(long, lzo_safe_hwrite) (int, const lzo_hvoid_p, long); +LZOLIB_EXTERN(unsigned, lzo_ua_get_be16) (const lzo_hvoid_p); +LZOLIB_EXTERN(lzo_uint32l_t, lzo_ua_get_be24) (const lzo_hvoid_p); +LZOLIB_EXTERN(lzo_uint32l_t, lzo_ua_get_be32) (const lzo_hvoid_p); +LZOLIB_EXTERN(void, lzo_ua_set_be16) (lzo_hvoid_p, unsigned); +LZOLIB_EXTERN(void, lzo_ua_set_be24) (lzo_hvoid_p, lzo_uint32l_t); +LZOLIB_EXTERN(void, lzo_ua_set_be32) (lzo_hvoid_p, lzo_uint32l_t); +LZOLIB_EXTERN(unsigned, lzo_ua_get_le16) (const lzo_hvoid_p); +LZOLIB_EXTERN(lzo_uint32l_t, lzo_ua_get_le24) (const lzo_hvoid_p); +LZOLIB_EXTERN(lzo_uint32l_t, lzo_ua_get_le32) (const lzo_hvoid_p); +LZOLIB_EXTERN(void, lzo_ua_set_le16) (lzo_hvoid_p, unsigned); +LZOLIB_EXTERN(void, lzo_ua_set_le24) (lzo_hvoid_p, lzo_uint32l_t); +LZOLIB_EXTERN(void, lzo_ua_set_le32) (lzo_hvoid_p, lzo_uint32l_t); +#if defined(lzo_int64l_t) +LZOLIB_EXTERN(lzo_uint64l_t, lzo_ua_get_be64) (const lzo_hvoid_p); +LZOLIB_EXTERN(void, lzo_ua_set_be64) (lzo_hvoid_p, lzo_uint64l_t); +LZOLIB_EXTERN(lzo_uint64l_t, lzo_ua_get_le64) (const lzo_hvoid_p); +LZOLIB_EXTERN(void, lzo_ua_set_le64) (lzo_hvoid_p, lzo_uint64l_t); +#endif +LZOLIB_EXTERN_NOINLINE(short, lzo_vget_short) (short, int); +LZOLIB_EXTERN_NOINLINE(int, lzo_vget_int) (int, int); +LZOLIB_EXTERN_NOINLINE(long, lzo_vget_long) (long, int); +#if defined(lzo_int64l_t) +LZOLIB_EXTERN_NOINLINE(lzo_int64l_t, lzo_vget_lzo_int64l_t) (lzo_int64l_t, int); +#endif +LZOLIB_EXTERN_NOINLINE(lzo_hsize_t, lzo_vget_lzo_hsize_t) (lzo_hsize_t, int); +#if !(LZO_CFG_NO_FLOAT) +LZOLIB_EXTERN_NOINLINE(float, lzo_vget_float) (float, int); +#endif +#if !(LZO_CFG_NO_DOUBLE) +LZOLIB_EXTERN_NOINLINE(double, lzo_vget_double) (double, int); +#endif +LZOLIB_EXTERN_NOINLINE(lzo_hvoid_p, lzo_vget_lzo_hvoid_p) (lzo_hvoid_p, int); +LZOLIB_EXTERN_NOINLINE(const lzo_hvoid_p, lzo_vget_lzo_hvoid_cp) (const lzo_hvoid_p, int); +#if !defined(LZO_FN_PATH_MAX) +#if (LZO_OS_DOS16 || LZO_OS_WIN16) +# define LZO_FN_PATH_MAX 143 +#elif (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN32 || LZO_OS_WIN64) +# define LZO_FN_PATH_MAX 259 +#elif (LZO_OS_TOS) +# define LZO_FN_PATH_MAX 259 +#endif +#endif +#if !defined(LZO_FN_PATH_MAX) +# define LZO_FN_PATH_MAX 1023 +#endif +#if !defined(LZO_FN_NAME_MAX) +#if (LZO_OS_DOS16 || LZO_OS_WIN16) +# define LZO_FN_NAME_MAX 12 +#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC)) +# define LZO_FN_NAME_MAX 12 +#elif (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__) +#elif (LZO_OS_DOS32) +# define LZO_FN_NAME_MAX 12 +#endif +#endif +#if !defined(LZO_FN_NAME_MAX) +# define LZO_FN_NAME_MAX LZO_FN_PATH_MAX +#endif +#define LZO_FNMATCH_NOESCAPE 1 +#define LZO_FNMATCH_PATHNAME 2 +#define LZO_FNMATCH_PATHSTAR 4 +#define LZO_FNMATCH_PERIOD 8 +#define LZO_FNMATCH_ASCII_CASEFOLD 16 +LZOLIB_EXTERN(int, lzo_fnmatch) (const lzo_hchar_p, const lzo_hchar_p, int); +#undef __LZOLIB_USE_OPENDIR +#if (HAVE_DIRENT_H || LZO_CC_WATCOMC) +# define __LZOLIB_USE_OPENDIR 1 +# if (LZO_OS_DOS32 && defined(__BORLANDC__)) +# elif (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__) +# elif (LZO_OS_OS2 || LZO_OS_OS216) +# elif (LZO_ARCH_M68K && LZO_OS_TOS && LZO_CC_GNUC) +# elif (LZO_OS_WIN32 && !(LZO_HAVE_WINDOWS_H)) +# elif (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_TOS || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64) +# undef __LZOLIB_USE_OPENDIR +# endif +#endif +typedef struct +{ +#if defined(__LZOLIB_USE_OPENDIR) + void* u_dirp; +# if (LZO_CC_WATCOMC) + unsigned short f_time; + unsigned short f_date; + unsigned long f_size; +# endif + char f_name[LZO_FN_NAME_MAX+1]; +#elif (LZO_OS_WIN32 || LZO_OS_WIN64) + lzolib_handle_t u_handle; + unsigned f_attr; + unsigned f_size_low; + unsigned f_size_high; + char f_name[LZO_FN_NAME_MAX+1]; +#elif (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_TOS || LZO_OS_WIN16) + char u_dta[21]; + unsigned char f_attr; + unsigned short f_time; + unsigned short f_date; + unsigned short f_size_low; + unsigned short f_size_high; + char f_name[LZO_FN_NAME_MAX+1]; + char u_dirp; +#else + void* u_dirp; + char f_name[LZO_FN_NAME_MAX+1]; +#endif +} lzo_dir_t; +#ifndef lzo_dir_p +#define lzo_dir_p lzo_dir_t * +#endif +LZOLIB_EXTERN(int, lzo_opendir) (lzo_dir_p, const char*); +LZOLIB_EXTERN(int, lzo_readdir) (lzo_dir_p); +LZOLIB_EXTERN(int, lzo_closedir) (lzo_dir_p); +#if (LZO_CC_GNUC) && (defined(__CYGWIN__) || defined(__MINGW32__)) +# define lzo_alloca(x) __builtin_alloca((x)) +#elif (LZO_CC_GNUC) && (LZO_OS_CONSOLE_PS2) +# define lzo_alloca(x) __builtin_alloca((x)) +#elif (LZO_CC_BORLANDC || LZO_CC_LCC) && defined(__linux__) +#elif (HAVE_ALLOCA) +# define lzo_alloca(x) LZO_STATIC_CAST(void *, alloca((x))) +#endif +#if (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__) +# define lzo_stackavail() stackavail() +#elif (LZO_ARCH_I086 && LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0410)) +# define lzo_stackavail() stackavail() +#elif (LZO_ARCH_I086 && LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0400)) +# if (LZO_OS_WIN16) && (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM) +# else +# define lzo_stackavail() stackavail() +# endif +#elif ((LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_CC_DMC || LZO_CC_SYMANTECC)) +# define lzo_stackavail() stackavail() +#elif ((LZO_ARCH_I086) && LZO_CC_MSC && (_MSC_VER >= 700)) +# define lzo_stackavail() _stackavail() +#elif ((LZO_ARCH_I086) && LZO_CC_MSC) +# define lzo_stackavail() stackavail() +#elif ((LZO_ARCH_I086 || LZO_ARCH_I386) && LZO_CC_TURBOC && (__TURBOC__ >= 0x0450)) +# define lzo_stackavail() stackavail() +#elif (LZO_ARCH_I086 && LZO_CC_TURBOC && (__TURBOC__ >= 0x0400)) + LZO_EXTERN_C size_t __cdecl stackavail(void); +# define lzo_stackavail() stackavail() +#elif ((LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_CC_WATCOMC)) +# define lzo_stackavail() stackavail() +#elif (LZO_ARCH_I086 && LZO_CC_ZORTECHC) +# define lzo_stackavail() _chkstack() +#endif +LZOLIB_EXTERN(lzo_intptr_t, lzo_get_osfhandle) (int); +LZOLIB_EXTERN(const char *, lzo_getenv) (const char *); +LZOLIB_EXTERN(int, lzo_isatty) (int); +LZOLIB_EXTERN(int, lzo_mkdir) (const char*, unsigned); +LZOLIB_EXTERN(int, lzo_rmdir) (const char*); +LZOLIB_EXTERN(int, lzo_response) (int*, char***); +LZOLIB_EXTERN(int, lzo_set_binmode) (int, int); +#if defined(lzo_int32e_t) +LZOLIB_EXTERN(lzo_int32e_t, lzo_muldiv32s) (lzo_int32e_t, lzo_int32e_t, lzo_int32e_t); +LZOLIB_EXTERN(lzo_uint32e_t, lzo_muldiv32u) (lzo_uint32e_t, lzo_uint32e_t, lzo_uint32e_t); +#endif +LZOLIB_EXTERN(void, lzo_wildargv) (int*, char***); +LZOLIB_EXTERN_NOINLINE(void, lzo_debug_break) (void); +LZOLIB_EXTERN_NOINLINE(void, lzo_debug_nop) (void); +LZOLIB_EXTERN_NOINLINE(int, lzo_debug_align_check_query) (void); +LZOLIB_EXTERN_NOINLINE(int, lzo_debug_align_check_enable) (int); +LZOLIB_EXTERN_NOINLINE(unsigned, lzo_debug_running_on_qemu) (void); +LZOLIB_EXTERN_NOINLINE(unsigned, lzo_debug_running_on_valgrind) (void); +#if defined(lzo_int32e_t) +LZOLIB_EXTERN(int, lzo_tsc_read) (lzo_uint32e_t*); +#endif +struct lzo_pclock_handle_t; +struct lzo_pclock_t; +typedef struct lzo_pclock_handle_t lzo_pclock_handle_t; +typedef struct lzo_pclock_t lzo_pclock_t; +#ifndef lzo_pclock_handle_p +#define lzo_pclock_handle_p lzo_pclock_handle_t * +#endif +#ifndef lzo_pclock_p +#define lzo_pclock_p lzo_pclock_t * +#endif +#define LZO_PCLOCK_REALTIME 0 +#define LZO_PCLOCK_MONOTONIC 1 +#define LZO_PCLOCK_PROCESS_CPUTIME_ID 2 +#define LZO_PCLOCK_THREAD_CPUTIME_ID 3 +typedef int (*lzo_pclock_gettime_t) (lzo_pclock_handle_p, lzo_pclock_p); +struct lzo_pclock_handle_t { + lzolib_handle_t h; + int mode; + int read_error; + const char* name; + lzo_pclock_gettime_t gettime; +#if defined(lzo_int64l_t) + lzo_uint64l_t ticks_base; +#endif +}; +struct lzo_pclock_t { +#if defined(lzo_int64l_t) + lzo_int64l_t tv_sec; +#else + lzo_int32l_t tv_sec_high; + lzo_uint32l_t tv_sec_low; +#endif + lzo_uint32l_t tv_nsec; +}; +LZOLIB_EXTERN(int, lzo_pclock_open) (lzo_pclock_handle_p, int); +LZOLIB_EXTERN(int, lzo_pclock_open_default) (lzo_pclock_handle_p); +LZOLIB_EXTERN(int, lzo_pclock_close) (lzo_pclock_handle_p); +LZOLIB_EXTERN(void, lzo_pclock_read) (lzo_pclock_handle_p, lzo_pclock_p); +#if !(LZO_CFG_NO_DOUBLE) +LZOLIB_EXTERN(double, lzo_pclock_get_elapsed) (lzo_pclock_handle_p, const lzo_pclock_p, const lzo_pclock_p); +#endif +LZOLIB_EXTERN(int, lzo_pclock_flush_cpu_cache) (lzo_pclock_handle_p, unsigned); +struct lzo_getopt_t; +typedef struct lzo_getopt_t lzo_getopt_t; +#ifndef lzo_getopt_p +#define lzo_getopt_p lzo_getopt_t * +#endif +struct lzo_getopt_longopt_t; +typedef struct lzo_getopt_longopt_t lzo_getopt_longopt_t; +#ifndef lzo_getopt_longopt_p +#define lzo_getopt_longopt_p lzo_getopt_longopt_t * +#endif +struct lzo_getopt_longopt_t { + const char* name; + int has_arg; + int* flag; + int val; +}; +typedef void (*lzo_getopt_opterr_t)(lzo_getopt_p, const char*, void *); +struct lzo_getopt_t { + void *user; + const char *progname; + int bad_option; + char *optarg; + lzo_getopt_opterr_t opterr; + int optind; + int optopt; + int errcount; + int argc; char** argv; + int eof; int shortpos; + int pending_rotate_first, pending_rotate_middle; +}; +enum { LZO_GETOPT_NO_ARG, LZO_GETOPT_REQUIRED_ARG, LZO_GETOPT_OPTIONAL_ARG, LZO_GETOPT_EXACT_ARG = 0x10 }; +enum { LZO_GETOPT_PERMUTE, LZO_GETOPT_RETURN_IN_ORDER, LZO_GETOPT_REQUIRE_ORDER }; +LZOLIB_EXTERN(void, lzo_getopt_init) (lzo_getopt_p g, + int start_argc, int argc, char** argv); +LZOLIB_EXTERN(int, lzo_getopt) (lzo_getopt_p g, + const char* shortopts, + const lzo_getopt_longopt_p longopts, + int* longind); +typedef struct { + lzo_uint32l_t seed; +} lzo_rand31_t; +#ifndef lzo_rand31_p +#define lzo_rand31_p lzo_rand31_t * +#endif +LZOLIB_EXTERN(void, lzo_srand31) (lzo_rand31_p, lzo_uint32l_t); +LZOLIB_EXTERN(lzo_uint32l_t, lzo_rand31) (lzo_rand31_p); +#if defined(lzo_int64l_t) +typedef struct { + lzo_uint64l_t seed; +} lzo_rand48_t; +#ifndef lzo_rand48_p +#define lzo_rand48_p lzo_rand48_t * +#endif +LZOLIB_EXTERN(void, lzo_srand48) (lzo_rand48_p, lzo_uint32l_t); +LZOLIB_EXTERN(lzo_uint32l_t, lzo_rand48) (lzo_rand48_p); +LZOLIB_EXTERN(lzo_uint32l_t, lzo_rand48_r32) (lzo_rand48_p); +#endif +#if defined(lzo_int64l_t) +typedef struct { + lzo_uint64l_t seed; +} lzo_rand64_t; +#ifndef lzo_rand64_p +#define lzo_rand64_p lzo_rand64_t * +#endif +LZOLIB_EXTERN(void, lzo_srand64) (lzo_rand64_p, lzo_uint64l_t); +LZOLIB_EXTERN(lzo_uint32l_t, lzo_rand64) (lzo_rand64_p); +LZOLIB_EXTERN(lzo_uint32l_t, lzo_rand64_r32) (lzo_rand64_p); +#endif +typedef struct { + unsigned n; + lzo_uint32l_t s[624]; +} lzo_randmt_t; +#ifndef lzo_randmt_p +#define lzo_randmt_p lzo_randmt_t * +#endif +LZOLIB_EXTERN(void, lzo_srandmt) (lzo_randmt_p, lzo_uint32l_t); +LZOLIB_EXTERN(lzo_uint32l_t, lzo_randmt) (lzo_randmt_p); +LZOLIB_EXTERN(lzo_uint32l_t, lzo_randmt_r32) (lzo_randmt_p); +#if defined(lzo_int64l_t) +typedef struct { + unsigned n; + lzo_uint64l_t s[312]; +} lzo_randmt64_t; +#ifndef lzo_randmt64_p +#define lzo_randmt64_p lzo_randmt64_t * +#endif +LZOLIB_EXTERN(void, lzo_srandmt64) (lzo_randmt64_p, lzo_uint64l_t); +LZOLIB_EXTERN(lzo_uint64l_t, lzo_randmt64_r64) (lzo_randmt64_p); +#endif +#define LZO_SPAWN_P_WAIT 0 +#define LZO_SPAWN_P_NOWAIT 1 +LZOLIB_EXTERN(int, lzo_spawnv) (int mode, const char* fn, const char* const * argv); +LZOLIB_EXTERN(int, lzo_spawnvp) (int mode, const char* fn, const char* const * argv); +LZOLIB_EXTERN(int, lzo_spawnve) (int mode, const char* fn, const char* const * argv, const char * const envp); +#endif +#endif +#if defined(LZO_WANT_ACC_CXX_H) +# undef LZO_WANT_ACC_CXX_H +#ifndef __LZO_CXX_H_INCLUDED +#define __LZO_CXX_H_INCLUDED 1 +#if defined(__cplusplus) +#if defined(LZO_CXX_NOTHROW) +#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020800ul)) +#elif (LZO_CC_BORLANDC && (__BORLANDC__ < 0x0450)) +#elif (LZO_CC_GHS && !defined(__EXCEPTIONS)) +#elif (LZO_CC_HIGHC) +#elif (LZO_CC_MSC && (_MSC_VER < 1100)) +#elif (LZO_CC_NDPC) +#elif (LZO_CC_TURBOC) +#elif (LZO_CC_WATCOMC && !defined(_CPPUNWIND)) +#elif (LZO_CC_ZORTECHC) +#else +# define LZO_CXX_NOTHROW throw() +#endif +#if !defined(LZO_CXX_NOTHROW) +# define LZO_CXX_NOTHROW /*empty*/ +#endif +#if defined(__LZO_CXX_DO_NEW) +#elif (LZO_CC_GHS || LZO_CC_NDPC || LZO_CC_PGI) +# define __LZO_CXX_DO_NEW { return 0; } +#elif ((LZO_CC_BORLANDC || LZO_CC_TURBOC) && LZO_ARCH_I086) +# define __LZO_CXX_DO_NEW { return 0; } +#else +# define __LZO_CXX_DO_NEW ; +#endif +#if defined(__LZO_CXX_DO_DELETE) +#elif (LZO_CC_BORLANDC || LZO_CC_TURBOC) +# define __LZO_CXX_DO_DELETE { } +#else +# define __LZO_CXX_DO_DELETE LZO_CXX_NOTHROW { } +#endif +#if (LZO_CC_BORLANDC && (__BORLANDC__ < 0x0450)) +#elif (LZO_CC_MSC && LZO_MM_HUGE) +# define LZO_CXX_DISABLE_NEW_DELETE private: +#elif (LZO_CC_MSC && (_MSC_VER < 1100)) +#elif (LZO_CC_NDPC) +#elif (LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) +#elif (LZO_CC_TURBOC) +#elif (LZO_CC_WATCOMC && (__WATCOMC__ < 1100)) +#else +# define __LZO_CXX_HAVE_ARRAY_NEW 1 +#endif +#if (__LZO_CXX_HAVE_ARRAY_NEW) +# define __LZO_CXX_HAVE_PLACEMENT_NEW 1 +#endif +#if (__LZO_CXX_HAVE_PLACEMENT_NEW) +# if (LZO_CC_GNUC >= 0x030000ul) +# define __LZO_CXX_HAVE_PLACEMENT_DELETE 1 +# elif (LZO_CC_INTELC) +# define __LZO_CXX_HAVE_PLACEMENT_DELETE 1 +# elif (LZO_CC_MSC && (_MSC_VER >= 1200)) +# define __LZO_CXX_HAVE_PLACEMENT_DELETE 1 +# elif (LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define __LZO_CXX_HAVE_PLACEMENT_DELETE 1 +# elif (LZO_CC_PGI) +# define __LZO_CXX_HAVE_PLACEMENT_DELETE 1 +# endif +#endif +#if defined(LZO_CXX_DISABLE_NEW_DELETE) +#elif defined(new) || defined(delete) +# define LZO_CXX_DISABLE_NEW_DELETE private: +#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025b00ul)) +# define LZO_CXX_DISABLE_NEW_DELETE private: +#elif (LZO_CC_HIGHC) +# define LZO_CXX_DISABLE_NEW_DELETE private: +#elif !(__LZO_CXX_HAVE_ARRAY_NEW) +# define LZO_CXX_DISABLE_NEW_DELETE \ + protected: static void operator delete(void*) __LZO_CXX_DO_DELETE \ + protected: static void* operator new(size_t) __LZO_CXX_DO_NEW \ + private: +#else +# define LZO_CXX_DISABLE_NEW_DELETE \ + protected: static void operator delete(void*) __LZO_CXX_DO_DELETE \ + static void operator delete[](void*) __LZO_CXX_DO_DELETE \ + private: static void* operator new(size_t) __LZO_CXX_DO_NEW \ + static void* operator new[](size_t) __LZO_CXX_DO_NEW +#endif +#if defined(LZO_CXX_TRIGGER_FUNCTION) +#else +# define LZO_CXX_TRIGGER_FUNCTION \ + protected: virtual const void* lzo_cxx_trigger_function() const; \ + private: +#endif +#if defined(LZO_CXX_TRIGGER_FUNCTION_IMPL) +#else +# define LZO_CXX_TRIGGER_FUNCTION_IMPL(klass) \ + const void* klass::lzo_cxx_trigger_function() const { return LZO_STATIC_CAST(const void *, 0); } +#endif +#endif +#endif +#endif +#if defined(LZO_WANT_ACC_CHK_CH) +# undef LZO_WANT_ACC_CHK_CH +#if !defined(LZOCHK_ASSERT) +# define LZOCHK_ASSERT(expr) LZO_COMPILE_TIME_ASSERT_HEADER(expr) +#endif +#if !defined(LZOCHK_ASSERT_SIGN_T) +# define LZOCHK_ASSERT_SIGN_T(type,relop) \ + LZOCHK_ASSERT( LZO_STATIC_CAST(type, -1) relop LZO_STATIC_CAST(type, 0)) \ + LZOCHK_ASSERT( LZO_STATIC_CAST(type, ~LZO_STATIC_CAST(type, 0)) relop LZO_STATIC_CAST(type, 0)) \ + LZOCHK_ASSERT( LZO_STATIC_CAST(type, ~LZO_STATIC_CAST(type, 0)) == LZO_STATIC_CAST(type, -1)) +#endif +#if !defined(LZOCHK_ASSERT_IS_SIGNED_T) +# define LZOCHK_ASSERT_IS_SIGNED_T(type) LZOCHK_ASSERT_SIGN_T(type,<) +#endif +#if !defined(LZOCHK_ASSERT_IS_UNSIGNED_T) +# if (LZO_BROKEN_INTEGRAL_PROMOTION) +# define LZOCHK_ASSERT_IS_UNSIGNED_T(type) \ + LZOCHK_ASSERT( LZO_STATIC_CAST(type, -1) > LZO_STATIC_CAST(type, 0) ) +# else +# define LZOCHK_ASSERT_IS_UNSIGNED_T(type) LZOCHK_ASSERT_SIGN_T(type,>) +# endif +#endif +#if defined(LZOCHK_CFG_PEDANTIC) +#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550) && (__BORLANDC__ < 0x0560)) +# pragma option push -w-8055 +#elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0530) && (__BORLANDC__ < 0x0550)) +# pragma option push -w-osh +#endif +#endif +#if (LZO_0xffffffffL - LZO_UINT32_C(4294967294) != 1) +# error "preprocessor error" +#endif +#if (LZO_0xffffffffL - LZO_UINT32_C(0xfffffffd) != 2) +# error "preprocessor error" +#endif +#if +0 +# error "preprocessor error" +#endif +#if -0 +# error "preprocessor error" +#endif +#if +0 != 0 +# error "preprocessor error" +#endif +#if -0 != 0 +# error "preprocessor error" +#endif +#define LZOCHK_VAL 1 +#define LZOCHK_TMP1 LZOCHK_VAL +#undef LZOCHK_VAL +#define LZOCHK_VAL 2 +#define LZOCHK_TMP2 LZOCHK_VAL +#if (LZOCHK_TMP1 != 2) +# error "preprocessor error 3a" +#endif +#if (LZOCHK_TMP2 != 2) +# error "preprocessor error 3b" +#endif +#undef LZOCHK_VAL +#if (LZOCHK_TMP2) +# error "preprocessor error 3c" +#endif +#if (LZOCHK_TMP2 + 0 != 0) +# error "preprocessor error 3d" +#endif +#undef LZOCHK_TMP1 +#undef LZOCHK_TMP2 +#if 0 || defined(LZOCHK_CFG_PEDANTIC) +# if (LZO_ARCH_MIPS) && defined(_MIPS_SZINT) + LZOCHK_ASSERT((_MIPS_SZINT) == 8 * sizeof(int)) +# endif +# if (LZO_ARCH_MIPS) && defined(_MIPS_SZLONG) + LZOCHK_ASSERT((_MIPS_SZLONG) == 8 * sizeof(long)) +# endif +# if (LZO_ARCH_MIPS) && defined(_MIPS_SZPTR) + LZOCHK_ASSERT((_MIPS_SZPTR) == 8 * sizeof(void *)) +# endif +#endif + LZOCHK_ASSERT(1 == 1) + LZOCHK_ASSERT(__LZO_MASK_GEN(1u,1) == 1u) + LZOCHK_ASSERT(__LZO_MASK_GEN(1u,2) == 3u) + LZOCHK_ASSERT(__LZO_MASK_GEN(1u,3) == 7u) + LZOCHK_ASSERT(__LZO_MASK_GEN(1u,8) == 255u) +#if (LZO_SIZEOF_INT >= 2) + LZOCHK_ASSERT(__LZO_MASK_GEN(1,15) == 32767) + LZOCHK_ASSERT(__LZO_MASK_GEN(1u,16) == 0xffffU) + LZOCHK_ASSERT(__LZO_MASK_GEN(0u,16) == 0u) +#endif + LZOCHK_ASSERT(__LZO_MASK_GEN(1ul,16) == 0xffffUL) + LZOCHK_ASSERT(__LZO_MASK_GEN(0ul,16) == 0ul) +#if (LZO_SIZEOF_INT >= 4) + LZOCHK_ASSERT(__LZO_MASK_GEN(1,31) == 2147483647) + LZOCHK_ASSERT(__LZO_MASK_GEN(1u,32) == 0xffffffffU) + LZOCHK_ASSERT(__LZO_MASK_GEN(0u,32) == 0u) +#endif +#if (LZO_SIZEOF_LONG >= 4) + LZOCHK_ASSERT(__LZO_MASK_GEN(1ul,32) == 0xffffffffUL) + LZOCHK_ASSERT(__LZO_MASK_GEN(0ul,32) == 0ul) +#endif +#if (LZO_SIZEOF_LONG >= 8) + LZOCHK_ASSERT(__LZO_MASK_GEN(1ul,64) == 0xffffffffffffffffUL) + LZOCHK_ASSERT(__LZO_MASK_GEN(0ul,64) == 0ul) +#endif +#if !(LZO_BROKEN_INTEGRAL_PROMOTION) + LZOCHK_ASSERT(__LZO_MASK_GEN(1u,LZO_SIZEOF_INT*8) == ~0u) + LZOCHK_ASSERT(__LZO_MASK_GEN(1ul,LZO_SIZEOF_LONG*8) == ~0ul) +#endif +#if 1 + LZOCHK_ASSERT(__LZO_MASK_GEN(0,0) == 0) + LZOCHK_ASSERT(__LZO_MASK_GEN(1,0) == 0) + LZOCHK_ASSERT(__LZO_MASK_GEN(2,0) == 0) + LZOCHK_ASSERT(__LZO_MASK_GEN(4,0) == 0) +#endif +#if 1 + LZOCHK_ASSERT(__LZO_MASK_GEN(2,1) == 2) + LZOCHK_ASSERT(__LZO_MASK_GEN(4,1) == 4) + LZOCHK_ASSERT(__LZO_MASK_GEN(8,1) == 8) + LZOCHK_ASSERT(__LZO_MASK_GEN(2,2) == 2+4) + LZOCHK_ASSERT(__LZO_MASK_GEN(4,2) == 4+8) + LZOCHK_ASSERT(__LZO_MASK_GEN(8,2) == 8+16) + LZOCHK_ASSERT(__LZO_MASK_GEN(2,3) == 2+4+8) + LZOCHK_ASSERT(__LZO_MASK_GEN(4,3) == 4+8+16) + LZOCHK_ASSERT(__LZO_MASK_GEN(8,3) == 8+16+32) + LZOCHK_ASSERT(__LZO_MASK_GEN(7,1) == 7) + LZOCHK_ASSERT(__LZO_MASK_GEN(7,2) == 7+14) + LZOCHK_ASSERT(__LZO_MASK_GEN(7,3) == 7+14+28) +#endif +#if !(LZO_BROKEN_SIGNED_RIGHT_SHIFT) + LZOCHK_ASSERT(((-1) >> 7) == -1) +#endif + LZOCHK_ASSERT(((1) >> 7) == 0) +#if (LZO_CC_INTELC && (__INTEL_COMPILER >= 900)) +# pragma warning(push) +# pragma warning(disable: 1025) +#endif + LZOCHK_ASSERT((~0l & ~0) == ~0l) + LZOCHK_ASSERT((~0l & ~0u) == ~0u) + LZOCHK_ASSERT((~0ul & ~0) == ~0ul) + LZOCHK_ASSERT((~0ul & ~0u) == ~0u) +#if defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0150) +#elif (LZO_SIZEOF_INT == 2) + LZOCHK_ASSERT((~0l & ~0u) == 0xffffU) + LZOCHK_ASSERT((~0ul & ~0u) == 0xffffU) +#elif (LZO_SIZEOF_INT == 4) + LZOCHK_ASSERT((~0l & ~0u) == 0xffffffffU) + LZOCHK_ASSERT((~0ul & ~0u) == 0xffffffffU) +#endif +#if (LZO_CC_INTELC && (__INTEL_COMPILER >= 900)) +# pragma warning(pop) +#endif + LZOCHK_ASSERT_IS_SIGNED_T(signed char) + LZOCHK_ASSERT_IS_UNSIGNED_T(unsigned char) + LZOCHK_ASSERT(sizeof(signed char) == sizeof(char)) + LZOCHK_ASSERT(sizeof(unsigned char) == sizeof(char)) + LZOCHK_ASSERT(sizeof(char) == 1) +#if (LZO_CC_CILLY) && (!defined(__CILLY__) || (__CILLY__ < 0x010302L)) +#else + LZOCHK_ASSERT(sizeof(char) == sizeof(LZO_STATIC_CAST(char, 0))) +#endif +#if defined(__cplusplus) + LZOCHK_ASSERT(sizeof('\0') == sizeof(char)) +#else +# if (LZO_CC_DMC) +# else + LZOCHK_ASSERT(sizeof('\0') == sizeof(int)) +# endif +#endif +#if defined(__lzo_alignof) + LZOCHK_ASSERT(__lzo_alignof(char) == 1) + LZOCHK_ASSERT(__lzo_alignof(signed char) == 1) + LZOCHK_ASSERT(__lzo_alignof(unsigned char) == 1) +#if defined(lzo_int16e_t) + LZOCHK_ASSERT(__lzo_alignof(lzo_int16e_t) >= 1) + LZOCHK_ASSERT(__lzo_alignof(lzo_int16e_t) <= 2) +#endif +#if defined(lzo_int32e_t) + LZOCHK_ASSERT(__lzo_alignof(lzo_int32e_t) >= 1) + LZOCHK_ASSERT(__lzo_alignof(lzo_int32e_t) <= 4) +#endif +#endif + LZOCHK_ASSERT_IS_SIGNED_T(short) + LZOCHK_ASSERT_IS_UNSIGNED_T(unsigned short) + LZOCHK_ASSERT(sizeof(short) == sizeof(unsigned short)) +#if !(LZO_ABI_I8LP16) + LZOCHK_ASSERT(sizeof(short) >= 2) +#endif + LZOCHK_ASSERT(sizeof(short) >= sizeof(char)) +#if (LZO_CC_CILLY) && (!defined(__CILLY__) || (__CILLY__ < 0x010302L)) +#else + LZOCHK_ASSERT(sizeof(short) == sizeof(LZO_STATIC_CAST(short, 0))) +#endif +#if (LZO_SIZEOF_SHORT > 0) + LZOCHK_ASSERT(sizeof(short) == LZO_SIZEOF_SHORT) +#endif + LZOCHK_ASSERT_IS_SIGNED_T(int) + LZOCHK_ASSERT_IS_UNSIGNED_T(unsigned int) + LZOCHK_ASSERT(sizeof(int) == sizeof(unsigned int)) +#if !(LZO_ABI_I8LP16) + LZOCHK_ASSERT(sizeof(int) >= 2) +#endif + LZOCHK_ASSERT(sizeof(int) >= sizeof(short)) + LZOCHK_ASSERT(sizeof(int) == sizeof(0)) + LZOCHK_ASSERT(sizeof(int) == sizeof(LZO_STATIC_CAST(int, 0))) +#if (LZO_SIZEOF_INT > 0) + LZOCHK_ASSERT(sizeof(int) == LZO_SIZEOF_INT) +#endif + LZOCHK_ASSERT(sizeof(0) == sizeof(int)) + LZOCHK_ASSERT_IS_SIGNED_T(long) + LZOCHK_ASSERT_IS_UNSIGNED_T(unsigned long) + LZOCHK_ASSERT(sizeof(long) == sizeof(unsigned long)) +#if !(LZO_ABI_I8LP16) + LZOCHK_ASSERT(sizeof(long) >= 4) +#endif + LZOCHK_ASSERT(sizeof(long) >= sizeof(int)) + LZOCHK_ASSERT(sizeof(long) == sizeof(0L)) + LZOCHK_ASSERT(sizeof(long) == sizeof(LZO_STATIC_CAST(long, 0))) +#if (LZO_SIZEOF_LONG > 0) + LZOCHK_ASSERT(sizeof(long) == LZO_SIZEOF_LONG) +#endif + LZOCHK_ASSERT(sizeof(0L) == sizeof(long)) + LZOCHK_ASSERT_IS_UNSIGNED_T(size_t) + LZOCHK_ASSERT(sizeof(size_t) >= sizeof(int)) + LZOCHK_ASSERT(sizeof(size_t) == sizeof(sizeof(0))) +#if (LZO_SIZEOF_SIZE_T > 0) + LZOCHK_ASSERT(sizeof(size_t) == LZO_SIZEOF_SIZE_T) +#endif + LZOCHK_ASSERT_IS_SIGNED_T(ptrdiff_t) + LZOCHK_ASSERT(sizeof(ptrdiff_t) >= sizeof(int)) + LZOCHK_ASSERT(sizeof(ptrdiff_t) >= sizeof(size_t)) +#if !(LZO_BROKEN_SIZEOF) + LZOCHK_ASSERT(sizeof(ptrdiff_t) == sizeof(LZO_STATIC_CAST(char*, 0) - LZO_STATIC_CAST(char*, 0))) +# if (LZO_HAVE_MM_HUGE_PTR) + LZOCHK_ASSERT(4 == sizeof(LZO_STATIC_CAST(char __huge*, 0) - LZO_STATIC_CAST(char __huge*, 0))) +# endif +#endif +#if (LZO_SIZEOF_PTRDIFF_T > 0) + LZOCHK_ASSERT(sizeof(ptrdiff_t) == LZO_SIZEOF_PTRDIFF_T) +#endif + LZOCHK_ASSERT(sizeof(void*) >= sizeof(char*)) +#if (LZO_SIZEOF_VOID_P > 0) + LZOCHK_ASSERT(sizeof(void*) == LZO_SIZEOF_VOID_P) + LZOCHK_ASSERT(sizeof(char*) == LZO_SIZEOF_VOID_P) +#endif +#if (LZO_HAVE_MM_HUGE_PTR) + LZOCHK_ASSERT(4 == sizeof(void __huge*)) + LZOCHK_ASSERT(4 == sizeof(char __huge*)) +#endif +#if (LZO_ABI_I8LP16) + LZOCHK_ASSERT((((1u << 7) + 1) >> 7) == 1) + LZOCHK_ASSERT((((1ul << 15) + 1) >> 15) == 1) +#else + LZOCHK_ASSERT((((1u << 15) + 1) >> 15) == 1) + LZOCHK_ASSERT((((1ul << 31) + 1) >> 31) == 1) +#endif +#if defined(LZOCHK_CFG_PEDANTIC) +#if defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0150) +#else + LZOCHK_ASSERT((1 << (8*LZO_SIZEOF_INT-1)) < 0) +#endif +#endif + LZOCHK_ASSERT((1u << (8*LZO_SIZEOF_INT-1)) > 0) +#if defined(LZOCHK_CFG_PEDANTIC) + LZOCHK_ASSERT((1l << (8*LZO_SIZEOF_LONG-1)) < 0) +#endif + LZOCHK_ASSERT((1ul << (8*LZO_SIZEOF_LONG-1)) > 0) +#if defined(lzo_int16e_t) + LZOCHK_ASSERT(sizeof(lzo_int16e_t) == 2) + LZOCHK_ASSERT(sizeof(lzo_int16e_t) == LZO_SIZEOF_LZO_INT16E_T) + LZOCHK_ASSERT(sizeof(lzo_uint16e_t) == 2) + LZOCHK_ASSERT(sizeof(lzo_int16e_t) == sizeof(lzo_uint16e_t)) + LZOCHK_ASSERT_IS_SIGNED_T(lzo_int16e_t) + LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint16e_t) +#if defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0150) +#else + LZOCHK_ASSERT((LZO_STATIC_CAST(lzo_uint16e_t, (~LZO_STATIC_CAST(lzo_uint16e_t,0ul))) >> 15) == 1) +#endif + LZOCHK_ASSERT( LZO_STATIC_CAST(lzo_int16e_t, (1 + ~LZO_STATIC_CAST(lzo_int16e_t, 0))) == 0) +#if defined(LZOCHK_CFG_PEDANTIC) + LZOCHK_ASSERT( LZO_STATIC_CAST(lzo_uint16e_t, (1 + ~LZO_STATIC_CAST(lzo_uint16e_t, 0))) == 0) +#endif +#endif +#if defined(lzo_int32e_t) + LZOCHK_ASSERT(sizeof(lzo_int32e_t) == 4) + LZOCHK_ASSERT(sizeof(lzo_int32e_t) == LZO_SIZEOF_LZO_INT32E_T) + LZOCHK_ASSERT(sizeof(lzo_uint32e_t) == 4) + LZOCHK_ASSERT(sizeof(lzo_int32e_t) == sizeof(lzo_uint32e_t)) + LZOCHK_ASSERT_IS_SIGNED_T(lzo_int32e_t) + LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_int32e_t, 1) << 30) + 1) >> 30) == 1) + LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint32e_t) + LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_uint32e_t, 1) << 31) + 1) >> 31) == 1) + LZOCHK_ASSERT((LZO_STATIC_CAST(lzo_uint32e_t, (~LZO_STATIC_CAST(lzo_uint32e_t, 0ul))) >> 31) == 1) + LZOCHK_ASSERT( LZO_STATIC_CAST(lzo_int32e_t, (1 + ~LZO_STATIC_CAST(lzo_int32e_t, 0))) == 0) +#if defined(LZOCHK_CFG_PEDANTIC) + LZOCHK_ASSERT( LZO_STATIC_CAST(lzo_uint32e_t, (1 + ~LZO_STATIC_CAST(lzo_uint32e_t, 0))) == 0) +#endif +#endif +#if defined(lzo_int32e_t) + LZOCHK_ASSERT(sizeof(lzo_int32l_t) >= sizeof(lzo_int32e_t)) +#endif + LZOCHK_ASSERT(sizeof(lzo_int32l_t) >= 4) + LZOCHK_ASSERT(sizeof(lzo_int32l_t) == LZO_SIZEOF_LZO_INT32L_T) + LZOCHK_ASSERT(sizeof(lzo_uint32l_t) >= 4) + LZOCHK_ASSERT(sizeof(lzo_int32l_t) == sizeof(lzo_uint32l_t)) + LZOCHK_ASSERT_IS_SIGNED_T(lzo_int32l_t) + LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_int32l_t, 1) << 30) + 1) >> 30) == 1) + LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint32l_t) + LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_uint32l_t, 1) << 31) + 1) >> 31) == 1) + LZOCHK_ASSERT(sizeof(lzo_int32f_t) >= sizeof(int)) +#if defined(lzo_int32e_t) + LZOCHK_ASSERT(sizeof(lzo_int32f_t) >= sizeof(lzo_int32e_t)) +#endif + LZOCHK_ASSERT(sizeof(lzo_int32f_t) >= sizeof(lzo_int32l_t)) + LZOCHK_ASSERT(sizeof(lzo_int32f_t) >= 4) + LZOCHK_ASSERT(sizeof(lzo_int32f_t) >= sizeof(lzo_int32l_t)) + LZOCHK_ASSERT(sizeof(lzo_int32f_t) == LZO_SIZEOF_LZO_INT32F_T) + LZOCHK_ASSERT(sizeof(lzo_uint32f_t) >= 4) + LZOCHK_ASSERT(sizeof(lzo_uint32f_t) >= sizeof(lzo_uint32l_t)) + LZOCHK_ASSERT(sizeof(lzo_int32f_t) == sizeof(lzo_uint32f_t)) + LZOCHK_ASSERT_IS_SIGNED_T(lzo_int32f_t) + LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_int32f_t, 1) << 30) + 1) >> 30) == 1) + LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint32f_t) + LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_uint32f_t, 1) << 31) + 1) >> 31) == 1) +#if defined(lzo_int64e_t) + LZOCHK_ASSERT(sizeof(lzo_int64e_t) == 8) + LZOCHK_ASSERT(sizeof(lzo_int64e_t) == LZO_SIZEOF_LZO_INT64E_T) + LZOCHK_ASSERT(sizeof(lzo_uint64e_t) == 8) + LZOCHK_ASSERT(sizeof(lzo_int64e_t) == sizeof(lzo_uint64e_t)) + LZOCHK_ASSERT_IS_SIGNED_T(lzo_int64e_t) +#if (LZO_CC_BORLANDC && (__BORLANDC__ < 0x0530)) +#else + LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint64e_t) +#endif +#endif +#if defined(lzo_int64l_t) +#if defined(lzo_int64e_t) + LZOCHK_ASSERT(sizeof(lzo_int64l_t) >= sizeof(lzo_int64e_t)) +#endif + LZOCHK_ASSERT(sizeof(lzo_int64l_t) >= 8) + LZOCHK_ASSERT(sizeof(lzo_int64l_t) == LZO_SIZEOF_LZO_INT64L_T) + LZOCHK_ASSERT(sizeof(lzo_uint64l_t) >= 8) + LZOCHK_ASSERT(sizeof(lzo_int64l_t) == sizeof(lzo_uint64l_t)) + LZOCHK_ASSERT_IS_SIGNED_T(lzo_int64l_t) + LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_int64l_t, 1) << 62) + 1) >> 62) == 1) + LZOCHK_ASSERT(((( LZO_INT64_C(1) << 62) + 1) >> 62) == 1) +#if (LZO_CC_BORLANDC && (__BORLANDC__ < 0x0530)) +#else + LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint64l_t) + LZOCHK_ASSERT(LZO_UINT64_C(18446744073709551615) > 0) +#endif + LZOCHK_ASSERT(((( LZO_STATIC_CAST(lzo_uint64l_t, 1) << 63) + 1) >> 63) == 1) + LZOCHK_ASSERT(((( LZO_UINT64_C(1) << 63) + 1) >> 63) == 1) +#if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020600ul)) + LZOCHK_ASSERT(LZO_INT64_C(9223372036854775807) > LZO_INT64_C(0)) +#else + LZOCHK_ASSERT(LZO_INT64_C(9223372036854775807) > 0) +#endif + LZOCHK_ASSERT(LZO_INT64_C(-9223372036854775807) - 1 < 0) + LZOCHK_ASSERT( LZO_INT64_C(9223372036854775807) % LZO_INT32_C(2147483629) == 721) + LZOCHK_ASSERT( LZO_INT64_C(9223372036854775807) % LZO_INT32_C(2147483647) == 1) + LZOCHK_ASSERT(LZO_UINT64_C(9223372036854775807) % LZO_UINT32_C(2147483629) == 721) + LZOCHK_ASSERT(LZO_UINT64_C(9223372036854775807) % LZO_UINT32_C(2147483647) == 1) +#endif +#if defined(lzo_int64f_t) +#if defined(lzo_int64e_t) + LZOCHK_ASSERT(sizeof(lzo_int64f_t) >= sizeof(lzo_int64e_t)) +#endif + LZOCHK_ASSERT(sizeof(lzo_int64f_t) >= sizeof(lzo_int64l_t)) + LZOCHK_ASSERT(sizeof(lzo_int64f_t) >= 8) + LZOCHK_ASSERT(sizeof(lzo_int64f_t) >= sizeof(lzo_int64l_t)) + LZOCHK_ASSERT(sizeof(lzo_int64f_t) == LZO_SIZEOF_LZO_INT64F_T) + LZOCHK_ASSERT(sizeof(lzo_uint64f_t) >= 8) + LZOCHK_ASSERT(sizeof(lzo_uint64f_t) >= sizeof(lzo_uint64l_t)) + LZOCHK_ASSERT(sizeof(lzo_int64f_t) == sizeof(lzo_uint64f_t)) + LZOCHK_ASSERT_IS_SIGNED_T(lzo_int64f_t) +#if (LZO_CC_BORLANDC && (__BORLANDC__ < 0x0530)) +#else + LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint64f_t) +#endif +#endif +#if !defined(__LZO_INTPTR_T_IS_POINTER) + LZOCHK_ASSERT_IS_SIGNED_T(lzo_intptr_t) + LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uintptr_t) +#endif + LZOCHK_ASSERT(sizeof(lzo_intptr_t) >= sizeof(void *)) + LZOCHK_ASSERT(sizeof(lzo_intptr_t) == LZO_SIZEOF_LZO_INTPTR_T) + LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(lzo_uintptr_t)) +#if defined(lzo_word_t) + LZOCHK_ASSERT(LZO_WORDSIZE == LZO_SIZEOF_LZO_WORD_T) + LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_word_t) + LZOCHK_ASSERT_IS_SIGNED_T(lzo_sword_t) + LZOCHK_ASSERT(sizeof(lzo_word_t) == LZO_SIZEOF_LZO_WORD_T) + LZOCHK_ASSERT(sizeof(lzo_word_t) == sizeof(lzo_sword_t)) +#endif + LZOCHK_ASSERT(sizeof(lzo_int8_t) == 1) + LZOCHK_ASSERT(sizeof(lzo_uint8_t) == 1) + LZOCHK_ASSERT(sizeof(lzo_int8_t) == sizeof(lzo_uint8_t)) + LZOCHK_ASSERT_IS_SIGNED_T(lzo_int8_t) + LZOCHK_ASSERT_IS_UNSIGNED_T(lzo_uint8_t) +#if defined(LZO_INT16_C) + LZOCHK_ASSERT(sizeof(LZO_INT16_C(0)) >= 2) + LZOCHK_ASSERT(sizeof(LZO_UINT16_C(0)) >= 2) + LZOCHK_ASSERT((LZO_UINT16_C(0xffff) >> 15) == 1) +#endif +#if defined(LZO_INT32_C) + LZOCHK_ASSERT(sizeof(LZO_INT32_C(0)) >= 4) + LZOCHK_ASSERT(sizeof(LZO_UINT32_C(0)) >= 4) + LZOCHK_ASSERT((LZO_UINT32_C(0xffffffff) >> 31) == 1) +#endif +#if defined(LZO_INT64_C) +#if (LZO_CC_BORLANDC && (__BORLANDC__ < 0x0560)) +#else + LZOCHK_ASSERT(sizeof(LZO_INT64_C(0)) >= 8) + LZOCHK_ASSERT(sizeof(LZO_UINT64_C(0)) >= 8) +#endif + LZOCHK_ASSERT((LZO_UINT64_C(0xffffffffffffffff) >> 63) == 1) + LZOCHK_ASSERT((LZO_UINT64_C(0xffffffffffffffff) & ~0) == LZO_UINT64_C(0xffffffffffffffff)) + LZOCHK_ASSERT((LZO_UINT64_C(0xffffffffffffffff) & ~0l) == LZO_UINT64_C(0xffffffffffffffff)) +#if (LZO_SIZEOF_INT == 4) +# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul)) +# else + LZOCHK_ASSERT((LZO_UINT64_C(0xffffffffffffffff) & (~0u+0u)) == 0xffffffffu) +# endif +#endif +#if (LZO_SIZEOF_LONG == 4) +# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul)) +# else + LZOCHK_ASSERT((LZO_UINT64_C(0xffffffffffffffff) & (~0ul+0ul)) == 0xfffffffful) +# endif +#endif +#endif +#if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM) + LZOCHK_ASSERT(sizeof(void*) == 2) + LZOCHK_ASSERT(sizeof(ptrdiff_t) == 2) +#elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE) + LZOCHK_ASSERT(sizeof(void*) == 4) +#endif +#if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_COMPACT) + LZOCHK_ASSERT(sizeof(void (*)(void)) == 2) +#elif (LZO_MM_MEDIUM || LZO_MM_LARGE || LZO_MM_HUGE) + LZOCHK_ASSERT(sizeof(void (*)(void)) == 4) +#endif +#if (LZO_ABI_ILP32) + LZOCHK_ASSERT(sizeof(int) == 4) + LZOCHK_ASSERT(sizeof(long) == 4) + LZOCHK_ASSERT(sizeof(void*) == 4) + LZOCHK_ASSERT(sizeof(ptrdiff_t) == sizeof(void*)) + LZOCHK_ASSERT(sizeof(size_t) == sizeof(void*)) + LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *)) +#endif +#if (LZO_ABI_ILP64) + LZOCHK_ASSERT(sizeof(int) == 8) + LZOCHK_ASSERT(sizeof(long) == 8) + LZOCHK_ASSERT(sizeof(void*) == 8) + LZOCHK_ASSERT(sizeof(ptrdiff_t) == sizeof(void*)) + LZOCHK_ASSERT(sizeof(size_t) == sizeof(void*)) + LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *)) +#endif +#if (LZO_ABI_IP32L64) + LZOCHK_ASSERT(sizeof(int) == 4) + LZOCHK_ASSERT(sizeof(long) == 8) + LZOCHK_ASSERT(sizeof(void*) == 4) + LZOCHK_ASSERT(sizeof(ptrdiff_t) == sizeof(void*)) + LZOCHK_ASSERT(sizeof(size_t) == sizeof(void*)) + LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *)) +#endif +#if (LZO_ABI_LLP64) + LZOCHK_ASSERT(sizeof(int) == 4) + LZOCHK_ASSERT(sizeof(long) == 4) + LZOCHK_ASSERT(sizeof(void*) == 8) + LZOCHK_ASSERT(sizeof(ptrdiff_t) == sizeof(void*)) + LZOCHK_ASSERT(sizeof(size_t) == sizeof(void*)) + LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *)) +#endif +#if (LZO_ABI_LP32) + LZOCHK_ASSERT(sizeof(int) == 2) + LZOCHK_ASSERT(sizeof(long) == 4) + LZOCHK_ASSERT(sizeof(void*) == 4) + LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *)) +#endif +#if (LZO_ABI_LP64) + LZOCHK_ASSERT(sizeof(int) == 4) + LZOCHK_ASSERT(sizeof(long) == 8) + LZOCHK_ASSERT(sizeof(void*) == 8) + LZOCHK_ASSERT(sizeof(ptrdiff_t) == sizeof(void*)) + LZOCHK_ASSERT(sizeof(size_t) == sizeof(void*)) + LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *)) +#endif +#if (LZO_ABI_IP32W64) + LZOCHK_ASSERT(sizeof(int) == 4) + LZOCHK_ASSERT(sizeof(void*) == 4) + LZOCHK_ASSERT(sizeof(ptrdiff_t) == sizeof(void*)) + LZOCHK_ASSERT(sizeof(size_t) == sizeof(void*)) + LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *)) + LZOCHK_ASSERT(LZO_WORDSIZE == 8) +#endif +#if (LZO_ARCH_I086) + LZOCHK_ASSERT(sizeof(size_t) == 2) + LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *)) +#elif (LZO_ARCH_I386 || LZO_ARCH_M68K) + LZOCHK_ASSERT(sizeof(size_t) == 4) + LZOCHK_ASSERT(sizeof(ptrdiff_t) == 4) + LZOCHK_ASSERT(sizeof(lzo_intptr_t) == sizeof(void *)) +#endif +#if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32) + LZOCHK_ASSERT(sizeof(size_t) == 4) + LZOCHK_ASSERT(sizeof(ptrdiff_t) == 4) + LZOCHK_ASSERT(sizeof(void (*)(void)) == 4) +#elif (LZO_OS_WIN64) + LZOCHK_ASSERT(sizeof(size_t) == 8) + LZOCHK_ASSERT(sizeof(ptrdiff_t) == 8) + LZOCHK_ASSERT(sizeof(void (*)(void)) == 8) +#endif +#if (LZO_CC_NDPC) +#elif (LZO_SIZEOF_INT > 1) + LZOCHK_ASSERT( LZO_STATIC_CAST(int, LZO_STATIC_CAST(unsigned char, LZO_STATIC_CAST(signed char, -1))) == 255) +#endif +#if defined(LZOCHK_CFG_PEDANTIC) +#if (LZO_CC_KEILC) +#elif (LZO_CC_NDPC) +#elif !(LZO_BROKEN_INTEGRAL_PROMOTION) && (LZO_SIZEOF_INT > 1) + LZOCHK_ASSERT( ((LZO_STATIC_CAST(unsigned char, 128)) << LZO_STATIC_CAST(int, (8*sizeof(int)-8))) < 0) +#endif +#endif +#if defined(LZOCHK_CFG_PEDANTIC) +#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0530) && (__BORLANDC__ < 0x0560)) +# pragma option pop +#endif +#endif +#endif +#if defined(LZO_WANT_ACCLIB_VGET) +# undef LZO_WANT_ACCLIB_VGET +#define __LZOLIB_VGET_CH_INCLUDED 1 +#if !defined(LZOLIB_PUBLIC) +# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) +#endif +#if !defined(LZOLIB_PUBLIC_NOINLINE) +# if !defined(__lzo_noinline) +# define LZOLIB_PUBLIC_NOINLINE(r,f) r __LZOLIB_FUNCNAME(f) +# elif (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x030400ul) || LZO_CC_LLVM) +# define LZOLIB_PUBLIC_NOINLINE(r,f) __lzo_noinline __attribute__((__used__)) r __LZOLIB_FUNCNAME(f) +# else +# define LZOLIB_PUBLIC_NOINLINE(r,f) __lzo_noinline r __LZOLIB_FUNCNAME(f) +# endif +#endif +extern void* volatile lzo_vget_ptr__; +#if (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x030400ul) || LZO_CC_LLVM) +void* volatile __attribute__((__used__)) lzo_vget_ptr__ = LZO_STATIC_CAST(void *, 0); +#else +void* volatile lzo_vget_ptr__ = LZO_STATIC_CAST(void *, 0); +#endif +#ifndef __LZOLIB_VGET_BODY +#define __LZOLIB_VGET_BODY(T) \ + if __lzo_unlikely(lzo_vget_ptr__) { \ + typedef T __lzo_may_alias TT; \ + unsigned char e; expr &= 255; e = LZO_STATIC_CAST(unsigned char, expr); \ + * LZO_STATIC_CAST(TT *, lzo_vget_ptr__) = v; \ + * LZO_STATIC_CAST(unsigned char *, lzo_vget_ptr__) = e; \ + v = * LZO_STATIC_CAST(TT *, lzo_vget_ptr__); \ + } \ + return v; +#endif +LZOLIB_PUBLIC_NOINLINE(short, lzo_vget_short) (short v, int expr) +{ + __LZOLIB_VGET_BODY(short) +} +LZOLIB_PUBLIC_NOINLINE(int, lzo_vget_int) (int v, int expr) +{ + __LZOLIB_VGET_BODY(int) +} +LZOLIB_PUBLIC_NOINLINE(long, lzo_vget_long) (long v, int expr) +{ + __LZOLIB_VGET_BODY(long) +} +#if defined(lzo_int64l_t) +LZOLIB_PUBLIC_NOINLINE(lzo_int64l_t, lzo_vget_lzo_int64l_t) (lzo_int64l_t v, int expr) +{ + __LZOLIB_VGET_BODY(lzo_int64l_t) +} +#endif +LZOLIB_PUBLIC_NOINLINE(lzo_hsize_t, lzo_vget_lzo_hsize_t) (lzo_hsize_t v, int expr) +{ + __LZOLIB_VGET_BODY(lzo_hsize_t) +} +#if !(LZO_CFG_NO_DOUBLE) +LZOLIB_PUBLIC_NOINLINE(double, lzo_vget_double) (double v, int expr) +{ + __LZOLIB_VGET_BODY(double) +} +#endif +LZOLIB_PUBLIC_NOINLINE(lzo_hvoid_p, lzo_vget_lzo_hvoid_p) (lzo_hvoid_p v, int expr) +{ + __LZOLIB_VGET_BODY(lzo_hvoid_p) +} +#if (LZO_ARCH_I086 && LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) && !defined(__cplusplus) +LZOLIB_PUBLIC_NOINLINE(lzo_hvoid_p, lzo_vget_lzo_hvoid_cp) (const lzo_hvoid_p vv, int expr) +{ + lzo_hvoid_p v = (lzo_hvoid_p) vv; + __LZOLIB_VGET_BODY(lzo_hvoid_p) +} +#else +LZOLIB_PUBLIC_NOINLINE(const lzo_hvoid_p, lzo_vget_lzo_hvoid_cp) (const lzo_hvoid_p v, int expr) +{ + __LZOLIB_VGET_BODY(const lzo_hvoid_p) +} +#endif +#endif +#if defined(LZO_WANT_ACCLIB_HMEMCPY) +# undef LZO_WANT_ACCLIB_HMEMCPY +#define __LZOLIB_HMEMCPY_CH_INCLUDED 1 +#if !defined(LZOLIB_PUBLIC) +# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) +#endif +LZOLIB_PUBLIC(int, lzo_hmemcmp) (const lzo_hvoid_p s1, const lzo_hvoid_p s2, lzo_hsize_t len) +{ +#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCMP) + const lzo_hbyte_p p1 = LZO_STATIC_CAST(const lzo_hbyte_p, s1); + const lzo_hbyte_p p2 = LZO_STATIC_CAST(const lzo_hbyte_p, s2); + if __lzo_likely(len > 0) do + { + int d = *p1 - *p2; + if (d != 0) + return d; + p1++; p2++; + } while __lzo_likely(--len > 0); + return 0; +#else + return memcmp(s1, s2, len); +#endif +} +LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemcpy) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len) +{ +#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMCPY) + lzo_hbyte_p p1 = LZO_STATIC_CAST(lzo_hbyte_p, dest); + const lzo_hbyte_p p2 = LZO_STATIC_CAST(const lzo_hbyte_p, src); + if (!(len > 0) || p1 == p2) + return dest; + do + *p1++ = *p2++; + while __lzo_likely(--len > 0); + return dest; +#else + return memcpy(dest, src, len); +#endif +} +LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemmove) (lzo_hvoid_p dest, const lzo_hvoid_p src, lzo_hsize_t len) +{ +#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMMOVE) + lzo_hbyte_p p1 = LZO_STATIC_CAST(lzo_hbyte_p, dest); + const lzo_hbyte_p p2 = LZO_STATIC_CAST(const lzo_hbyte_p, src); + if (!(len > 0) || p1 == p2) + return dest; + if (p1 < p2) + { + do + *p1++ = *p2++; + while __lzo_likely(--len > 0); + } + else + { + p1 += len; + p2 += len; + do + *--p1 = *--p2; + while __lzo_likely(--len > 0); + } + return dest; +#else + return memmove(dest, src, len); +#endif +} +LZOLIB_PUBLIC(lzo_hvoid_p, lzo_hmemset) (lzo_hvoid_p s, int cc, lzo_hsize_t len) +{ +#if (LZO_HAVE_MM_HUGE_PTR) || !(HAVE_MEMSET) + lzo_hbyte_p p = LZO_STATIC_CAST(lzo_hbyte_p, s); + unsigned char c = LZO_ITRUNC(unsigned char, cc); + if __lzo_likely(len > 0) do + *p++ = c; + while __lzo_likely(--len > 0); + return s; +#else + return memset(s, cc, len); +#endif +} +#endif +#if defined(LZO_WANT_ACCLIB_RAND) +# undef LZO_WANT_ACCLIB_RAND +#define __LZOLIB_RAND_CH_INCLUDED 1 +#if !defined(LZOLIB_PUBLIC) +# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) +#endif +LZOLIB_PUBLIC(void, lzo_srand31) (lzo_rand31_p r, lzo_uint32l_t seed) +{ + r->seed = seed & LZO_UINT32_C(0xffffffff); +} +LZOLIB_PUBLIC(lzo_uint32l_t, lzo_rand31) (lzo_rand31_p r) +{ + r->seed = r->seed * LZO_UINT32_C(1103515245) + 12345; + r->seed &= LZO_UINT32_C(0x7fffffff); + return r->seed; +} +#if defined(lzo_int64l_t) +LZOLIB_PUBLIC(void, lzo_srand48) (lzo_rand48_p r, lzo_uint32l_t seed) +{ + r->seed = seed & LZO_UINT32_C(0xffffffff); + r->seed <<= 16; r->seed |= 0x330e; +} +LZOLIB_PUBLIC(lzo_uint32l_t, lzo_rand48) (lzo_rand48_p r) +{ + lzo_uint64l_t a; + r->seed = r->seed * LZO_UINT64_C(25214903917) + 11; + r->seed &= LZO_UINT64_C(0xffffffffffff); + a = r->seed >> 17; + return LZO_STATIC_CAST(lzo_uint32l_t, a); +} +LZOLIB_PUBLIC(lzo_uint32l_t, lzo_rand48_r32) (lzo_rand48_p r) +{ + lzo_uint64l_t a; + r->seed = r->seed * LZO_UINT64_C(25214903917) + 11; + r->seed &= LZO_UINT64_C(0xffffffffffff); + a = r->seed >> 16; + return LZO_STATIC_CAST(lzo_uint32l_t, a); +} +#endif +#if defined(lzo_int64l_t) +LZOLIB_PUBLIC(void, lzo_srand64) (lzo_rand64_p r, lzo_uint64l_t seed) +{ + r->seed = seed & LZO_UINT64_C(0xffffffffffffffff); +} +LZOLIB_PUBLIC(lzo_uint32l_t, lzo_rand64) (lzo_rand64_p r) +{ + lzo_uint64l_t a; + r->seed = r->seed * LZO_UINT64_C(6364136223846793005) + 1; +#if (LZO_SIZEOF_LZO_INT64L_T > 8) + r->seed &= LZO_UINT64_C(0xffffffffffffffff); +#endif + a = r->seed >> 33; + return LZO_STATIC_CAST(lzo_uint32l_t, a); +} +LZOLIB_PUBLIC(lzo_uint32l_t, lzo_rand64_r32) (lzo_rand64_p r) +{ + lzo_uint64l_t a; + r->seed = r->seed * LZO_UINT64_C(6364136223846793005) + 1; +#if (LZO_SIZEOF_LZO_INT64L_T > 8) + r->seed &= LZO_UINT64_C(0xffffffffffffffff); +#endif + a = r->seed >> 32; + return LZO_STATIC_CAST(lzo_uint32l_t, a); +} +#endif +LZOLIB_PUBLIC(void, lzo_srandmt) (lzo_randmt_p r, lzo_uint32l_t seed) +{ + unsigned i = 0; + do { + r->s[i++] = (seed &= LZO_UINT32_C(0xffffffff)); + seed ^= seed >> 30; + seed = seed * LZO_UINT32_C(0x6c078965) + i; + } while (i != 624); + r->n = i; +} +LZOLIB_PUBLIC(lzo_uint32l_t, lzo_randmt) (lzo_randmt_p r) +{ + return (__LZOLIB_FUNCNAME(lzo_randmt_r32)(r)) >> 1; +} +LZOLIB_PUBLIC(lzo_uint32l_t, lzo_randmt_r32) (lzo_randmt_p r) +{ + lzo_uint32l_t v; + if __lzo_unlikely(r->n == 624) { + unsigned i = 0, j; + r->n = 0; + do { + j = i - 623; if (LZO_STATIC_CAST(int, j) < 0) j += 624; + v = (r->s[i] & LZO_UINT32_C(0x80000000)) ^ (r->s[j] & LZO_UINT32_C(0x7fffffff)); + j = i - 227; if (LZO_STATIC_CAST(int, j) < 0) j += 624; + r->s[i] = r->s[j] ^ (v >> 1); + if (v & 1) r->s[i] ^= LZO_UINT32_C(0x9908b0df); + } while (++i != 624); + } + { unsigned i = r->n++; v = r->s[i]; } + v ^= v >> 11; v ^= (v & LZO_UINT32_C(0x013a58ad)) << 7; + v ^= (v & LZO_UINT32_C(0x0001df8c)) << 15; v ^= v >> 18; + return v; +} +#if defined(lzo_int64l_t) +LZOLIB_PUBLIC(void, lzo_srandmt64) (lzo_randmt64_p r, lzo_uint64l_t seed) +{ + unsigned i = 0; + do { + r->s[i++] = (seed &= LZO_UINT64_C(0xffffffffffffffff)); + seed ^= seed >> 62; + seed = seed * LZO_UINT64_C(0x5851f42d4c957f2d) + i; + } while (i != 312); + r->n = i; +} +#if 0 +LZOLIB_PUBLIC(lzo_uint32l_t, lzo_randmt64) (lzo_randmt64_p r) +{ + lzo_uint64l_t v; + v = (__LZOLIB_FUNCNAME(lzo_randmt64_r64)(r)) >> 33; + return LZO_STATIC_CAST(lzo_uint32l_t, v); +} +#endif +LZOLIB_PUBLIC(lzo_uint64l_t, lzo_randmt64_r64) (lzo_randmt64_p r) +{ + lzo_uint64l_t v; + if __lzo_unlikely(r->n == 312) { + unsigned i = 0, j; + r->n = 0; + do { + j = i - 311; if (LZO_STATIC_CAST(int, j) < 0) j += 312; + v = (r->s[i] & LZO_UINT64_C(0xffffffff80000000)) ^ (r->s[j] & LZO_UINT64_C(0x7fffffff)); + j = i - 156; if (LZO_STATIC_CAST(int, j) < 0) j += 312; + r->s[i] = r->s[j] ^ (v >> 1); + if (v & 1) r->s[i] ^= LZO_UINT64_C(0xb5026f5aa96619e9); + } while (++i != 312); + } + { unsigned i = r->n++; v = r->s[i]; } + v ^= (v & LZO_UINT64_C(0xaaaaaaaaa0000000)) >> 29; + v ^= (v & LZO_UINT64_C(0x38eb3ffff6d3)) << 17; + v ^= (v & LZO_UINT64_C(0x7ffbf77)) << 37; + return v ^ (v >> 43); +} +#endif +#endif +#if defined(LZO_WANT_ACCLIB_RDTSC) +# undef LZO_WANT_ACCLIB_RDTSC +#define __LZOLIB_RDTSC_CH_INCLUDED 1 +#if !defined(LZOLIB_PUBLIC) +# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) +#endif +#if defined(lzo_int32e_t) +#if (LZO_OS_WIN32 && LZO_CC_PELLESC && (__POCC__ >= 290)) +# pragma warn(push) +# pragma warn(disable:2007) +#endif +#if (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC) +#if (LZO_ARCH_AMD64 && LZO_CC_INTELC) +# define __LZOLIB_RDTSC_REGS : : "c" (t) : "memory", "rax", "rdx" +#elif (LZO_ARCH_AMD64) +# define __LZOLIB_RDTSC_REGS : : "c" (t) : "cc", "memory", "rax", "rdx" +#elif (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul)) +# define __LZOLIB_RDTSC_REGS : : "c" (t) : "ax", "dx" +#elif (LZO_ARCH_I386 && LZO_CC_INTELC) +# define __LZOLIB_RDTSC_REGS : : "c" (t) : "memory", "eax", "edx" +#else +# define __LZOLIB_RDTSC_REGS : : "c" (t) : "cc", "memory", "eax", "edx" +#endif +#endif +LZOLIB_PUBLIC(int, lzo_tsc_read) (lzo_uint32e_t* t) +{ +#if (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC) + __asm__ __volatile__( + "clc \n" ".byte 0x0f,0x31\n" + "movl %%eax,(%0)\n" "movl %%edx,4(%0)\n" + __LZOLIB_RDTSC_REGS + ); + return 0; +#elif (LZO_ARCH_I386) && (LZO_ASM_SYNTAX_MSC) + LZO_UNUSED(t); + __asm { + mov ecx, t + clc +# if (LZO_CC_MSC && (_MSC_VER < 1200)) + _emit 0x0f + _emit 0x31 +# else + rdtsc +# endif + mov [ecx], eax + mov [ecx+4], edx + } + return 0; +#else + t[0] = t[1] = 0; return -1; +#endif +} +#if (LZO_OS_WIN32 && LZO_CC_PELLESC && (__POCC__ >= 290)) +# pragma warn(pop) +#endif +#endif +#endif +#if defined(LZO_WANT_ACCLIB_DOSALLOC) +# undef LZO_WANT_ACCLIB_DOSALLOC +#define __LZOLIB_DOSALLOC_CH_INCLUDED 1 +#if !defined(LZOLIB_PUBLIC) +# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) +#endif +#if (LZO_OS_OS216) +LZO_EXTERN_C unsigned short __far __pascal DosAllocHuge(unsigned short, unsigned short, unsigned short __far *, unsigned short, unsigned short); +LZO_EXTERN_C unsigned short __far __pascal DosFreeSeg(unsigned short); +#endif +#if (LZO_OS_DOS16 || LZO_OS_WIN16) +#if !(LZO_CC_AZTECC) +LZOLIB_PUBLIC(void __far*, lzo_dos_alloc) (unsigned long size) +{ + void __far* p = 0; + union REGS ri, ro; + if ((long)size <= 0) + return p; + size = (size + 15) >> 4; + if (size > 0xffffu) + return p; + ri.x.ax = 0x4800; + ri.x.bx = (unsigned short) size; + int86(0x21, &ri, &ro); + if ((ro.x.cflag & 1) == 0) + p = (void __far*) LZO_PTR_MK_FP(ro.x.ax, 0); + return p; +} +LZOLIB_PUBLIC(int, lzo_dos_free) (void __far* p) +{ + union REGS ri, ro; + struct SREGS rs; + if (!p) + return 0; + if (LZO_PTR_FP_OFF(p) != 0) + return -1; + segread(&rs); + ri.x.ax = 0x4900; + rs.es = LZO_PTR_FP_SEG(p); + int86x(0x21, &ri, &ro, &rs); + if (ro.x.cflag & 1) + return -1; + return 0; +} +#endif +#endif +#if (LZO_OS_OS216) +LZOLIB_PUBLIC(void __far*, lzo_dos_alloc) (unsigned long size) +{ + void __far* p = 0; + unsigned short sel = 0; + if ((long)size <= 0) + return p; + if (DosAllocHuge((unsigned short)(size >> 16), (unsigned short)size, &sel, 0, 0) == 0) + p = (void __far*) LZO_PTR_MK_FP(sel, 0); + return p; +} +LZOLIB_PUBLIC(int, lzo_dos_free) (void __far* p) +{ + if (!p) + return 0; + if (LZO_PTR_FP_OFF(p) != 0) + return -1; + if (DosFreeSeg(LZO_PTR_FP_SEG(p)) != 0) + return -1; + return 0; +} +#endif +#endif +#if defined(LZO_WANT_ACCLIB_GETOPT) +# undef LZO_WANT_ACCLIB_GETOPT +#define __LZOLIB_GETOPT_CH_INCLUDED 1 +#if !defined(LZOLIB_PUBLIC) +# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) +#endif +LZOLIB_PUBLIC(void, lzo_getopt_init) (lzo_getopt_p g, + int start_argc, int argc, char** argv) +{ + memset(g, 0, sizeof(*g)); + g->optind = start_argc; + g->argc = argc; g->argv = argv; + g->optopt = -1; +} +static int __LZOLIB_FUNCNAME(lzo_getopt_rotate) (char** p, int first, int middle, int last) +{ + int i = middle, n = middle - first; + if (first >= middle || middle >= last) return 0; + for (;;) + { + char* t = p[first]; p[first] = p[i]; p[i] = t; + if (++first == middle) + { + if (++i == last) break; + middle = i; + } + else if (++i == last) + i = middle; + } + return n; +} +static int __LZOLIB_FUNCNAME(lzo_getopt_perror) (lzo_getopt_p g, int ret, const char* f, ...) +{ + if (g->opterr) + { +#if (HAVE_STDARG_H) + struct { va_list ap; } s; + va_start(s.ap, f); + g->opterr(g, f, &s); + va_end(s.ap); +#else + g->opterr(g, f, NULL); +#endif + } + ++g->errcount; + return ret; +} +LZOLIB_PUBLIC(int, lzo_getopt) (lzo_getopt_p g, + const char* shortopts, + const lzo_getopt_longopt_p longopts, + int* longind) +{ +#define pe __LZOLIB_FUNCNAME(lzo_getopt_perror) + int ordering = LZO_GETOPT_PERMUTE; + int missing_arg_ret = g->bad_option; + char* a; + if (shortopts) + { + if (*shortopts == '-' || *shortopts == '+') + ordering = *shortopts++ == '-' ? LZO_GETOPT_RETURN_IN_ORDER : LZO_GETOPT_REQUIRE_ORDER; + if (*shortopts == ':') + missing_arg_ret = *shortopts++; + } + g->optarg = NULL; + if (g->optopt == -1) + g->optopt = g->bad_option; + if (longind) + *longind = -1; + if (g->eof) + return -1; + if (g->shortpos) + goto lzo_label_next_shortopt; + g->optind -= __LZOLIB_FUNCNAME(lzo_getopt_rotate)(g->argv, g->pending_rotate_first, g->pending_rotate_middle, g->optind); + g->pending_rotate_first = g->pending_rotate_middle = g->optind; + if (ordering == LZO_GETOPT_PERMUTE) + { + while (g->optind < g->argc && !(g->argv[g->optind][0] == '-' && g->argv[g->optind][1])) + ++g->optind; + g->pending_rotate_middle = g->optind; + } + if (g->optind >= g->argc) + { + g->optind = g->pending_rotate_first; + goto lzo_label_eof; + } + a = g->argv[g->optind]; + if (a[0] == '-' && a[1] == '-') + { + size_t l = 0; + const lzo_getopt_longopt_p o; + const lzo_getopt_longopt_p o1 = NULL; + const lzo_getopt_longopt_p o2 = NULL; + int need_exact = 0; + ++g->optind; + if (!a[2]) + goto lzo_label_eof; + for (a += 2; a[l] && a[l] != '=' && a[l] != '#'; ) + ++l; + for (o = longopts; l && o && o->name; ++o) + { + if (strncmp(a, o->name, l) != 0) + continue; + if (!o->name[l]) + goto lzo_label_found_o; + need_exact |= o->has_arg & LZO_GETOPT_EXACT_ARG; + if (o1) o2 = o; + else o1 = o; + } + if (!o1 || need_exact) + return pe(g, g->bad_option, "unrecognized option '--%s'", a); + if (o2) + return pe(g, g->bad_option, "option '--%s' is ambiguous (could be '--%s' or '--%s')", a, o1->name, o2->name); + o = o1; + lzo_label_found_o: + a += l; + switch (o->has_arg & 0x2f) + { + case LZO_GETOPT_OPTIONAL_ARG: + if (a[0]) + g->optarg = a + 1; + break; + case LZO_GETOPT_REQUIRED_ARG: + if (a[0]) + g->optarg = a + 1; + else if (g->optind < g->argc) + g->optarg = g->argv[g->optind++]; + if (!g->optarg) + return pe(g, missing_arg_ret, "option '--%s' requires an argument", o->name); + break; + case LZO_GETOPT_REQUIRED_ARG | 0x20: + if (a[0] && a[1]) + g->optarg = a + 1; + if (!g->optarg) + return pe(g, missing_arg_ret, "option '--%s=' requires an argument", o->name); + break; + default: + if (a[0]) + return pe(g, g->bad_option, "option '--%s' doesn't allow an argument", o->name); + break; + } + if (longind) + *longind = (int) (o - longopts); + if (o->flag) + { + *o->flag = o->val; + return 0; + } + return o->val; + } + if (a[0] == '-' && a[1]) + { + unsigned char c; + const char* s; + lzo_label_next_shortopt: + a = g->argv[g->optind] + ++g->shortpos; + c = (unsigned char) *a++; s = NULL; + if (c != ':' && shortopts) + s = strchr(shortopts, c); + if (!s || s[1] != ':') + { + if (!a[0]) + { ++g->optind; g->shortpos = 0; } + if (!s) + { + g->optopt = c; + return pe(g, g->bad_option, "invalid option '-%c'", c); + } + } + else + { + ++g->optind; g->shortpos = 0; + if (a[0]) + g->optarg = a; + else if (s[2] != ':') + { + if (g->optind < g->argc) + g->optarg = g->argv[g->optind++]; + else + { + g->optopt = c; + return pe(g, missing_arg_ret, "option '-%c' requires an argument", c); + } + } + } + return c; + } + if (ordering == LZO_GETOPT_RETURN_IN_ORDER) + { + ++g->optind; + g->optarg = a; + return 1; + } +lzo_label_eof: + g->optind -= __LZOLIB_FUNCNAME(lzo_getopt_rotate)(g->argv, g->pending_rotate_first, g->pending_rotate_middle, g->optind); + g->pending_rotate_first = g->pending_rotate_middle = g->optind; + g->eof = 1; + return -1; +#undef pe +} +#endif +#if defined(LZO_WANT_ACCLIB_HALLOC) +# undef LZO_WANT_ACCLIB_HALLOC +#define __LZOLIB_HALLOC_CH_INCLUDED 1 +#if !defined(LZOLIB_PUBLIC) +# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) +#endif +#if (LZO_HAVE_MM_HUGE_PTR) +#if 1 && (LZO_OS_DOS16 && defined(BLX286)) +# define __LZOLIB_HALLOC_USE_DAH 1 +#elif 1 && (LZO_OS_DOS16 && defined(DOSX286)) +# define __LZOLIB_HALLOC_USE_DAH 1 +#elif 1 && (LZO_OS_OS216) +# define __LZOLIB_HALLOC_USE_DAH 1 +#elif 1 && (LZO_OS_WIN16) +# define __LZOLIB_HALLOC_USE_GA 1 +#elif 1 && (LZO_OS_DOS16) && (LZO_CC_BORLANDC) && defined(__DPMI16__) +# define __LZOLIB_HALLOC_USE_GA 1 +#endif +#endif +#if (__LZOLIB_HALLOC_USE_DAH) +#if 0 && (LZO_OS_OS216) +#include <os2.h> +#else +LZO_EXTERN_C unsigned short __far __pascal DosAllocHuge(unsigned short, unsigned short, unsigned short __far *, unsigned short, unsigned short); +LZO_EXTERN_C unsigned short __far __pascal DosFreeSeg(unsigned short); +#endif +#endif +#if (__LZOLIB_HALLOC_USE_GA) +#if 0 +#define STRICT 1 +#include <windows.h> +#else +LZO_EXTERN_C const void __near* __far __pascal GlobalAlloc(unsigned, unsigned long); +LZO_EXTERN_C const void __near* __far __pascal GlobalFree(const void __near*); +LZO_EXTERN_C unsigned long __far __pascal GlobalHandle(unsigned); +LZO_EXTERN_C void __far* __far __pascal GlobalLock(const void __near*); +LZO_EXTERN_C int __far __pascal GlobalUnlock(const void __near*); +#endif +#endif +LZOLIB_PUBLIC(lzo_hvoid_p, lzo_halloc) (lzo_hsize_t size) +{ + lzo_hvoid_p p = LZO_STATIC_CAST(lzo_hvoid_p, 0); + if (!(size > 0)) + return p; +#if 0 && defined(__palmos__) + p = MemPtrNew(size); +#elif !(LZO_HAVE_MM_HUGE_PTR) + if (size < LZO_STATIC_CAST(size_t, -1)) + p = malloc(LZO_STATIC_CAST(size_t, size)); +#else + if (LZO_STATIC_CAST(long, size) <= 0) + return p; +{ +#if (__LZOLIB_HALLOC_USE_DAH) + unsigned short sel = 0; + if (DosAllocHuge((unsigned short)(size >> 16), (unsigned short)size, &sel, 0, 0) == 0) + p = (lzo_hvoid_p) LZO_PTR_MK_FP(sel, 0); +#elif (__LZOLIB_HALLOC_USE_GA) + const void __near* h = GlobalAlloc(2, size); + if (h) { + p = GlobalLock(h); + if (p && LZO_PTR_FP_OFF(p) != 0) { + GlobalUnlock(h); + p = 0; + } + if (!p) + GlobalFree(h); + } +#elif (LZO_CC_MSC && (_MSC_VER >= 700)) + p = _halloc(size, 1); +#elif (LZO_CC_MSC || LZO_CC_WATCOMC) + p = halloc(size, 1); +#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) + p = farmalloc(size); +#elif (LZO_CC_BORLANDC || LZO_CC_TURBOC) + p = farmalloc(size); +#elif (LZO_CC_AZTECC) + p = lmalloc(size); +#else + if (size < LZO_STATIC_CAST(size_t, -1)) + p = malloc(LZO_STATIC_CAST(size_t, size)); +#endif +} +#endif + return p; +} +LZOLIB_PUBLIC(void, lzo_hfree) (lzo_hvoid_p p) +{ + if (!p) + return; +#if 0 && defined(__palmos__) + MemPtrFree(p); +#elif !(LZO_HAVE_MM_HUGE_PTR) + free(p); +#else +#if (__LZOLIB_HALLOC_USE_DAH) + if (LZO_PTR_FP_OFF(p) == 0) + DosFreeSeg((unsigned short) LZO_PTR_FP_SEG(p)); +#elif (__LZOLIB_HALLOC_USE_GA) + if (LZO_PTR_FP_OFF(p) == 0) { + const void __near* h = (const void __near*) (unsigned) GlobalHandle(LZO_PTR_FP_SEG(p)); + if (h) { + GlobalUnlock(h); + GlobalFree(h); + } + } +#elif (LZO_CC_MSC && (_MSC_VER >= 700)) + _hfree(p); +#elif (LZO_CC_MSC || LZO_CC_WATCOMC) + hfree(p); +#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) + farfree((void __far*) p); +#elif (LZO_CC_BORLANDC || LZO_CC_TURBOC) + farfree((void __far*) p); +#elif (LZO_CC_AZTECC) + lfree(p); +#else + free(p); +#endif +#endif +} +#endif +#if defined(LZO_WANT_ACCLIB_HFREAD) +# undef LZO_WANT_ACCLIB_HFREAD +#define __LZOLIB_HFREAD_CH_INCLUDED 1 +#if !defined(LZOLIB_PUBLIC) +# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) +#endif +LZOLIB_PUBLIC(lzo_hsize_t, lzo_hfread) (void* vfp, lzo_hvoid_p buf, lzo_hsize_t size) +{ + FILE* fp = LZO_STATIC_CAST(FILE *, vfp); +#if (LZO_HAVE_MM_HUGE_PTR) +#if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM) +#define __LZOLIB_REQUIRE_HMEMCPY_CH 1 + unsigned char tmp[512]; + lzo_hsize_t l = 0; + while (l < size) + { + size_t n = size - l > sizeof(tmp) ? sizeof(tmp) : (size_t) (size - l); + n = fread(tmp, 1, n, fp); + if (n == 0) + break; + __LZOLIB_FUNCNAME(lzo_hmemcpy)((lzo_hbyte_p)buf + l, tmp, (lzo_hsize_t)n); + l += n; + } + return l; +#elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE) + lzo_hbyte_p b = (lzo_hbyte_p) buf; + lzo_hsize_t l = 0; + while (l < size) + { + size_t n; + n = LZO_PTR_FP_OFF(b); n = (n <= 1) ? 0x8000u : (0u - n); + if ((lzo_hsize_t) n > size - l) + n = (size_t) (size - l); + n = fread((void __far*)b, 1, n, fp); + if (n == 0) + break; + b += n; l += n; + } + return l; +#else +# error "unknown memory model" +#endif +#else + return fread(buf, 1, size, fp); +#endif +} +LZOLIB_PUBLIC(lzo_hsize_t, lzo_hfwrite) (void* vfp, const lzo_hvoid_p buf, lzo_hsize_t size) +{ + FILE* fp = LZO_STATIC_CAST(FILE *, vfp); +#if (LZO_HAVE_MM_HUGE_PTR) +#if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM) +#define __LZOLIB_REQUIRE_HMEMCPY_CH 1 + unsigned char tmp[512]; + lzo_hsize_t l = 0; + while (l < size) + { + size_t n = size - l > sizeof(tmp) ? sizeof(tmp) : (size_t) (size - l); + __LZOLIB_FUNCNAME(lzo_hmemcpy)(tmp, (const lzo_hbyte_p)buf + l, (lzo_hsize_t)n); + n = fwrite(tmp, 1, n, fp); + if (n == 0) + break; + l += n; + } + return l; +#elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE) + const lzo_hbyte_p b = (const lzo_hbyte_p) buf; + lzo_hsize_t l = 0; + while (l < size) + { + size_t n; + n = LZO_PTR_FP_OFF(b); n = (n <= 1) ? 0x8000u : (0u - n); + if ((lzo_hsize_t) n > size - l) + n = (size_t) (size - l); + n = fwrite((void __far*)b, 1, n, fp); + if (n == 0) + break; + b += n; l += n; + } + return l; +#else +# error "unknown memory model" +#endif +#else + return fwrite(buf, 1, size, fp); +#endif +} +#endif +#if defined(LZO_WANT_ACCLIB_HSREAD) +# undef LZO_WANT_ACCLIB_HSREAD +#define __LZOLIB_HSREAD_CH_INCLUDED 1 +#if !defined(LZOLIB_PUBLIC) +# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) +#endif +LZOLIB_PUBLIC(long, lzo_safe_hread) (int fd, lzo_hvoid_p buf, long size) +{ + lzo_hbyte_p b = (lzo_hbyte_p) buf; + long l = 0; + int saved_errno; + saved_errno = errno; + while (l < size) + { + long n = size - l; +#if (LZO_HAVE_MM_HUGE_PTR) +# define __LZOLIB_REQUIRE_HREAD_CH 1 + errno = 0; n = lzo_hread(fd, b, n); +#elif (LZO_OS_DOS32) && defined(__DJGPP__) + errno = 0; n = _read(fd, b, n); +#else + errno = 0; n = read(fd, b, n); +#endif + if (n == 0) + break; + if (n < 0) { +#if defined(EAGAIN) + if (errno == (EAGAIN)) continue; +#endif +#if defined(EINTR) + if (errno == (EINTR)) continue; +#endif + if (errno == 0) errno = 1; + return l; + } + b += n; l += n; + } + errno = saved_errno; + return l; +} +LZOLIB_PUBLIC(long, lzo_safe_hwrite) (int fd, const lzo_hvoid_p buf, long size) +{ + const lzo_hbyte_p b = (const lzo_hbyte_p) buf; + long l = 0; + int saved_errno; + saved_errno = errno; + while (l < size) + { + long n = size - l; +#if (LZO_HAVE_MM_HUGE_PTR) +# define __LZOLIB_REQUIRE_HREAD_CH 1 + errno = 0; n = lzo_hwrite(fd, b, n); +#elif (LZO_OS_DOS32) && defined(__DJGPP__) + errno = 0; n = _write(fd, b, n); +#else + errno = 0; n = write(fd, b, n); +#endif + if (n == 0) + break; + if (n < 0) { +#if defined(EAGAIN) + if (errno == (EAGAIN)) continue; +#endif +#if defined(EINTR) + if (errno == (EINTR)) continue; +#endif + if (errno == 0) errno = 1; + return l; + } + b += n; l += n; + } + errno = saved_errno; + return l; +} +#endif +#if defined(LZO_WANT_ACCLIB_PCLOCK) +# undef LZO_WANT_ACCLIB_PCLOCK +#define __LZOLIB_PCLOCK_CH_INCLUDED 1 +#if !defined(LZOLIB_PUBLIC) +# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) +#endif +#if 1 && (LZO_OS_POSIX_LINUX && LZO_ARCH_AMD64 && LZO_ASM_SYNTAX_GNUC && !LZO_CFG_NO_SYSCALL) +#ifndef lzo_pclock_syscall_clock_gettime +#define lzo_pclock_syscall_clock_gettime lzo_pclock_syscall_clock_gettime +#endif +__lzo_static_noinline long lzo_pclock_syscall_clock_gettime(long clockid, struct timespec *ts) +{ + unsigned long r = 228; + __asm__ __volatile__("syscall\n" : "=a" (r), "=m" (*ts) : "0" (r), "D" (clockid), "S" (ts) __LZO_ASM_CLOBBER_LIST_CC); + return LZO_ICAST(long, r); +} +#endif +#if 1 && (LZO_OS_POSIX_LINUX && LZO_ARCH_I386 && LZO_ASM_SYNTAX_GNUC && !LZO_CFG_NO_SYSCALL) && defined(lzo_int64l_t) +#ifndef lzo_pclock_syscall_clock_gettime +#define lzo_pclock_syscall_clock_gettime lzo_pclock_syscall_clock_gettime +#endif +__lzo_static_noinline long lzo_pclock_syscall_clock_gettime(long clockid, struct timespec *ts) +{ + unsigned long r = 265; + __asm__ __volatile__("pushl %%ebx\n pushl %%edx\n popl %%ebx\n int $0x80\n popl %%ebx\n": "=a" (r), "=m" (*ts) : "0" (r), "d" (clockid), "c" (ts) __LZO_ASM_CLOBBER_LIST_CC); + return LZO_ICAST(long, r); +} +#endif +#if 0 && defined(lzo_pclock_syscall_clock_gettime) +#ifndef lzo_pclock_read_clock_gettime_r_syscall +#define lzo_pclock_read_clock_gettime_r_syscall lzo_pclock_read_clock_gettime_r_syscall +#endif +static int lzo_pclock_read_clock_gettime_r_syscall(lzo_pclock_handle_p h, lzo_pclock_p c) +{ + struct timespec ts; + if (lzo_pclock_syscall_clock_gettime(0, &ts) != 0) + return -1; + c->tv_sec = ts.tv_sec; + c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, ts.tv_nsec); + LZO_UNUSED(h); return 0; +} +#endif +#if (HAVE_GETTIMEOFDAY) +#ifndef lzo_pclock_read_gettimeofday +#define lzo_pclock_read_gettimeofday lzo_pclock_read_gettimeofday +#endif +static int lzo_pclock_read_gettimeofday(lzo_pclock_handle_p h, lzo_pclock_p c) +{ + struct timeval tv; + if (gettimeofday(&tv, NULL) != 0) + return -1; +#if defined(lzo_int64l_t) + c->tv_sec = tv.tv_sec; +#else + c->tv_sec_high = 0; + c->tv_sec_low = tv.tv_sec; +#endif + c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, (tv.tv_usec * 1000u)); + LZO_UNUSED(h); return 0; +} +#endif +#if defined(CLOCKS_PER_SEC) && !(LZO_CFG_NO_DOUBLE) +#ifndef lzo_pclock_read_clock +#define lzo_pclock_read_clock lzo_pclock_read_clock +#endif +static int lzo_pclock_read_clock(lzo_pclock_handle_p h, lzo_pclock_p c) +{ + clock_t ticks; + double secs; +#if defined(lzo_int64l_t) + lzo_uint64l_t nsecs; + ticks = clock(); + secs = LZO_STATIC_CAST(double, ticks) / (CLOCKS_PER_SEC); + nsecs = LZO_STATIC_CAST(lzo_uint64l_t, (secs * 1000000000.0)); + c->tv_sec = LZO_STATIC_CAST(lzo_int64l_t, (nsecs / 1000000000ul)); + nsecs = (nsecs % 1000000000ul); + c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, nsecs); +#else + ticks = clock(); + secs = LZO_STATIC_CAST(double, ticks) / (CLOCKS_PER_SEC); + c->tv_sec_high = 0; + c->tv_sec_low = LZO_STATIC_CAST(lzo_uint32l_t, (secs + 0.5)); + c->tv_nsec = 0; +#endif + LZO_UNUSED(h); return 0; +} +#endif +#if 1 && defined(lzo_pclock_syscall_clock_gettime) +#ifndef lzo_pclock_read_clock_gettime_m_syscall +#define lzo_pclock_read_clock_gettime_m_syscall lzo_pclock_read_clock_gettime_m_syscall +#endif +static int lzo_pclock_read_clock_gettime_m_syscall(lzo_pclock_handle_p h, lzo_pclock_p c) +{ + struct timespec ts; + if (lzo_pclock_syscall_clock_gettime(1, &ts) != 0) + return -1; + c->tv_sec = ts.tv_sec; + c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, ts.tv_nsec); + LZO_UNUSED(h); return 0; +} +#endif +#if (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__) && defined(UCLOCKS_PER_SEC) && !(LZO_CFG_NO_DOUBLE) +#ifndef lzo_pclock_read_uclock +#define lzo_pclock_read_uclock lzo_pclock_read_uclock +#endif +static int lzo_pclock_read_uclock(lzo_pclock_handle_p h, lzo_pclock_p c) +{ + lzo_uint64l_t ticks; + double secs; + lzo_uint64l_t nsecs; + ticks = uclock(); + secs = LZO_STATIC_CAST(double, ticks) / (UCLOCKS_PER_SEC); + nsecs = LZO_STATIC_CAST(lzo_uint64l_t, (secs * 1000000000.0)); + c->tv_sec = nsecs / 1000000000ul; + c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, (nsecs % 1000000000ul)); + LZO_UNUSED(h); return 0; +} +#endif +#if 1 && (HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID) && defined(lzo_int64l_t) +#ifndef lzo_pclock_read_clock_gettime_p_libc +#define lzo_pclock_read_clock_gettime_p_libc lzo_pclock_read_clock_gettime_p_libc +#endif +static int lzo_pclock_read_clock_gettime_p_libc(lzo_pclock_handle_p h, lzo_pclock_p c) +{ + struct timespec ts; + if (clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts) != 0) + return -1; + c->tv_sec = ts.tv_sec; + c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, ts.tv_nsec); + LZO_UNUSED(h); return 0; +} +#endif +#if 1 && defined(lzo_pclock_syscall_clock_gettime) +#ifndef lzo_pclock_read_clock_gettime_p_syscall +#define lzo_pclock_read_clock_gettime_p_syscall lzo_pclock_read_clock_gettime_p_syscall +#endif +static int lzo_pclock_read_clock_gettime_p_syscall(lzo_pclock_handle_p h, lzo_pclock_p c) +{ + struct timespec ts; + if (lzo_pclock_syscall_clock_gettime(2, &ts) != 0) + return -1; + c->tv_sec = ts.tv_sec; + c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, ts.tv_nsec); + LZO_UNUSED(h); return 0; +} +#endif +#if (LZO_OS_CYGWIN || LZO_OS_WIN32 || LZO_OS_WIN64) && (LZO_HAVE_WINDOWS_H) && defined(lzo_int64l_t) +#ifndef lzo_pclock_read_getprocesstimes +#define lzo_pclock_read_getprocesstimes lzo_pclock_read_getprocesstimes +#endif +static int lzo_pclock_read_getprocesstimes(lzo_pclock_handle_p h, lzo_pclock_p c) +{ + FILETIME ct, et, kt, ut; + lzo_uint64l_t ticks; + if (GetProcessTimes(GetCurrentProcess(), &ct, &et, &kt, &ut) == 0) + return -1; + ticks = (LZO_STATIC_CAST(lzo_uint64l_t, ut.dwHighDateTime) << 32) | ut.dwLowDateTime; + if __lzo_unlikely(h->ticks_base == 0) + h->ticks_base = ticks; + else + ticks -= h->ticks_base; + c->tv_sec = LZO_STATIC_CAST(lzo_int64l_t, (ticks / 10000000ul)); + ticks = (ticks % 10000000ul) * 100u; + c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, ticks); + LZO_UNUSED(h); return 0; +} +#endif +#if (HAVE_GETRUSAGE) && defined(RUSAGE_SELF) +#ifndef lzo_pclock_read_getrusage +#define lzo_pclock_read_getrusage lzo_pclock_read_getrusage +#endif +static int lzo_pclock_read_getrusage(lzo_pclock_handle_p h, lzo_pclock_p c) +{ + struct rusage ru; + if (getrusage(RUSAGE_SELF, &ru) != 0) + return -1; +#if defined(lzo_int64l_t) + c->tv_sec = ru.ru_utime.tv_sec; +#else + c->tv_sec_high = 0; + c->tv_sec_low = ru.ru_utime.tv_sec; +#endif + c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, (ru.ru_utime.tv_usec * 1000u)); + LZO_UNUSED(h); return 0; +} +#endif +#if 1 && (HAVE_CLOCK_GETTIME) && defined(CLOCK_THREAD_CPUTIME_ID) && defined(lzo_int64l_t) +#ifndef lzo_pclock_read_clock_gettime_t_libc +#define lzo_pclock_read_clock_gettime_t_libc lzo_pclock_read_clock_gettime_t_libc +#endif +static int lzo_pclock_read_clock_gettime_t_libc(lzo_pclock_handle_p h, lzo_pclock_p c) +{ + struct timespec ts; + if (clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts) != 0) + return -1; + c->tv_sec = ts.tv_sec; + c->tv_nsec = (lzo_uint32l_t) ts.tv_nsec; + LZO_UNUSED(h); return 0; +} +#endif +#if 1 && defined(lzo_pclock_syscall_clock_gettime) +#ifndef lzo_pclock_read_clock_gettime_t_syscall +#define lzo_pclock_read_clock_gettime_t_syscall lzo_pclock_read_clock_gettime_t_syscall +#endif +static int lzo_pclock_read_clock_gettime_t_syscall(lzo_pclock_handle_p h, lzo_pclock_p c) +{ + struct timespec ts; + if (lzo_pclock_syscall_clock_gettime(3, &ts) != 0) + return -1; + c->tv_sec = ts.tv_sec; + c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, ts.tv_nsec); + LZO_UNUSED(h); return 0; +} +#endif +#if (LZO_OS_CYGWIN || LZO_OS_WIN32 || LZO_OS_WIN64) && (LZO_HAVE_WINDOWS_H) && defined(lzo_int64l_t) +#ifndef lzo_pclock_read_getthreadtimes +#define lzo_pclock_read_getthreadtimes lzo_pclock_read_getthreadtimes +#endif +static int lzo_pclock_read_getthreadtimes(lzo_pclock_handle_p h, lzo_pclock_p c) +{ + FILETIME ct, et, kt, ut; + lzo_uint64l_t ticks; + if (GetThreadTimes(GetCurrentThread(), &ct, &et, &kt, &ut) == 0) + return -1; + ticks = (LZO_STATIC_CAST(lzo_uint64l_t, ut.dwHighDateTime) << 32) | ut.dwLowDateTime; + if __lzo_unlikely(h->ticks_base == 0) + h->ticks_base = ticks; + else + ticks -= h->ticks_base; + c->tv_sec = LZO_STATIC_CAST(lzo_int64l_t, (ticks / 10000000ul)); + ticks = (ticks % 10000000ul) * 100u; + c->tv_nsec = LZO_STATIC_CAST(lzo_uint32l_t, ticks); + LZO_UNUSED(h); return 0; +} +#endif +LZOLIB_PUBLIC(int, lzo_pclock_open) (lzo_pclock_handle_p h, int mode) +{ + lzo_pclock_t c; + int i; + h->h = LZO_STATIC_CAST(lzolib_handle_t, 0); + h->mode = -1; + h->read_error = 2; + h->name = NULL; + h->gettime = LZO_STATIC_CAST(lzo_pclock_gettime_t, 0); +#if defined(lzo_int64l_t) + h->ticks_base = 0; +#endif + switch (mode) + { + case LZO_PCLOCK_REALTIME: +# if defined(lzo_pclock_read_clock_gettime_r_syscall) + if (lzo_pclock_read_clock_gettime_r_syscall(h, &c) == 0) { + h->gettime = lzo_pclock_read_clock_gettime_r_syscall; + h->name = "CLOCK_REALTIME/syscall"; + break; + } +# endif +# if defined(lzo_pclock_read_gettimeofday) + if (lzo_pclock_read_gettimeofday(h, &c) == 0) { + h->gettime = lzo_pclock_read_gettimeofday; + h->name = "gettimeofday"; + break; + } +# endif + break; + case LZO_PCLOCK_MONOTONIC: +# if defined(lzo_pclock_read_clock_gettime_m_syscall) + if (lzo_pclock_read_clock_gettime_m_syscall(h, &c) == 0) { + h->gettime = lzo_pclock_read_clock_gettime_m_syscall; + h->name = "CLOCK_MONOTONIC/syscall"; + break; + } +# endif +# if defined(lzo_pclock_read_uclock) + if (lzo_pclock_read_uclock(h, &c) == 0) { + h->gettime = lzo_pclock_read_uclock; + h->name = "uclock"; + break; + } +# endif +# if defined(lzo_pclock_read_clock) + if (lzo_pclock_read_clock(h, &c) == 0) { + h->gettime = lzo_pclock_read_clock; + h->name = "clock"; + break; + } +# endif + break; + case LZO_PCLOCK_PROCESS_CPUTIME_ID: +# if defined(lzo_pclock_read_getprocesstimes) + if (lzo_pclock_read_getprocesstimes(h, &c) == 0) { + h->gettime = lzo_pclock_read_getprocesstimes; + h->name = "GetProcessTimes"; + break; + } +# endif +# if defined(lzo_pclock_read_clock_gettime_p_syscall) + if (lzo_pclock_read_clock_gettime_p_syscall(h, &c) == 0) { + h->gettime = lzo_pclock_read_clock_gettime_p_syscall; + h->name = "CLOCK_PROCESS_CPUTIME_ID/syscall"; + break; + } +# endif +# if defined(lzo_pclock_read_clock_gettime_p_libc) + if (lzo_pclock_read_clock_gettime_p_libc(h, &c) == 0) { + h->gettime = lzo_pclock_read_clock_gettime_p_libc; + h->name = "CLOCK_PROCESS_CPUTIME_ID/libc"; + break; + } +# endif +# if defined(lzo_pclock_read_getrusage) + if (lzo_pclock_read_getrusage(h, &c) == 0) { + h->gettime = lzo_pclock_read_getrusage; + h->name = "getrusage"; + break; + } +# endif + break; + case LZO_PCLOCK_THREAD_CPUTIME_ID: +# if defined(lzo_pclock_read_getthreadtimes) + if (lzo_pclock_read_getthreadtimes(h, &c) == 0) { + h->gettime = lzo_pclock_read_getthreadtimes; + h->name = "GetThreadTimes"; + } +# endif +# if defined(lzo_pclock_read_clock_gettime_t_syscall) + if (lzo_pclock_read_clock_gettime_t_syscall(h, &c) == 0) { + h->gettime = lzo_pclock_read_clock_gettime_t_syscall; + h->name = "CLOCK_THREAD_CPUTIME_ID/syscall"; + break; + } +# endif +# if defined(lzo_pclock_read_clock_gettime_t_libc) + if (lzo_pclock_read_clock_gettime_t_libc(h, &c) == 0) { + h->gettime = lzo_pclock_read_clock_gettime_t_libc; + h->name = "CLOCK_THREAD_CPUTIME_ID/libc"; + break; + } +# endif + break; + } + if (!h->gettime) + return -1; + if (!h->h) + h->h = LZO_STATIC_CAST(lzolib_handle_t, 1); + h->mode = mode; + h->read_error = 0; + if (!h->name) + h->name = "unknown"; + for (i = 0; i < 10; i++) { + __LZOLIB_FUNCNAME(lzo_pclock_read)(h, &c); + } + return 0; +} +LZOLIB_PUBLIC(int, lzo_pclock_open_default) (lzo_pclock_handle_p h) +{ + if (__LZOLIB_FUNCNAME(lzo_pclock_open)(h, LZO_PCLOCK_PROCESS_CPUTIME_ID) == 0) + return 0; + if (__LZOLIB_FUNCNAME(lzo_pclock_open)(h, LZO_PCLOCK_MONOTONIC) == 0) + return 0; + if (__LZOLIB_FUNCNAME(lzo_pclock_open)(h, LZO_PCLOCK_REALTIME) == 0) + return 0; + if (__LZOLIB_FUNCNAME(lzo_pclock_open)(h, LZO_PCLOCK_THREAD_CPUTIME_ID) == 0) + return 0; + return -1; +} +LZOLIB_PUBLIC(int, lzo_pclock_close) (lzo_pclock_handle_p h) +{ + h->h = LZO_STATIC_CAST(lzolib_handle_t, 0); + h->mode = -1; + h->name = NULL; + h->gettime = LZO_STATIC_CAST(lzo_pclock_gettime_t, 0); + return 0; +} +LZOLIB_PUBLIC(void, lzo_pclock_read) (lzo_pclock_handle_p h, lzo_pclock_p c) +{ + if (h->gettime) { + if (h->gettime(h, c) == 0) + return; + } + h->read_error = 1; +#if defined(lzo_int64l_t) + c->tv_sec = 0; +#else + c->tv_sec_high = 0; + c->tv_sec_low = 0; +#endif + c->tv_nsec = 0; +} +#if !(LZO_CFG_NO_DOUBLE) +LZOLIB_PUBLIC(double, lzo_pclock_get_elapsed) (lzo_pclock_handle_p h, const lzo_pclock_p start, const lzo_pclock_p stop) +{ + if (!h->h) { h->mode = -1; return 0.0; } + { +#if 1 && (LZO_ARCH_I386 && LZO_CC_GNUC) && defined(__STRICT_ALIGNMENT__) + float tstop, tstart; + tstop = LZO_STATIC_CAST(float, (stop->tv_sec + stop->tv_nsec / 1000000000.0)); + tstart = LZO_STATIC_CAST(float, (start->tv_sec + start->tv_nsec / 1000000000.0)); +#elif defined(lzo_int64l_t) + double tstop, tstart; +#if 1 && (LZO_CC_INTELC) + { lzo_int64l_t a = stop->tv_sec; lzo_uint32l_t b = stop->tv_nsec; + tstop = a + b / 1000000000.0; } + { lzo_int64l_t a = start->tv_sec; lzo_uint32l_t b = start->tv_nsec; + tstart = a + b / 1000000000.0; } +#else + tstop = stop->tv_sec + stop->tv_nsec / 1000000000.0; + tstart = start->tv_sec + start->tv_nsec / 1000000000.0; +#endif +#else + double tstop, tstart; + tstop = stop->tv_sec_low + stop->tv_nsec / 1000000000.0; + tstart = start->tv_sec_low + start->tv_nsec / 1000000000.0; +#endif + return tstop - tstart; + } +} +#endif +LZOLIB_PUBLIC(int, lzo_pclock_flush_cpu_cache) (lzo_pclock_handle_p h, unsigned flags) +{ + LZO_UNUSED(h); LZO_UNUSED(flags); + return -1; +} +#endif +#if defined(LZO_WANT_ACCLIB_MISC) +# undef LZO_WANT_ACCLIB_MISC +#define __LZOLIB_MISC_CH_INCLUDED 1 +#if !defined(LZOLIB_PUBLIC) +# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) +#endif +#if !defined(LZOLIB_PUBLIC_NOINLINE) +# if !defined(__lzo_noinline) +# define LZOLIB_PUBLIC_NOINLINE(r,f) r __LZOLIB_FUNCNAME(f) +# elif (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x030400ul) || LZO_CC_LLVM) +# define LZOLIB_PUBLIC_NOINLINE(r,f) __lzo_noinline __attribute__((__used__)) r __LZOLIB_FUNCNAME(f) +# else +# define LZOLIB_PUBLIC_NOINLINE(r,f) __lzo_noinline r __LZOLIB_FUNCNAME(f) +# endif +#endif +#if (LZO_OS_WIN32 && LZO_CC_PELLESC && (__POCC__ >= 290)) +# pragma warn(push) +# pragma warn(disable:2007) +#endif +LZOLIB_PUBLIC(const char *, lzo_getenv) (const char *s) +{ +#if (HAVE_GETENV) + return getenv(s); +#else + LZO_UNUSED(s); return LZO_STATIC_CAST(const char *, 0); +#endif +} +LZOLIB_PUBLIC(lzo_intptr_t, lzo_get_osfhandle) (int fd) +{ + if (fd < 0) + return -1; +#if (LZO_OS_CYGWIN) + return get_osfhandle(fd); +#elif (LZO_OS_EMX && defined(__RSXNT__)) + return -1; +#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__) + return -1; +#elif (LZO_OS_WIN32 || LZO_OS_WIN64) +# if (LZO_CC_PELLESC && (__POCC__ < 280)) + return -1; +# elif (LZO_CC_WATCOMC && (__WATCOMC__ < 1000)) + return -1; +# elif (LZO_CC_WATCOMC && (__WATCOMC__ < 1100)) + return _os_handle(fd); +# else + return _get_osfhandle(fd); +# endif +#else + return fd; +#endif +} +LZOLIB_PUBLIC(int, lzo_set_binmode) (int fd, int binary) +{ +#if (LZO_ARCH_M68K && LZO_OS_TOS && LZO_CC_GNUC) && defined(__MINT__) + FILE* fp; int old_binary; + if (fd == STDIN_FILENO) fp = stdin; + else if (fd == STDOUT_FILENO) fp = stdout; + else if (fd == STDERR_FILENO) fp = stderr; + else return -1; + old_binary = fp->__mode.__binary; + __set_binmode(fp, binary ? 1 : 0); + return old_binary ? 1 : 0; +#elif (LZO_ARCH_M68K && LZO_OS_TOS) + LZO_UNUSED(fd); LZO_UNUSED(binary); + return -1; +#elif (LZO_OS_DOS16 && (LZO_CC_AZTECC || LZO_CC_PACIFICC)) + LZO_UNUSED(fd); LZO_UNUSED(binary); + return -1; +#elif (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__) + int r; unsigned old_flags = __djgpp_hwint_flags; + LZO_COMPILE_TIME_ASSERT(O_BINARY > 0) + LZO_COMPILE_TIME_ASSERT(O_TEXT > 0) + if (fd < 0) return -1; + r = setmode(fd, binary ? O_BINARY : O_TEXT); + if ((old_flags & 1u) != (__djgpp_hwint_flags & 1u)) + __djgpp_set_ctrl_c(!(old_flags & 1)); + if (r == -1) return -1; + return (r & O_TEXT) ? 0 : 1; +#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__) + if (fd < 0) return -1; + LZO_UNUSED(binary); + return 1; +#elif (LZO_OS_DOS32 && LZO_CC_HIGHC) + FILE* fp; int r; + if (fd == fileno(stdin)) fp = stdin; + else if (fd == fileno(stdout)) fp = stdout; + else if (fd == fileno(stderr)) fp = stderr; + else return -1; + r = _setmode(fp, binary ? _BINARY : _TEXT); + if (r == -1) return -1; + return (r & _BINARY) ? 1 : 0; +#elif (LZO_OS_WIN32 && LZO_CC_MWERKS) && defined(__MSL__) + LZO_UNUSED(fd); LZO_UNUSED(binary); + return -1; +#elif (LZO_OS_CYGWIN && (LZO_CC_GNUC < 0x025a00ul)) + LZO_UNUSED(fd); LZO_UNUSED(binary); + return -1; +#elif (LZO_OS_CYGWIN || LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_EMX || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64) + int r; +#if !(LZO_CC_ZORTECHC) + LZO_COMPILE_TIME_ASSERT(O_BINARY > 0) +#endif + LZO_COMPILE_TIME_ASSERT(O_TEXT > 0) + if (fd < 0) return -1; + r = setmode(fd, binary ? O_BINARY : O_TEXT); + if (r == -1) return -1; + return (r & O_TEXT) ? 0 : 1; +#else + if (fd < 0) return -1; + LZO_UNUSED(binary); + return 1; +#endif +} +LZOLIB_PUBLIC(int, lzo_isatty) (int fd) +{ + if (fd < 0) + return 0; +#if (LZO_OS_DOS16 && !(LZO_CC_AZTECC)) + { + union REGS ri, ro; + ri.x.ax = 0x4400; ri.x.bx = fd; + int86(0x21, &ri, &ro); + if ((ro.x.cflag & 1) == 0) + if ((ro.x.ax & 0x83) != 0x83) + return 0; + } +#elif (LZO_OS_DOS32 && LZO_CC_WATCOMC) + { + union REGS ri, ro; + ri.w.ax = 0x4400; ri.w.bx = LZO_STATIC_CAST(unsigned short, fd); + int386(0x21, &ri, &ro); + if ((ro.w.cflag & 1) == 0) + if ((ro.w.ax & 0x83) != 0x83) + return 0; + } +#elif (LZO_HAVE_WINDOWS_H) + { + lzo_intptr_t h = __LZOLIB_FUNCNAME(lzo_get_osfhandle)(fd); + LZO_COMPILE_TIME_ASSERT(sizeof(h) == sizeof(HANDLE)) + if (h != -1) + { + DWORD d = 0; + if (GetConsoleMode(LZO_REINTERPRET_CAST(HANDLE, h), &d) == 0) + return 0; + } + } +#endif +#if (HAVE_ISATTY) + return (isatty(fd)) ? 1 : 0; +#else + return 0; +#endif +} +LZOLIB_PUBLIC(int, lzo_mkdir) (const char* name, unsigned mode) +{ +#if !(HAVE_MKDIR) + LZO_UNUSED(name); LZO_UNUSED(mode); + return -1; +#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC)) + LZO_UNUSED(mode); + return Dcreate(name); +#elif (LZO_OS_DOS32 && LZO_CC_GNUC) && defined(__DJGPP__) + return mkdir(name, mode); +#elif (LZO_OS_WIN32 && LZO_CC_GNUC) && defined(__PW32__) + return mkdir(name, mode); +#elif ((LZO_OS_DOS16 || LZO_OS_DOS32) && (LZO_CC_HIGHC || LZO_CC_PACIFICC)) + LZO_UNUSED(mode); + return mkdir(LZO_UNCONST_CAST(char *, name)); +#elif (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64) + LZO_UNUSED(mode); + return mkdir(name); +#elif (LZO_CC_WATCOMC) + return mkdir(name, LZO_STATIC_CAST(mode_t, mode)); +#else + return mkdir(name, mode); +#endif +} +LZOLIB_PUBLIC(int, lzo_rmdir) (const char* name) +{ +#if !(HAVE_RMDIR) + LZO_UNUSED(name); + return -1; +#elif ((LZO_OS_DOS16 || LZO_OS_DOS32) && (LZO_CC_HIGHC || LZO_CC_PACIFICC)) + return rmdir(LZO_UNCONST_CAST(char *, name)); +#else + return rmdir(name); +#endif +} +#if defined(lzo_int32e_t) +LZOLIB_PUBLIC(lzo_int32e_t, lzo_muldiv32s) (lzo_int32e_t a, lzo_int32e_t b, lzo_int32e_t x) +{ + lzo_int32e_t r = 0; + if __lzo_likely(x != 0) + { +#if defined(lzo_int64l_t) + lzo_int64l_t rr = (LZO_ICONV(lzo_int64l_t, a) * b) / x; + r = LZO_ITRUNC(lzo_int32e_t, rr); +#else + LZO_UNUSED(a); LZO_UNUSED(b); +#endif + } + return r; +} +LZOLIB_PUBLIC(lzo_uint32e_t, lzo_muldiv32u) (lzo_uint32e_t a, lzo_uint32e_t b, lzo_uint32e_t x) +{ + lzo_uint32e_t r = 0; + if __lzo_likely(x != 0) + { +#if defined(lzo_int64l_t) + lzo_uint64l_t rr = (LZO_ICONV(lzo_uint64l_t, a) * b) / x; + r = LZO_ITRUNC(lzo_uint32e_t, rr); +#else + LZO_UNUSED(a); LZO_UNUSED(b); +#endif + } + return r; +} +#endif +#if (LZO_OS_WIN16) +LZO_EXTERN_C void __far __pascal DebugBreak(void); +#endif +LZOLIB_PUBLIC_NOINLINE(void, lzo_debug_break) (void) +{ +#if (LZO_OS_WIN16) + DebugBreak(); +#elif (LZO_ARCH_I086) +#elif (LZO_OS_WIN64) && (LZO_HAVE_WINDOWS_H) + DebugBreak(); +#elif (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC) + __asm__ __volatile__("int $3\n" : : __LZO_ASM_CLOBBER_LIST_CC_MEMORY); +#elif (LZO_ARCH_I386) && (LZO_ASM_SYNTAX_MSC) + __asm { int 3 } +#elif (LZO_OS_WIN32) && (LZO_HAVE_WINDOWS_H) + DebugBreak(); +#else + volatile lzo_intptr_t a = -1; + * LZO_STATIC_CAST(volatile unsigned long *, LZO_REINTERPRET_CAST(volatile void *, a)) = ~0ul; +#endif +} +LZOLIB_PUBLIC_NOINLINE(void, lzo_debug_nop) (void) +{ +} +LZOLIB_PUBLIC_NOINLINE(int, lzo_debug_align_check_query) (void) +{ +#if (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC) +# if (LZO_ARCH_AMD64) + lzo_uint64e_t r = 0; +# else + size_t r = 0; +# endif + __asm__ __volatile__("pushf\n pop %0\n" : "=a" (r) : __LZO_ASM_CLOBBER_LIST_CC_MEMORY); + return LZO_ICONV(int, (r >> 18) & 1); +#elif (LZO_ARCH_I386) && (LZO_ASM_SYNTAX_MSC) + unsigned long r; + __asm { + pushf + pop eax + mov r,eax + } + return LZO_ICONV(int, (r >> 18) & 1); +#else + return -1; +#endif +} +LZOLIB_PUBLIC_NOINLINE(int, lzo_debug_align_check_enable) (int v) +{ +#if (LZO_ARCH_AMD64) && (LZO_ASM_SYNTAX_GNUC) + if (v) { + __asm__ __volatile__("pushf\n orl $262144,(%%rsp)\n popf\n" : : __LZO_ASM_CLOBBER_LIST_CC_MEMORY); + } else { + __asm__ __volatile__("pushf\n andl $-262145,(%%rsp)\n popf\n" : : __LZO_ASM_CLOBBER_LIST_CC_MEMORY); + } + return 0; +#elif (LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC) + if (v) { + __asm__ __volatile__("pushf\n orl $262144,(%%esp)\n popf\n" : : __LZO_ASM_CLOBBER_LIST_CC_MEMORY); + } else { + __asm__ __volatile__("pushf\n andl $-262145,(%%esp)\n popf\n" : : __LZO_ASM_CLOBBER_LIST_CC_MEMORY); + } + return 0; +#elif (LZO_ARCH_I386) && (LZO_ASM_SYNTAX_MSC) + if (v) { __asm { + pushf + or dword ptr [esp],262144 + popf + }} else { __asm { + pushf + and dword ptr [esp],-262145 + popf + }} + return 0; +#else + LZO_UNUSED(v); return -1; +#endif +} +LZOLIB_PUBLIC_NOINLINE(unsigned, lzo_debug_running_on_qemu) (void) +{ + unsigned r = 0; +#if (LZO_OS_POSIX_LINUX || LZO_OS_WIN32 || LZO_OS_WIN64) + const char* p; + p = __LZOLIB_FUNCNAME(lzo_getenv)(LZO_PP_STRINGIZE(LZO_ENV_RUNNING_ON_QEMU)); + if (p) { + if (p[0] == 0) r = 0; + else if ((p[0] >= '0' && p[0] <= '9') && p[1] == 0) r = LZO_ICAST(unsigned, p[0]) - '0'; + else r = 1; + } +#endif + return r; +} +LZOLIB_PUBLIC_NOINLINE(unsigned, lzo_debug_running_on_valgrind) (void) +{ +#if (LZO_ARCH_AMD64 && LZO_ABI_ILP32) + return 0; +#elif (LZO_ARCH_AMD64 || LZO_ARCH_I386) && (LZO_ASM_SYNTAX_GNUC) + volatile size_t a[6]; + size_t r = 0; + a[0] = 0x1001; a[1] = 0; a[2] = 0; a[3] = 0; a[4] = 0; a[5] = 0; +# if (LZO_ARCH_AMD64) + __asm__ __volatile__(".byte 0x48,0xc1,0xc7,0x03,0x48,0xc1,0xc7,0x0d,0x48,0xc1,0xc7,0x3d,0x48,0xc1,0xc7,0x33,0x48,0x87,0xdb\n" : "=d" (r) : "a" (&a[0]), "d" (r) __LZO_ASM_CLOBBER_LIST_CC_MEMORY); +# elif (LZO_ARCH_I386) + __asm__ __volatile__(".byte 0xc1,0xc7,0x03,0xc1,0xc7,0x0d,0xc1,0xc7,0x1d,0xc1,0xc7,0x13,0x87,0xdb\n" : "=d" (r) : "a" (&a[0]), "d" (r) __LZO_ASM_CLOBBER_LIST_CC_MEMORY); +# endif + return LZO_ITRUNC(unsigned, r); +#else + return 0; +#endif +} +#if (LZO_OS_WIN32 && LZO_CC_PELLESC && (__POCC__ >= 290)) +# pragma warn(pop) +#endif +#endif +#if defined(LZO_WANT_ACCLIB_WILDARGV) +# undef LZO_WANT_ACCLIB_WILDARGV +#define __LZOLIB_WILDARGV_CH_INCLUDED 1 +#if !defined(LZOLIB_PUBLIC) +# define LZOLIB_PUBLIC(r,f) r __LZOLIB_FUNCNAME(f) +#endif +#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) +#if 0 && (LZO_CC_MSC) +LZO_EXTERN_C int __lzo_cdecl __setargv(void); +LZO_EXTERN_C int __lzo_cdecl _setargv(void); +LZO_EXTERN_C int __lzo_cdecl _setargv(void) { return __setargv(); } +#endif +#endif +#if (LZO_OS_WIN32 || LZO_OS_WIN64) +#if (LZO_CC_MSC && (_MSC_VER >= 1900)) +#elif (LZO_CC_INTELC || LZO_CC_MSC) +LZO_EXTERN_C int __lzo_cdecl __setargv(void); +LZO_EXTERN_C int __lzo_cdecl _setargv(void); +LZO_EXTERN_C int __lzo_cdecl _setargv(void) { return __setargv(); } +#endif +#endif +#if (LZO_OS_EMX) +#define __LZOLIB_HAVE_LZO_WILDARGV 1 +LZOLIB_PUBLIC(void, lzo_wildargv) (int* argc, char*** argv) +{ + if (argc && argv) { + _response(argc, argv); + _wildcard(argc, argv); + } +} +#endif +#if (LZO_OS_CONSOLE_PSP) && defined(__PSPSDK_DEBUG__) +#define __LZOLIB_HAVE_LZO_WILDARGV 1 +LZO_EXTERN_C int lzo_psp_init_module(int*, char***, int); +LZOLIB_PUBLIC(void, lzo_wildargv) (int* argc, char*** argv) +{ + lzo_psp_init_module(argc, argv, -1); +} +#endif +#if !(__LZOLIB_HAVE_LZO_WILDARGV) +#define __LZOLIB_HAVE_LZO_WILDARGV 1 +LZOLIB_PUBLIC(void, lzo_wildargv) (int* argc, char*** argv) +{ +#if 1 && (LZO_ARCH_I086PM) + if (LZO_MM_AHSHIFT != 3) { exit(1); } +#elif 1 && (LZO_ARCH_M68K && LZO_OS_TOS && LZO_CC_GNUC) && defined(__MINT__) + __binmode(1); + if (isatty(1)) __set_binmode(stdout, 0); + if (isatty(2)) __set_binmode(stderr, 0); +#endif + LZO_UNUSED(argc); LZO_UNUSED(argv); +} +#endif +#endif + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzo_swd.ch b/tools/z64compress/src/enc/lzo/lzo_swd.ch new file mode 100644 index 0000000..20bc461 --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzo_swd.ch @@ -0,0 +1,700 @@ +/* lzo_swd.ch -- sliding window dictionary + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +#if (LZO_UINT_MAX < LZO_0xffffffffL) +# error "LZO_UINT_MAX" +#endif +#if defined(LZO_DEBUG) +# include <stdio.h> +#endif +#if defined(__LZO_CHECKER) +# include <stdlib.h> +#endif + + +/*********************************************************************** +// +************************************************************************/ + +/* unsigned type for dictionary access - don't waste memory here */ +#if (0UL + SWD_N + SWD_F + SWD_F < 65535UL) + typedef lzo_uint16_t swd_uint; +# define SWD_UINT_MAX 0xffffu +#else + typedef lzo_uint32_t swd_uint; +# define SWD_UINT_MAX 0xffffffffu +#endif +#define swd_uintp swd_uint * +#define SWD_UINT(x) ((swd_uint)(x)) + + +#ifndef SWD_HSIZE +# define SWD_HSIZE 16384 +#endif +#ifndef SWD_MAX_CHAIN +# define SWD_MAX_CHAIN 2048 +#endif + +#if !defined(HEAD3) +#if 1 +# define HEAD3(b,p) \ + ((DMUL(0x9f5f,(((((lzo_xint)b[p]<<5)^b[p+1])<<5)^b[p+2]))>>5) & (SWD_HSIZE-1)) +#else +# define HEAD3(b,p) \ + ((DMUL(0x9f5f,(((((lzo_xint)b[p+2]<<5)^b[p+1])<<5)^b[p]))>>5) & (SWD_HSIZE-1)) +#endif +#endif + +#if !(SWD_NO_HEAD2) && (SWD_THRESHOLD == 1) && !defined(HEAD2) +# if 1 && (LZO_OPT_UNALIGNED16) +# define HEAD2(b,p) UA_GET_NE16((b)+(p)) +# else +# define HEAD2(b,p) (b[p] ^ ((unsigned)b[(p)+1]<<8)) +# endif +# define NIL2 SWD_UINT_MAX +#endif +#ifndef IF_HEAD2 +#define IF_HEAD2(s) /*empty*/ +#endif + + +typedef struct +{ +/* public - "built-in" */ + lzo_uint swd_n; + lzo_uint swd_f; + lzo_uint swd_threshold; + +/* public - configuration */ + lzo_uint max_chain; + lzo_uint nice_length; + lzo_bool use_best_off; + lzo_uint lazy_insert; + +/* public - output */ + lzo_uint m_len; + lzo_uint m_off; + lzo_uint look; + int b_char; +#if defined(SWD_BEST_OFF) + lzo_uint best_off[ SWD_BEST_OFF ]; +#endif + +/* semi public */ + LZO_COMPRESS_T *c; + lzo_uint m_pos; +#if defined(SWD_BEST_OFF) + lzo_uint best_pos[ SWD_BEST_OFF ]; +#endif + +/* private */ + const lzo_bytep dict; + const lzo_bytep dict_end; + lzo_uint dict_len; + +/* private */ + lzo_uint ip; /* input pointer (lookahead) */ + lzo_uint bp; /* buffer pointer */ + lzo_uint rp; /* remove pointer */ + lzo_uint b_size; + + lzo_bytep b_wrap; + + lzo_uint node_count; + lzo_uint first_rp; + +#if defined(__LZO_CHECKER) + /* malloc arrays of the exact size to detect any overrun */ + unsigned char *b; + swd_uint *head3; + swd_uint *succ3; + swd_uint *best3; + swd_uint *llen3; +# ifdef HEAD2 + swd_uint *head2; +# endif + +#else + unsigned char b [ SWD_N + SWD_F + SWD_F ]; + swd_uint head3 [ SWD_HSIZE ]; + swd_uint succ3 [ SWD_N + SWD_F ]; + swd_uint best3 [ SWD_N + SWD_F ]; + swd_uint llen3 [ SWD_HSIZE ]; +# ifdef HEAD2 + swd_uint head2 [ 65536L ]; +# endif +#endif +} +lzo_swd_t; +#define lzo_swd_p lzo_swd_t * + + +#define s_b(s) s->b +#define s_head3(s) s->head3 +#define s_succ3(s) s->succ3 +#define s_best3(s) s->best3 +#define s_llen3(s) s->llen3 +#ifdef HEAD2 +#define s_head2(s) s->head2 +#endif +#define SIZEOF_LZO_SWD_T (sizeof(lzo_swd_t)) + + +/* Access macro for head3. + * head3[key] may be uninitialized if the list is emtpy, + * but then its value will never be used. + */ +#if 1 || defined(__LZO_CHECKER) +# define s_get_head3(s,key) \ + ((swd_uint)((s_llen3(s)[key] == 0) ? SWD_UINT_MAX : s_head3(s)[key])) +#else +# define s_get_head3(s,key) (s_head3(s)[key]) +#endif + + +/*********************************************************************** +// +************************************************************************/ + +static +void swd_initdict(lzo_swd_p s, const lzo_bytep dict, lzo_uint dict_len) +{ + s->dict = s->dict_end = NULL; + s->dict_len = 0; + + if (!dict || dict_len == 0) + return; + if (dict_len > s->swd_n) + { + dict += dict_len - s->swd_n; + dict_len = s->swd_n; + } + + s->dict = dict; + s->dict_len = dict_len; + s->dict_end = dict + dict_len; + lzo_memcpy(s_b(s),dict,dict_len); + s->ip = dict_len; +} + + +static +void swd_insertdict(lzo_swd_p s, lzo_uint node, lzo_uint len) +{ + lzo_uint key; + + s->node_count = s->swd_n - len; + s->first_rp = node; + + if (len) do + { + key = HEAD3(s_b(s),node); + s_succ3(s)[node] = s_get_head3(s,key); + s_head3(s)[key] = SWD_UINT(node); + s_best3(s)[node] = SWD_UINT(s->swd_f + 1); + s_llen3(s)[key]++; + assert(s_llen3(s)[key] <= s->swd_n); + +#ifdef HEAD2 + IF_HEAD2(s) { + key = HEAD2(s_b(s),node); + s_head2(s)[key] = SWD_UINT(node); + } +#endif + + node++; + } + while (--len != 0); +} + + +/*********************************************************************** +// +************************************************************************/ + +static void swd_exit(lzo_swd_p s); + +static +int swd_init(lzo_swd_p s, const lzo_bytep dict, lzo_uint dict_len) +{ +#if defined(__LZO_CHECKER) + unsigned r = 1; + s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F); + s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); + s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); + s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); + s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); + r &= s->b != NULL; + r &= s->head3 != NULL; + r &= s->succ3 != NULL; + r &= s->best3 != NULL; + r &= s->llen3 != NULL; +#ifdef HEAD2 + IF_HEAD2(s) { + s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L); + r &= s->head2 != NULL; + } +#endif + if (r != 1) { + swd_exit(s); + return LZO_E_OUT_OF_MEMORY; + } +#endif + + s->m_len = 0; + s->m_off = 0; +#if defined(SWD_BEST_OFF) + { + unsigned i; + for (i = 0; i < SWD_BEST_OFF; i++) + s->best_off[i] = s->best_pos[i] = 0; + } +#endif + + s->swd_n = SWD_N; + s->swd_f = SWD_F; + s->swd_threshold = SWD_THRESHOLD; + + /* defaults */ + s->max_chain = SWD_MAX_CHAIN; + s->nice_length = s->swd_f; + s->use_best_off = 0; + s->lazy_insert = 0; + + s->b_size = s->swd_n + s->swd_f; +#if 0 + if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX) + return LZO_E_ERROR; +#else + LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) + LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) +#endif + s->b_wrap = s_b(s) + s->b_size; + s->node_count = s->swd_n; + + lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); +#ifdef HEAD2 + IF_HEAD2(s) { +#if 1 + lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); + assert(s_head2(s)[0] == NIL2); +#else + lzo_xint i; + for (i = 0; i < 65536L; i++) + s_head2(s)[i] = NIL2; +#endif + } +#endif + + s->ip = 0; + swd_initdict(s,dict,dict_len); + s->bp = s->ip; + s->first_rp = s->ip; + + assert(s->ip + s->swd_f <= s->b_size); +#if 1 + s->look = (lzo_uint) (s->c->in_end - s->c->ip); + if (s->look > 0) + { + if (s->look > s->swd_f) + s->look = s->swd_f; + lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); + s->c->ip += s->look; + s->ip += s->look; + } +#else + s->look = 0; + while (s->look < s->swd_f) + { + int c; + if ((c = getbyte(*(s->c))) < 0) + break; + s_b(s)[s->ip] = LZO_BYTE(c); + s->ip++; + s->look++; + } +#endif + if (s->ip == s->b_size) + s->ip = 0; + + if (s->look >= 2 && s->dict_len > 0) + swd_insertdict(s,0,s->dict_len); + + s->rp = s->first_rp; + if (s->rp >= s->node_count) + s->rp -= s->node_count; + else + s->rp += s->b_size - s->node_count; + +#if 1 || defined(__LZO_CHECKER) + /* initialize memory for the first few HEAD3 (if s->ip is not far + * enough ahead to do this job for us). The value doesn't matter. */ + if (s->look < 3) { + lzo_bytep p = &s_b(s)[s->bp+s->look]; + p[0] = p[1] = p[2] = 0; + } +#endif + + return LZO_E_OK; +} + + +static +void swd_exit(lzo_swd_p s) +{ +#if defined(__LZO_CHECKER) + /* free in reverse order of allocations */ +#ifdef HEAD2 + free(s->head2); s->head2 = NULL; +#endif + free(s->llen3); s->llen3 = NULL; + free(s->best3); s->best3 = NULL; + free(s->succ3); s->succ3 = NULL; + free(s->head3); s->head3 = NULL; + free(s->b); s->b = NULL; +#else + LZO_UNUSED(s); +#endif +} + + +#define swd_pos2off(s,pos) \ + (s->bp > (pos) ? s->bp - (pos) : s->b_size - ((pos) - s->bp)) + + +/*********************************************************************** +// +************************************************************************/ + +static __lzo_inline +void swd_getbyte(lzo_swd_p s) +{ + int c; + + if ((c = getbyte(*(s->c))) < 0) + { + if (s->look > 0) + --s->look; +#if 1 || defined(__LZO_CHECKER) + /* initialize memory - value doesn't matter */ + s_b(s)[s->ip] = 0; + if (s->ip < s->swd_f) + s->b_wrap[s->ip] = 0; +#endif + } + else + { + s_b(s)[s->ip] = LZO_BYTE(c); + if (s->ip < s->swd_f) + s->b_wrap[s->ip] = LZO_BYTE(c); + } + if (++s->ip == s->b_size) + s->ip = 0; + if (++s->bp == s->b_size) + s->bp = 0; + if (++s->rp == s->b_size) + s->rp = 0; +} + + +/*********************************************************************** +// remove node from lists +************************************************************************/ + +static __lzo_inline +void swd_remove_node(lzo_swd_p s, lzo_uint node) +{ + if (s->node_count == 0) + { + lzo_uint key; + +#ifdef LZO_DEBUG + if (s->first_rp != LZO_UINT_MAX) + { + if (node != s->first_rp) + printf("Remove %5ld: %5ld %5ld %5ld %5ld %6ld %6ld\n", + (long)node, (long)s->rp, (long)s->ip, (long)s->bp, + (long)s->first_rp, (long)(s->ip - node), + (long)(s->ip - s->bp)); + assert(node == s->first_rp); + s->first_rp = LZO_UINT_MAX; + } +#endif + + key = HEAD3(s_b(s),node); + assert(s_llen3(s)[key] > 0); + --s_llen3(s)[key]; + +#ifdef HEAD2 + IF_HEAD2(s) { + key = HEAD2(s_b(s),node); + assert(s_head2(s)[key] != NIL2); + if ((lzo_uint) s_head2(s)[key] == node) + s_head2(s)[key] = NIL2; + } +#endif + } + else + --s->node_count; +} + + +/*********************************************************************** +// +************************************************************************/ + +static +void swd_accept(lzo_swd_p s, lzo_uint n) +{ + assert(n <= s->look); + + if (n) do + { + lzo_uint key; + + swd_remove_node(s,s->rp); + + /* add bp into HEAD3 */ + key = HEAD3(s_b(s),s->bp); + s_succ3(s)[s->bp] = s_get_head3(s,key); + s_head3(s)[key] = SWD_UINT(s->bp); + s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); + s_llen3(s)[key]++; + assert(s_llen3(s)[key] <= s->swd_n); + +#ifdef HEAD2 + /* add bp into HEAD2 */ + IF_HEAD2(s) { + key = HEAD2(s_b(s),s->bp); + s_head2(s)[key] = SWD_UINT(s->bp); + } +#endif + + swd_getbyte(s); + } while (--n != 0); +} + + +/*********************************************************************** +// +************************************************************************/ + +static +void swd_search(lzo_swd_p s, lzo_uint node, lzo_uint cnt) +{ + const lzo_bytep p1; + const lzo_bytep p2; + const lzo_bytep px; + lzo_uint m_len = s->m_len; + const lzo_bytep b = s_b(s); + const lzo_bytep bp = s_b(s) + s->bp; + const lzo_bytep bx = s_b(s) + s->bp + s->look; + swd_uintp succ3 = s_succ3(s); + unsigned char scan_end1; + + assert(s->m_len > 0); + + scan_end1 = bp[m_len - 1]; + for ( ; cnt-- > 0; node = succ3[node]) + { + p1 = bp; + p2 = b + node; + px = bx; + + assert(m_len < s->look); + + if ( +#if 1 + p2[m_len - 1] == scan_end1 && + p2[m_len] == p1[m_len] && +#endif + p2[0] == p1[0] && + p2[1] == p1[1]) + { + lzo_uint i; + assert(lzo_memcmp(bp,&b[node],3) == 0); + +#if 0 && (LZO_OPT_UNALIGNED32) + p1 += 3; p2 += 3; + while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2)) + p1 += 4, p2 += 4; + while (p1 < px && *p1 == *p2) + p1 += 1, p2 += 1; +#else + p1 += 2; p2 += 2; + do {} while (++p1 < px && *p1 == *++p2); +#endif + i = pd(p1, bp); + +#ifdef LZO_DEBUG + if (lzo_memcmp(bp,&b[node],i) != 0) + printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n", + (long)s->bp, (long) node, (long) i, + bp[0], bp[1], b[node], b[node+1]); +#endif + assert(lzo_memcmp(bp,&b[node],i) == 0); + +#if defined(SWD_BEST_OFF) + if (i < SWD_BEST_OFF) + { + if (s->best_pos[i] == 0) + s->best_pos[i] = node + 1; + } +#endif + if (i > m_len) + { + s->m_len = m_len = i; + s->m_pos = node; + if (m_len == s->look) + return; + if (m_len >= s->nice_length) + return; + if (m_len > (lzo_uint) s_best3(s)[node]) + return; + scan_end1 = bp[m_len - 1]; + } + } + } +} + + +/*********************************************************************** +// +************************************************************************/ + +#ifdef HEAD2 + +static +lzo_bool swd_search2(lzo_swd_p s) +{ + lzo_uint key; + + assert(s->look >= 2); + assert(s->m_len > 0); + + key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; + if (key == NIL2) + return 0; +#ifdef LZO_DEBUG + if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0) + printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key, + s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]); +#endif + assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0); +#if defined(SWD_BEST_OFF) + if (s->best_pos[2] == 0) + s->best_pos[2] = key + 1; +#endif + + if (s->m_len < 2) + { + s->m_len = 2; + s->m_pos = key; + } + return 1; +} + +#endif + + +/*********************************************************************** +// +************************************************************************/ + +static +void swd_findbest(lzo_swd_p s) +{ + lzo_uint key; + lzo_uint cnt, node; + lzo_uint len; + + assert(s->m_len > 0); + + /* get current head, add bp into HEAD3 */ + key = HEAD3(s_b(s),s->bp); + node = s_succ3(s)[s->bp] = s_get_head3(s,key); + cnt = s_llen3(s)[key]++; + assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); + if (cnt > s->max_chain && s->max_chain > 0) + cnt = s->max_chain; + s_head3(s)[key] = SWD_UINT(s->bp); + + s->b_char = s_b(s)[s->bp]; + len = s->m_len; + if (s->m_len >= s->look) + { + if (s->look == 0) + s->b_char = -1; + s->m_off = 0; + s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); + } + else + { +#if defined(HEAD2) + if (swd_search2(s) && s->look >= 3) + swd_search(s,node,cnt); +#else + if (s->look >= 3) + swd_search(s,node,cnt); +#endif + if (s->m_len > len) + s->m_off = swd_pos2off(s,s->m_pos); + s_best3(s)[s->bp] = SWD_UINT(s->m_len); + +#if defined(SWD_BEST_OFF) + if (s->use_best_off) + { + unsigned i; + for (i = 2; i < SWD_BEST_OFF; i++) + if (s->best_pos[i] > 0) + s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); + else + s->best_off[i] = 0; + } +#endif + } + + swd_remove_node(s,s->rp); + +#ifdef HEAD2 + /* add bp into HEAD2 */ + IF_HEAD2(s) { + key = HEAD2(s_b(s),s->bp); + s_head2(s)[key] = SWD_UINT(s->bp); + } +#endif +} + + +#undef HEAD3 +#undef HEAD2 +#undef IF_HEAD2 +#undef s_get_head3 + + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzoconf.h b/tools/z64compress/src/enc/lzo/lzoconf.h new file mode 100644 index 0000000..1a1dd98 --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzoconf.h @@ -0,0 +1,453 @@ +/* lzoconf.h -- configuration of the LZO data compression library + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +#ifndef __LZOCONF_H_INCLUDED +#define __LZOCONF_H_INCLUDED 1 + +#define LZO_VERSION 0x20a0 /* 2.10 */ +#define LZO_VERSION_STRING "2.10" +#define LZO_VERSION_DATE "Mar 01 2017" + +/* internal Autoconf configuration file - only used when building LZO */ +#if defined(LZO_HAVE_CONFIG_H) +# include <config.h> +#endif +#include <limits.h> +#include <stddef.h> + + +/*********************************************************************** +// LZO requires a conforming <limits.h> +************************************************************************/ + +#if !defined(CHAR_BIT) || (CHAR_BIT != 8) +# error "invalid CHAR_BIT" +#endif +#if !defined(UCHAR_MAX) || !defined(USHRT_MAX) || !defined(UINT_MAX) || !defined(ULONG_MAX) +# error "check your compiler installation" +#endif +#if (USHRT_MAX < 1) || (UINT_MAX < 1) || (ULONG_MAX < 1) +# error "your limits.h macros are broken" +#endif + +/* get OS and architecture defines */ +#ifndef __LZODEFS_H_INCLUDED +#include "lzodefs.h" +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + + +/*********************************************************************** +// some core defines +************************************************************************/ + +/* memory checkers */ +#if !defined(__LZO_CHECKER) +# if defined(__BOUNDS_CHECKING_ON) +# define __LZO_CHECKER 1 +# elif defined(__CHECKER__) +# define __LZO_CHECKER 1 +# elif defined(__INSURE__) +# define __LZO_CHECKER 1 +# elif defined(__PURIFY__) +# define __LZO_CHECKER 1 +# endif +#endif + + +/*********************************************************************** +// integral and pointer types +************************************************************************/ + +/* lzo_uint must match size_t */ +#if !defined(LZO_UINT_MAX) +# if (LZO_ABI_LLP64) +# if (LZO_OS_WIN64) + typedef unsigned __int64 lzo_uint; + typedef __int64 lzo_int; +# define LZO_TYPEOF_LZO_INT LZO_TYPEOF___INT64 +# else + typedef lzo_ullong_t lzo_uint; + typedef lzo_llong_t lzo_int; +# define LZO_TYPEOF_LZO_INT LZO_TYPEOF_LONG_LONG +# endif +# define LZO_SIZEOF_LZO_INT 8 +# define LZO_UINT_MAX 0xffffffffffffffffull +# define LZO_INT_MAX 9223372036854775807LL +# define LZO_INT_MIN (-1LL - LZO_INT_MAX) +# elif (LZO_ABI_IP32L64) /* MIPS R5900 */ + typedef unsigned int lzo_uint; + typedef int lzo_int; +# define LZO_SIZEOF_LZO_INT LZO_SIZEOF_INT +# define LZO_TYPEOF_LZO_INT LZO_TYPEOF_INT +# define LZO_UINT_MAX UINT_MAX +# define LZO_INT_MAX INT_MAX +# define LZO_INT_MIN INT_MIN +# elif (ULONG_MAX >= LZO_0xffffffffL) + typedef unsigned long lzo_uint; + typedef long lzo_int; +# define LZO_SIZEOF_LZO_INT LZO_SIZEOF_LONG +# define LZO_TYPEOF_LZO_INT LZO_TYPEOF_LONG +# define LZO_UINT_MAX ULONG_MAX +# define LZO_INT_MAX LONG_MAX +# define LZO_INT_MIN LONG_MIN +# else +# error "lzo_uint" +# endif +#endif + +/* The larger type of lzo_uint and lzo_uint32_t. */ +#if (LZO_SIZEOF_LZO_INT >= 4) +# define lzo_xint lzo_uint +#else +# define lzo_xint lzo_uint32_t +#endif + +typedef int lzo_bool; + +/* sanity checks */ +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int) == LZO_SIZEOF_LZO_INT) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) == LZO_SIZEOF_LZO_INT) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_xint) >= sizeof(lzo_uint)) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_xint) >= sizeof(lzo_uint32_t)) + +#ifndef __LZO_MMODEL +#define __LZO_MMODEL /*empty*/ +#endif + +/* no typedef here because of const-pointer issues */ +#define lzo_bytep unsigned char __LZO_MMODEL * +#define lzo_charp char __LZO_MMODEL * +#define lzo_voidp void __LZO_MMODEL * +#define lzo_shortp short __LZO_MMODEL * +#define lzo_ushortp unsigned short __LZO_MMODEL * +#define lzo_intp lzo_int __LZO_MMODEL * +#define lzo_uintp lzo_uint __LZO_MMODEL * +#define lzo_xintp lzo_xint __LZO_MMODEL * +#define lzo_voidpp lzo_voidp __LZO_MMODEL * +#define lzo_bytepp lzo_bytep __LZO_MMODEL * + +#define lzo_int8_tp lzo_int8_t __LZO_MMODEL * +#define lzo_uint8_tp lzo_uint8_t __LZO_MMODEL * +#define lzo_int16_tp lzo_int16_t __LZO_MMODEL * +#define lzo_uint16_tp lzo_uint16_t __LZO_MMODEL * +#define lzo_int32_tp lzo_int32_t __LZO_MMODEL * +#define lzo_uint32_tp lzo_uint32_t __LZO_MMODEL * +#if defined(lzo_int64_t) +#define lzo_int64_tp lzo_int64_t __LZO_MMODEL * +#define lzo_uint64_tp lzo_uint64_t __LZO_MMODEL * +#endif + +/* Older LZO versions used to support ancient systems and memory models + * such as 16-bit MSDOS with __huge pointers or Cray PVP, but these + * obsolete configurations are not supported any longer. + */ +#if defined(__LZO_MMODEL_HUGE) +#error "__LZO_MMODEL_HUGE memory model is unsupported" +#endif +#if (LZO_MM_PVP) +#error "LZO_MM_PVP memory model is unsupported" +#endif +#if (LZO_SIZEOF_INT < 4) +#error "LZO_SIZEOF_INT < 4 is unsupported" +#endif +#if (__LZO_UINTPTR_T_IS_POINTER) +#error "__LZO_UINTPTR_T_IS_POINTER is unsupported" +#endif +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(int) >= 4) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) >= 4) +/* Strange configurations where sizeof(lzo_uint) != sizeof(size_t) should + * work but have not received much testing lately, so be strict here. + */ +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) == sizeof(size_t)) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) == sizeof(ptrdiff_t)) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_uint) == sizeof(lzo_uintptr_t)) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(void *) == sizeof(lzo_uintptr_t)) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(char *) == sizeof(lzo_uintptr_t)) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long *) == sizeof(lzo_uintptr_t)) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(void *) == sizeof(lzo_voidp)) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(char *) == sizeof(lzo_bytep)) + + +/*********************************************************************** +// function types +************************************************************************/ + +/* name mangling */ +#if !defined(__LZO_EXTERN_C) +# ifdef __cplusplus +# define __LZO_EXTERN_C extern "C" +# else +# define __LZO_EXTERN_C extern +# endif +#endif + +/* calling convention */ +#if !defined(__LZO_CDECL) +# define __LZO_CDECL __lzo_cdecl +#endif + +/* DLL export information */ +#if !defined(__LZO_EXPORT1) +# define __LZO_EXPORT1 /*empty*/ +#endif +#if !defined(__LZO_EXPORT2) +# define __LZO_EXPORT2 /*empty*/ +#endif + +/* __cdecl calling convention for public C and assembly functions */ +#if !defined(LZO_PUBLIC) +# define LZO_PUBLIC(r) __LZO_EXPORT1 r __LZO_EXPORT2 __LZO_CDECL +#endif +#if !defined(LZO_EXTERN) +# define LZO_EXTERN(r) __LZO_EXTERN_C LZO_PUBLIC(r) +#endif +#if !defined(LZO_PRIVATE) +# define LZO_PRIVATE(r) static r __LZO_CDECL +#endif + +/* function types */ +typedef int +(__LZO_CDECL *lzo_compress_t) ( const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem ); + +typedef int +(__LZO_CDECL *lzo_decompress_t) ( const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem ); + +typedef int +(__LZO_CDECL *lzo_optimize_t) ( lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem ); + +typedef int +(__LZO_CDECL *lzo_compress_dict_t)(const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem, + const lzo_bytep dict, lzo_uint dict_len ); + +typedef int +(__LZO_CDECL *lzo_decompress_dict_t)(const lzo_bytep src, lzo_uint src_len, + lzo_bytep dst, lzo_uintp dst_len, + lzo_voidp wrkmem, + const lzo_bytep dict, lzo_uint dict_len ); + + +/* Callback interface. Currently only the progress indicator ("nprogress") + * is used, but this may change in a future release. */ + +struct lzo_callback_t; +typedef struct lzo_callback_t lzo_callback_t; +#define lzo_callback_p lzo_callback_t __LZO_MMODEL * + +/* malloc & free function types */ +typedef lzo_voidp (__LZO_CDECL *lzo_alloc_func_t) + (lzo_callback_p self, lzo_uint items, lzo_uint size); +typedef void (__LZO_CDECL *lzo_free_func_t) + (lzo_callback_p self, lzo_voidp ptr); + +/* a progress indicator callback function */ +typedef void (__LZO_CDECL *lzo_progress_func_t) + (lzo_callback_p, lzo_uint, lzo_uint, int); + +struct lzo_callback_t +{ + /* custom allocators (set to 0 to disable) */ + lzo_alloc_func_t nalloc; /* [not used right now] */ + lzo_free_func_t nfree; /* [not used right now] */ + + /* a progress indicator callback function (set to 0 to disable) */ + lzo_progress_func_t nprogress; + + /* INFO: the first parameter "self" of the nalloc/nfree/nprogress + * callbacks points back to this struct, so you are free to store + * some extra info in the following variables. */ + lzo_voidp user1; + lzo_xint user2; + lzo_xint user3; +}; + + +/*********************************************************************** +// error codes and prototypes +************************************************************************/ + +/* Error codes for the compression/decompression functions. Negative + * values are errors, positive values will be used for special but + * normal events. + */ +#define LZO_E_OK 0 +#define LZO_E_ERROR (-1) +#define LZO_E_OUT_OF_MEMORY (-2) /* [lzo_alloc_func_t failure] */ +#define LZO_E_NOT_COMPRESSIBLE (-3) /* [not used right now] */ +#define LZO_E_INPUT_OVERRUN (-4) +#define LZO_E_OUTPUT_OVERRUN (-5) +#define LZO_E_LOOKBEHIND_OVERRUN (-6) +#define LZO_E_EOF_NOT_FOUND (-7) +#define LZO_E_INPUT_NOT_CONSUMED (-8) +#define LZO_E_NOT_YET_IMPLEMENTED (-9) /* [not used right now] */ +#define LZO_E_INVALID_ARGUMENT (-10) +#define LZO_E_INVALID_ALIGNMENT (-11) /* pointer argument is not properly aligned */ +#define LZO_E_OUTPUT_NOT_CONSUMED (-12) +#define LZO_E_INTERNAL_ERROR (-99) + + +#ifndef lzo_sizeof_dict_t +# define lzo_sizeof_dict_t ((unsigned)sizeof(lzo_bytep)) +#endif + +/* lzo_init() should be the first function you call. + * Check the return code ! + * + * lzo_init() is a macro to allow checking that the library and the + * compiler's view of various types are consistent. + */ +#define lzo_init() __lzo_init_v2(LZO_VERSION,(int)sizeof(short),(int)sizeof(int),\ + (int)sizeof(long),(int)sizeof(lzo_uint32_t),(int)sizeof(lzo_uint),\ + (int)lzo_sizeof_dict_t,(int)sizeof(char *),(int)sizeof(lzo_voidp),\ + (int)sizeof(lzo_callback_t)) +LZO_EXTERN(int) __lzo_init_v2(unsigned,int,int,int,int,int,int,int,int,int); + +/* version functions (useful for shared libraries) */ +LZO_EXTERN(unsigned) lzo_version(void); +LZO_EXTERN(const char *) lzo_version_string(void); +LZO_EXTERN(const char *) lzo_version_date(void); +LZO_EXTERN(const lzo_charp) _lzo_version_string(void); +LZO_EXTERN(const lzo_charp) _lzo_version_date(void); + +/* string functions */ +LZO_EXTERN(int) + lzo_memcmp(const lzo_voidp a, const lzo_voidp b, lzo_uint len); +LZO_EXTERN(lzo_voidp) + lzo_memcpy(lzo_voidp dst, const lzo_voidp src, lzo_uint len); +LZO_EXTERN(lzo_voidp) + lzo_memmove(lzo_voidp dst, const lzo_voidp src, lzo_uint len); +LZO_EXTERN(lzo_voidp) + lzo_memset(lzo_voidp buf, int c, lzo_uint len); + +/* checksum functions */ +LZO_EXTERN(lzo_uint32_t) + lzo_adler32(lzo_uint32_t c, const lzo_bytep buf, lzo_uint len); +LZO_EXTERN(lzo_uint32_t) + lzo_crc32(lzo_uint32_t c, const lzo_bytep buf, lzo_uint len); +LZO_EXTERN(const lzo_uint32_tp) + lzo_get_crc32_table(void); + +/* misc. */ +LZO_EXTERN(int) _lzo_config_check(void); +typedef union { + lzo_voidp a00; lzo_bytep a01; lzo_uint a02; lzo_xint a03; lzo_uintptr_t a04; + void *a05; unsigned char *a06; unsigned long a07; size_t a08; ptrdiff_t a09; +#if defined(lzo_int64_t) + lzo_uint64_t a10; +#endif +} lzo_align_t; + +/* align a char pointer on a boundary that is a multiple of 'size' */ +LZO_EXTERN(unsigned) __lzo_align_gap(const lzo_voidp p, lzo_uint size); +#define LZO_PTR_ALIGN_UP(p,size) \ + ((p) + (lzo_uint) __lzo_align_gap((const lzo_voidp)(p),(lzo_uint)(size))) + + +/*********************************************************************** +// deprecated macros - only for backward compatibility +************************************************************************/ + +/* deprecated - use 'lzo_bytep' instead of 'lzo_byte *' */ +#define lzo_byte unsigned char +/* deprecated type names */ +#define lzo_int32 lzo_int32_t +#define lzo_uint32 lzo_uint32_t +#define lzo_int32p lzo_int32_t __LZO_MMODEL * +#define lzo_uint32p lzo_uint32_t __LZO_MMODEL * +#define LZO_INT32_MAX LZO_INT32_C(2147483647) +#define LZO_UINT32_MAX LZO_UINT32_C(4294967295) +#if defined(lzo_int64_t) +#define lzo_int64 lzo_int64_t +#define lzo_uint64 lzo_uint64_t +#define lzo_int64p lzo_int64_t __LZO_MMODEL * +#define lzo_uint64p lzo_uint64_t __LZO_MMODEL * +#define LZO_INT64_MAX LZO_INT64_C(9223372036854775807) +#define LZO_UINT64_MAX LZO_UINT64_C(18446744073709551615) +#endif +/* deprecated types */ +typedef union { lzo_bytep a; lzo_uint b; } __lzo_pu_u; +typedef union { lzo_bytep a; lzo_uint32_t b; } __lzo_pu32_u; +/* deprecated defines */ +#if !defined(LZO_SIZEOF_LZO_UINT) +# define LZO_SIZEOF_LZO_UINT LZO_SIZEOF_LZO_INT +#endif + +#if defined(LZO_CFG_COMPAT) + +#define __LZOCONF_H 1 + +#if defined(LZO_ARCH_I086) +# define __LZO_i386 1 +#elif defined(LZO_ARCH_I386) +# define __LZO_i386 1 +#endif + +#if defined(LZO_OS_DOS16) +# define __LZO_DOS 1 +# define __LZO_DOS16 1 +#elif defined(LZO_OS_DOS32) +# define __LZO_DOS 1 +#elif defined(LZO_OS_WIN16) +# define __LZO_WIN 1 +# define __LZO_WIN16 1 +#elif defined(LZO_OS_WIN32) +# define __LZO_WIN 1 +#endif + +#define __LZO_CMODEL /*empty*/ +#define __LZO_DMODEL /*empty*/ +#define __LZO_ENTRY __LZO_CDECL +#define LZO_EXTERN_CDECL LZO_EXTERN +#define LZO_ALIGN LZO_PTR_ALIGN_UP + +#define lzo_compress_asm_t lzo_compress_t +#define lzo_decompress_asm_t lzo_decompress_t + +#endif /* LZO_CFG_COMPAT */ + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* already included */ + + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/lzo/lzodefs.h b/tools/z64compress/src/enc/lzo/lzodefs.h new file mode 100644 index 0000000..c3e2bcf --- /dev/null +++ b/tools/z64compress/src/enc/lzo/lzodefs.h @@ -0,0 +1,3268 @@ +/* lzodefs.h -- architecture, OS and compiler specific defines + + This file is part of the LZO real-time data compression library. + + Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The LZO library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The LZO library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the LZO library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/lzo/ + */ + + +#ifndef __LZODEFS_H_INCLUDED +#define __LZODEFS_H_INCLUDED 1 + +#if defined(__CYGWIN32__) && !defined(__CYGWIN__) +# define __CYGWIN__ __CYGWIN32__ +#endif +#if 1 && defined(__INTERIX) && defined(__GNUC__) && !defined(_ALL_SOURCE) +# define _ALL_SOURCE 1 +#endif +#if defined(__mips__) && defined(__R5900__) +# if !defined(__LONG_MAX__) +# define __LONG_MAX__ 9223372036854775807L +# endif +#endif +#if 0 +#elif !defined(__LZO_LANG_OVERRIDE) +#if (defined(__clang__) || defined(__GNUC__)) && defined(__ASSEMBLER__) +# if (__ASSEMBLER__+0) <= 0 +# error "__ASSEMBLER__" +# else +# define LZO_LANG_ASSEMBLER 1 +# endif +#elif defined(__cplusplus) +# if (__cplusplus+0) <= 0 +# error "__cplusplus" +# elif (__cplusplus < 199711L) +# define LZO_LANG_CXX 1 +# elif defined(_MSC_VER) && defined(_MSVC_LANG) && (_MSVC_LANG+0 >= 201402L) && 1 +# define LZO_LANG_CXX _MSVC_LANG +# else +# define LZO_LANG_CXX __cplusplus +# endif +# define LZO_LANG_CPLUSPLUS LZO_LANG_CXX +#else +# if defined(__STDC_VERSION__) && (__STDC_VERSION__+0 >= 199409L) +# define LZO_LANG_C __STDC_VERSION__ +# else +# define LZO_LANG_C 1 +# endif +#endif +#endif +#if !defined(LZO_CFG_NO_DISABLE_WUNDEF) +#if defined(__ARMCC_VERSION) +# pragma diag_suppress 193 +#elif defined(__clang__) && defined(__clang_minor__) +# pragma clang diagnostic ignored "-Wundef" +#elif defined(__INTEL_COMPILER) +# pragma warning(disable: 193) +#elif defined(__KEIL__) && defined(__C166__) +# pragma warning disable = 322 +#elif defined(__GNUC__) && defined(__GNUC_MINOR__) && !defined(__PATHSCALE__) +# if ((__GNUC__-0) >= 5 || ((__GNUC__-0) == 4 && (__GNUC_MINOR__-0) >= 2)) +# pragma GCC diagnostic ignored "-Wundef" +# endif +#elif defined(_MSC_VER) && !defined(__clang__) && !defined(__INTEL_COMPILER) && !defined(__MWERKS__) +# if ((_MSC_VER-0) >= 1300) +# pragma warning(disable: 4668) +# endif +#endif +#endif +#if 0 && defined(__POCC__) && defined(_WIN32) +# if (__POCC__ >= 400) +# pragma warn(disable: 2216) +# endif +#endif +#if 0 && defined(__WATCOMC__) +# if (__WATCOMC__ >= 1050) && (__WATCOMC__ < 1060) +# pragma warning 203 9 +# endif +#endif +#if defined(__BORLANDC__) && defined(__MSDOS__) && !defined(__FLAT__) +# pragma option -h +#endif +#if !(LZO_CFG_NO_DISABLE_WCRTNONSTDC) +#ifndef _CRT_NONSTDC_NO_DEPRECATE +#define _CRT_NONSTDC_NO_DEPRECATE 1 +#endif +#ifndef _CRT_NONSTDC_NO_WARNINGS +#define _CRT_NONSTDC_NO_WARNINGS 1 +#endif +#ifndef _CRT_SECURE_NO_DEPRECATE +#define _CRT_SECURE_NO_DEPRECATE 1 +#endif +#ifndef _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_WARNINGS 1 +#endif +#endif +#if 0 +#define LZO_0xffffUL 0xfffful +#define LZO_0xffffffffUL 0xfffffffful +#else +#define LZO_0xffffUL 65535ul +#define LZO_0xffffffffUL 4294967295ul +#endif +#define LZO_0xffffL LZO_0xffffUL +#define LZO_0xffffffffL LZO_0xffffffffUL +#if (LZO_0xffffL == LZO_0xffffffffL) +# error "your preprocessor is broken 1" +#endif +#if (16ul * 16384ul != 262144ul) +# error "your preprocessor is broken 2" +#endif +#if 0 +#if (32767 >= 4294967295ul) +# error "your preprocessor is broken 3" +#endif +#if (65535u >= 4294967295ul) +# error "your preprocessor is broken 4" +#endif +#endif +#if defined(__COUNTER__) +# ifndef LZO_CFG_USE_COUNTER +# define LZO_CFG_USE_COUNTER 1 +# endif +#else +# undef LZO_CFG_USE_COUNTER +#endif +#if (UINT_MAX == LZO_0xffffL) +#if defined(__ZTC__) && defined(__I86__) && !defined(__OS2__) +# if !defined(MSDOS) +# define MSDOS 1 +# endif +# if !defined(_MSDOS) +# define _MSDOS 1 +# endif +#elif 0 && defined(__VERSION) && defined(MB_LEN_MAX) +# if (__VERSION == 520) && (MB_LEN_MAX == 1) +# if !defined(__AZTEC_C__) +# define __AZTEC_C__ __VERSION +# endif +# if !defined(__DOS__) +# define __DOS__ 1 +# endif +# endif +#endif +#endif +#if (UINT_MAX == LZO_0xffffL) +#if defined(_MSC_VER) && defined(M_I86HM) +# define ptrdiff_t long +# define _PTRDIFF_T_DEFINED 1 +#endif +#endif +#if (UINT_MAX == LZO_0xffffL) +# undef __LZO_RENAME_A +# undef __LZO_RENAME_B +# if defined(__AZTEC_C__) && defined(__DOS__) +# define __LZO_RENAME_A 1 +# elif defined(_MSC_VER) && defined(MSDOS) +# if (_MSC_VER < 600) +# define __LZO_RENAME_A 1 +# elif (_MSC_VER < 700) +# define __LZO_RENAME_B 1 +# endif +# elif defined(__TSC__) && defined(__OS2__) +# define __LZO_RENAME_A 1 +# elif defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410) +# define __LZO_RENAME_A 1 +# elif defined(__PACIFIC__) && defined(DOS) +# if !defined(__far) +# define __far far +# endif +# if !defined(__near) +# define __near near +# endif +# endif +# if defined(__LZO_RENAME_A) +# if !defined(__cdecl) +# define __cdecl cdecl +# endif +# if !defined(__far) +# define __far far +# endif +# if !defined(__huge) +# define __huge huge +# endif +# if !defined(__near) +# define __near near +# endif +# if !defined(__pascal) +# define __pascal pascal +# endif +# if !defined(__huge) +# define __huge huge +# endif +# elif defined(__LZO_RENAME_B) +# if !defined(__cdecl) +# define __cdecl _cdecl +# endif +# if !defined(__far) +# define __far _far +# endif +# if !defined(__huge) +# define __huge _huge +# endif +# if !defined(__near) +# define __near _near +# endif +# if !defined(__pascal) +# define __pascal _pascal +# endif +# elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) +# if !defined(__cdecl) +# define __cdecl cdecl +# endif +# if !defined(__pascal) +# define __pascal pascal +# endif +# endif +# undef __LZO_RENAME_A +# undef __LZO_RENAME_B +#endif +#if (UINT_MAX == LZO_0xffffL) +#if defined(__AZTEC_C__) && defined(__DOS__) +# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 +#elif defined(_MSC_VER) && defined(MSDOS) +# if (_MSC_VER < 600) +# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 +# endif +# if (_MSC_VER < 700) +# define LZO_BROKEN_INTEGRAL_PROMOTION 1 +# define LZO_BROKEN_SIZEOF 1 +# endif +#elif defined(__PACIFIC__) && defined(DOS) +# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 +#elif defined(__TURBOC__) && defined(__MSDOS__) +# if (__TURBOC__ < 0x0150) +# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 +# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 +# define LZO_BROKEN_INTEGRAL_PROMOTION 1 +# endif +# if (__TURBOC__ < 0x0200) +# define LZO_BROKEN_SIZEOF 1 +# endif +# if (__TURBOC__ < 0x0400) && defined(__cplusplus) +# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 +# endif +#elif (defined(__PUREC__) || defined(__TURBOC__)) && defined(__TOS__) +# define LZO_BROKEN_CDECL_ALT_SYNTAX 1 +# define LZO_BROKEN_SIZEOF 1 +#endif +#endif +#if defined(__WATCOMC__) && (__WATCOMC__ < 900) +# define LZO_BROKEN_INTEGRAL_CONSTANTS 1 +#endif +#if defined(_CRAY) && defined(_CRAY1) +# define LZO_BROKEN_SIGNED_RIGHT_SHIFT 1 +#endif +#define LZO_PP_STRINGIZE(x) #x +#define LZO_PP_MACRO_EXPAND(x) LZO_PP_STRINGIZE(x) +#define LZO_PP_CONCAT0() /*empty*/ +#define LZO_PP_CONCAT1(a) a +#define LZO_PP_CONCAT2(a,b) a ## b +#define LZO_PP_CONCAT3(a,b,c) a ## b ## c +#define LZO_PP_CONCAT4(a,b,c,d) a ## b ## c ## d +#define LZO_PP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e +#define LZO_PP_CONCAT6(a,b,c,d,e,f) a ## b ## c ## d ## e ## f +#define LZO_PP_CONCAT7(a,b,c,d,e,f,g) a ## b ## c ## d ## e ## f ## g +#define LZO_PP_ECONCAT0() LZO_PP_CONCAT0() +#define LZO_PP_ECONCAT1(a) LZO_PP_CONCAT1(a) +#define LZO_PP_ECONCAT2(a,b) LZO_PP_CONCAT2(a,b) +#define LZO_PP_ECONCAT3(a,b,c) LZO_PP_CONCAT3(a,b,c) +#define LZO_PP_ECONCAT4(a,b,c,d) LZO_PP_CONCAT4(a,b,c,d) +#define LZO_PP_ECONCAT5(a,b,c,d,e) LZO_PP_CONCAT5(a,b,c,d,e) +#define LZO_PP_ECONCAT6(a,b,c,d,e,f) LZO_PP_CONCAT6(a,b,c,d,e,f) +#define LZO_PP_ECONCAT7(a,b,c,d,e,f,g) LZO_PP_CONCAT7(a,b,c,d,e,f,g) +#define LZO_PP_EMPTY /*empty*/ +#define LZO_PP_EMPTY0() /*empty*/ +#define LZO_PP_EMPTY1(a) /*empty*/ +#define LZO_PP_EMPTY2(a,b) /*empty*/ +#define LZO_PP_EMPTY3(a,b,c) /*empty*/ +#define LZO_PP_EMPTY4(a,b,c,d) /*empty*/ +#define LZO_PP_EMPTY5(a,b,c,d,e) /*empty*/ +#define LZO_PP_EMPTY6(a,b,c,d,e,f) /*empty*/ +#define LZO_PP_EMPTY7(a,b,c,d,e,f,g) /*empty*/ +#if 1 +#define LZO_CPP_STRINGIZE(x) #x +#define LZO_CPP_MACRO_EXPAND(x) LZO_CPP_STRINGIZE(x) +#define LZO_CPP_CONCAT2(a,b) a ## b +#define LZO_CPP_CONCAT3(a,b,c) a ## b ## c +#define LZO_CPP_CONCAT4(a,b,c,d) a ## b ## c ## d +#define LZO_CPP_CONCAT5(a,b,c,d,e) a ## b ## c ## d ## e +#define LZO_CPP_CONCAT6(a,b,c,d,e,f) a ## b ## c ## d ## e ## f +#define LZO_CPP_CONCAT7(a,b,c,d,e,f,g) a ## b ## c ## d ## e ## f ## g +#define LZO_CPP_ECONCAT2(a,b) LZO_CPP_CONCAT2(a,b) +#define LZO_CPP_ECONCAT3(a,b,c) LZO_CPP_CONCAT3(a,b,c) +#define LZO_CPP_ECONCAT4(a,b,c,d) LZO_CPP_CONCAT4(a,b,c,d) +#define LZO_CPP_ECONCAT5(a,b,c,d,e) LZO_CPP_CONCAT5(a,b,c,d,e) +#define LZO_CPP_ECONCAT6(a,b,c,d,e,f) LZO_CPP_CONCAT6(a,b,c,d,e,f) +#define LZO_CPP_ECONCAT7(a,b,c,d,e,f,g) LZO_CPP_CONCAT7(a,b,c,d,e,f,g) +#endif +#define __LZO_MASK_GEN(o,b) (((((o) << ((b)-((b)!=0))) - (o)) << 1) + (o)*((b)!=0)) +#if 1 && defined(__cplusplus) +# if !defined(__STDC_CONSTANT_MACROS) +# define __STDC_CONSTANT_MACROS 1 +# endif +# if !defined(__STDC_LIMIT_MACROS) +# define __STDC_LIMIT_MACROS 1 +# endif +#endif +#if defined(__cplusplus) +# define LZO_EXTERN_C extern "C" +# define LZO_EXTERN_C_BEGIN extern "C" { +# define LZO_EXTERN_C_END } +#else +# define LZO_EXTERN_C extern +# define LZO_EXTERN_C_BEGIN /*empty*/ +# define LZO_EXTERN_C_END /*empty*/ +#endif +#if !defined(__LZO_OS_OVERRIDE) +#if (LZO_OS_FREESTANDING) +# define LZO_INFO_OS "freestanding" +#elif (LZO_OS_EMBEDDED) +# define LZO_INFO_OS "embedded" +#elif 1 && defined(__IAR_SYSTEMS_ICC__) +# define LZO_OS_EMBEDDED 1 +# define LZO_INFO_OS "embedded" +#elif defined(__CYGWIN__) && defined(__GNUC__) +# define LZO_OS_CYGWIN 1 +# define LZO_INFO_OS "cygwin" +#elif defined(__EMX__) && defined(__GNUC__) +# define LZO_OS_EMX 1 +# define LZO_INFO_OS "emx" +#elif defined(__BEOS__) +# define LZO_OS_BEOS 1 +# define LZO_INFO_OS "beos" +#elif defined(__Lynx__) +# define LZO_OS_LYNXOS 1 +# define LZO_INFO_OS "lynxos" +#elif defined(__OS400__) +# define LZO_OS_OS400 1 +# define LZO_INFO_OS "os400" +#elif defined(__QNX__) +# define LZO_OS_QNX 1 +# define LZO_INFO_OS "qnx" +#elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460) +# define LZO_OS_DOS32 1 +# define LZO_INFO_OS "dos32" +#elif defined(__BORLANDC__) && defined(__DPMI16__) +# define LZO_OS_DOS16 1 +# define LZO_INFO_OS "dos16" +#elif defined(__ZTC__) && defined(DOS386) +# define LZO_OS_DOS32 1 +# define LZO_INFO_OS "dos32" +#elif defined(__OS2__) || defined(__OS2V2__) +# if (UINT_MAX == LZO_0xffffL) +# define LZO_OS_OS216 1 +# define LZO_INFO_OS "os216" +# elif (UINT_MAX == LZO_0xffffffffL) +# define LZO_OS_OS2 1 +# define LZO_INFO_OS "os2" +# else +# error "check your limits.h header" +# endif +#elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64) +# define LZO_OS_WIN64 1 +# define LZO_INFO_OS "win64" +#elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__) +# define LZO_OS_WIN32 1 +# define LZO_INFO_OS "win32" +#elif defined(__MWERKS__) && defined(__INTEL__) +# define LZO_OS_WIN32 1 +# define LZO_INFO_OS "win32" +#elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows) +# if (UINT_MAX == LZO_0xffffL) +# define LZO_OS_WIN16 1 +# define LZO_INFO_OS "win16" +# elif (UINT_MAX == LZO_0xffffffffL) +# define LZO_OS_WIN32 1 +# define LZO_INFO_OS "win32" +# else +# error "check your limits.h header" +# endif +#elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS)) +# if (UINT_MAX == LZO_0xffffL) +# define LZO_OS_DOS16 1 +# define LZO_INFO_OS "dos16" +# elif (UINT_MAX == LZO_0xffffffffL) +# define LZO_OS_DOS32 1 +# define LZO_INFO_OS "dos32" +# else +# error "check your limits.h header" +# endif +#elif defined(__WATCOMC__) +# if defined(__NT__) && (UINT_MAX == LZO_0xffffL) +# define LZO_OS_DOS16 1 +# define LZO_INFO_OS "dos16" +# elif defined(__NT__) && (__WATCOMC__ < 1100) +# define LZO_OS_WIN32 1 +# define LZO_INFO_OS "win32" +# elif defined(__linux__) || defined(__LINUX__) +# define LZO_OS_POSIX 1 +# define LZO_INFO_OS "posix" +# else +# error "please specify a target using the -bt compiler option" +# endif +#elif defined(__palmos__) +# define LZO_OS_PALMOS 1 +# define LZO_INFO_OS "palmos" +#elif defined(__TOS__) || defined(__atarist__) +# define LZO_OS_TOS 1 +# define LZO_INFO_OS "tos" +#elif defined(macintosh) && !defined(__arm__) && !defined(__i386__) && !defined(__ppc__) && !defined(__x64_64__) +# define LZO_OS_MACCLASSIC 1 +# define LZO_INFO_OS "macclassic" +#elif defined(__VMS) +# define LZO_OS_VMS 1 +# define LZO_INFO_OS "vms" +#elif (defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__) +# define LZO_OS_CONSOLE 1 +# define LZO_OS_CONSOLE_PS2 1 +# define LZO_INFO_OS "console" +# define LZO_INFO_OS_CONSOLE "ps2" +#elif defined(__mips__) && defined(__psp__) +# define LZO_OS_CONSOLE 1 +# define LZO_OS_CONSOLE_PSP 1 +# define LZO_INFO_OS "console" +# define LZO_INFO_OS_CONSOLE "psp" +#else +# define LZO_OS_POSIX 1 +# define LZO_INFO_OS "posix" +#endif +#if (LZO_OS_POSIX) +# if defined(_AIX) || defined(__AIX__) || defined(__aix__) +# define LZO_OS_POSIX_AIX 1 +# define LZO_INFO_OS_POSIX "aix" +# elif defined(__FreeBSD__) +# define LZO_OS_POSIX_FREEBSD 1 +# define LZO_INFO_OS_POSIX "freebsd" +# elif defined(__hpux__) || defined(__hpux) +# define LZO_OS_POSIX_HPUX 1 +# define LZO_INFO_OS_POSIX "hpux" +# elif defined(__INTERIX) +# define LZO_OS_POSIX_INTERIX 1 +# define LZO_INFO_OS_POSIX "interix" +# elif defined(__IRIX__) || defined(__irix__) +# define LZO_OS_POSIX_IRIX 1 +# define LZO_INFO_OS_POSIX "irix" +# elif defined(__linux__) || defined(__linux) || defined(__LINUX__) +# define LZO_OS_POSIX_LINUX 1 +# define LZO_INFO_OS_POSIX "linux" +# elif defined(__APPLE__) && defined(__MACH__) +# if ((__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__-0) >= 20000) +# define LZO_OS_POSIX_DARWIN 1040 +# define LZO_INFO_OS_POSIX "darwin_iphone" +# elif ((__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__-0) >= 1040) +# define LZO_OS_POSIX_DARWIN __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ +# define LZO_INFO_OS_POSIX "darwin" +# else +# define LZO_OS_POSIX_DARWIN 1 +# define LZO_INFO_OS_POSIX "darwin" +# endif +# define LZO_OS_POSIX_MACOSX LZO_OS_POSIX_DARWIN +# elif defined(__minix__) || defined(__minix) +# define LZO_OS_POSIX_MINIX 1 +# define LZO_INFO_OS_POSIX "minix" +# elif defined(__NetBSD__) +# define LZO_OS_POSIX_NETBSD 1 +# define LZO_INFO_OS_POSIX "netbsd" +# elif defined(__OpenBSD__) +# define LZO_OS_POSIX_OPENBSD 1 +# define LZO_INFO_OS_POSIX "openbsd" +# elif defined(__osf__) +# define LZO_OS_POSIX_OSF 1 +# define LZO_INFO_OS_POSIX "osf" +# elif defined(__solaris__) || defined(__sun) +# if defined(__SVR4) || defined(__svr4__) +# define LZO_OS_POSIX_SOLARIS 1 +# define LZO_INFO_OS_POSIX "solaris" +# else +# define LZO_OS_POSIX_SUNOS 1 +# define LZO_INFO_OS_POSIX "sunos" +# endif +# elif defined(__ultrix__) || defined(__ultrix) +# define LZO_OS_POSIX_ULTRIX 1 +# define LZO_INFO_OS_POSIX "ultrix" +# elif defined(_UNICOS) +# define LZO_OS_POSIX_UNICOS 1 +# define LZO_INFO_OS_POSIX "unicos" +# else +# define LZO_OS_POSIX_UNKNOWN 1 +# define LZO_INFO_OS_POSIX "unknown" +# endif +#endif +#endif +#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) +# if (UINT_MAX != LZO_0xffffL) +# error "unexpected configuration - check your compiler defines" +# endif +# if (ULONG_MAX != LZO_0xffffffffL) +# error "unexpected configuration - check your compiler defines" +# endif +#endif +#if (LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_WIN32 || LZO_OS_WIN64) +# if (UINT_MAX != LZO_0xffffffffL) +# error "unexpected configuration - check your compiler defines" +# endif +# if (ULONG_MAX != LZO_0xffffffffL) +# error "unexpected configuration - check your compiler defines" +# endif +#endif +#if defined(CIL) && defined(_GNUCC) && defined(__GNUC__) +# define LZO_CC_CILLY 1 +# define LZO_INFO_CC "Cilly" +# if defined(__CILLY__) +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CILLY__) +# else +# define LZO_INFO_CCVER "unknown" +# endif +#elif 0 && defined(SDCC) && defined(__VERSION__) && !defined(__GNUC__) +# define LZO_CC_SDCC 1 +# define LZO_INFO_CC "sdcc" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(SDCC) +#elif defined(__PATHSCALE__) && defined(__PATHCC_PATCHLEVEL__) +# define LZO_CC_PATHSCALE (__PATHCC__ * 0x10000L + (__PATHCC_MINOR__-0) * 0x100 + (__PATHCC_PATCHLEVEL__-0)) +# define LZO_INFO_CC "Pathscale C" +# define LZO_INFO_CCVER __PATHSCALE__ +# if defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) +# define LZO_CC_PATHSCALE_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0)) +# endif +#elif defined(__INTEL_COMPILER) && ((__INTEL_COMPILER-0) > 0) +# define LZO_CC_INTELC __INTEL_COMPILER +# define LZO_INFO_CC "Intel C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__INTEL_COMPILER) +# if defined(_MSC_VER) && ((_MSC_VER-0) > 0) +# define LZO_CC_INTELC_MSC _MSC_VER +# elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) +# define LZO_CC_INTELC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0)) +# endif +#elif defined(__POCC__) && defined(_WIN32) +# define LZO_CC_PELLESC 1 +# define LZO_INFO_CC "Pelles C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__POCC__) +#elif defined(__ARMCC_VERSION) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) +# if defined(__GNUC_PATCHLEVEL__) +# define LZO_CC_ARMCC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0)) +# else +# define LZO_CC_ARMCC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100) +# endif +# define LZO_CC_ARMCC __ARMCC_VERSION +# define LZO_INFO_CC "ARM C Compiler" +# define LZO_INFO_CCVER __VERSION__ +#elif defined(__clang__) && defined(__c2__) && defined(__c2_version__) && defined(_MSC_VER) +# define LZO_CC_CLANG (__clang_major__ * 0x10000L + (__clang_minor__-0) * 0x100 + (__clang_patchlevel__-0)) +# define LZO_CC_CLANG_C2 _MSC_VER +# define LZO_CC_CLANG_VENDOR_MICROSOFT 1 +# define LZO_INFO_CC "clang/c2" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__c2_version__) +#elif defined(__clang__) && defined(__llvm__) && defined(__VERSION__) +# if defined(__clang_major__) && defined(__clang_minor__) && defined(__clang_patchlevel__) +# define LZO_CC_CLANG (__clang_major__ * 0x10000L + (__clang_minor__-0) * 0x100 + (__clang_patchlevel__-0)) +# else +# define LZO_CC_CLANG 0x010000L +# endif +# if defined(_MSC_VER) && ((_MSC_VER-0) > 0) +# define LZO_CC_CLANG_MSC _MSC_VER +# elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) +# define LZO_CC_CLANG_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0)) +# endif +# if defined(__APPLE_CC__) +# define LZO_CC_CLANG_VENDOR_APPLE 1 +# define LZO_INFO_CC "clang/apple" +# else +# define LZO_CC_CLANG_VENDOR_LLVM 1 +# define LZO_INFO_CC "clang" +# endif +# if defined(__clang_version__) +# define LZO_INFO_CCVER __clang_version__ +# else +# define LZO_INFO_CCVER __VERSION__ +# endif +#elif defined(__llvm__) && defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) +# if defined(__GNUC_PATCHLEVEL__) +# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0)) +# else +# define LZO_CC_LLVM_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100) +# endif +# define LZO_CC_LLVM LZO_CC_LLVM_GNUC +# define LZO_INFO_CC "llvm-gcc" +# define LZO_INFO_CCVER __VERSION__ +#elif defined(__ACK__) && defined(_ACK) +# define LZO_CC_ACK 1 +# define LZO_INFO_CC "Amsterdam Compiler Kit C" +# define LZO_INFO_CCVER "unknown" +#elif defined(__ARMCC_VERSION) && !defined(__GNUC__) +# define LZO_CC_ARMCC __ARMCC_VERSION +# define LZO_CC_ARMCC_ARMCC __ARMCC_VERSION +# define LZO_INFO_CC "ARM C Compiler" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ARMCC_VERSION) +#elif defined(__AZTEC_C__) +# define LZO_CC_AZTECC 1 +# define LZO_INFO_CC "Aztec C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__AZTEC_C__) +#elif defined(__CODEGEARC__) +# define LZO_CC_CODEGEARC 1 +# define LZO_INFO_CC "CodeGear C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__CODEGEARC__) +#elif defined(__BORLANDC__) +# define LZO_CC_BORLANDC 1 +# define LZO_INFO_CC "Borland C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__BORLANDC__) +#elif defined(_CRAYC) && defined(_RELEASE) +# define LZO_CC_CRAYC 1 +# define LZO_INFO_CC "Cray C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_RELEASE) +#elif defined(__DMC__) && defined(__SC__) +# define LZO_CC_DMC 1 +# define LZO_INFO_CC "Digital Mars C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DMC__) +#elif defined(__DECC) +# define LZO_CC_DECC 1 +# define LZO_INFO_CC "DEC C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__DECC) +#elif (defined(__ghs) || defined(__ghs__)) && defined(__GHS_VERSION_NUMBER) && ((__GHS_VERSION_NUMBER-0) > 0) +# define LZO_CC_GHS 1 +# define LZO_INFO_CC "Green Hills C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__GHS_VERSION_NUMBER) +# if defined(_MSC_VER) && ((_MSC_VER-0) > 0) +# define LZO_CC_GHS_MSC _MSC_VER +# elif defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__VERSION__) +# define LZO_CC_GHS_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0)) +# endif +#elif defined(__HIGHC__) +# define LZO_CC_HIGHC 1 +# define LZO_INFO_CC "MetaWare High C" +# define LZO_INFO_CCVER "unknown" +#elif defined(__HP_aCC) && ((__HP_aCC-0) > 0) +# define LZO_CC_HPACC __HP_aCC +# define LZO_INFO_CC "HP aCC" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__HP_aCC) +#elif defined(__IAR_SYSTEMS_ICC__) +# define LZO_CC_IARC 1 +# define LZO_INFO_CC "IAR C" +# if defined(__VER__) +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__VER__) +# else +# define LZO_INFO_CCVER "unknown" +# endif +#elif defined(__IBMC__) && ((__IBMC__-0) > 0) +# define LZO_CC_IBMC __IBMC__ +# define LZO_INFO_CC "IBM C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMC__) +#elif defined(__IBMCPP__) && ((__IBMCPP__-0) > 0) +# define LZO_CC_IBMC __IBMCPP__ +# define LZO_INFO_CC "IBM C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__IBMCPP__) +#elif defined(__KEIL__) && defined(__C166__) +# define LZO_CC_KEILC 1 +# define LZO_INFO_CC "Keil C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__C166__) +#elif defined(__LCC__) && defined(_WIN32) && defined(__LCCOPTIMLEVEL) +# define LZO_CC_LCCWIN32 1 +# define LZO_INFO_CC "lcc-win32" +# define LZO_INFO_CCVER "unknown" +#elif defined(__LCC__) +# define LZO_CC_LCC 1 +# define LZO_INFO_CC "lcc" +# if defined(__LCC_VERSION__) +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__LCC_VERSION__) +# else +# define LZO_INFO_CCVER "unknown" +# endif +#elif defined(__MWERKS__) && ((__MWERKS__-0) > 0) +# define LZO_CC_MWERKS __MWERKS__ +# define LZO_INFO_CC "Metrowerks C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__MWERKS__) +#elif (defined(__NDPC__) || defined(__NDPX__)) && defined(__i386) +# define LZO_CC_NDPC 1 +# define LZO_INFO_CC "Microway NDP C" +# define LZO_INFO_CCVER "unknown" +#elif defined(__PACIFIC__) +# define LZO_CC_PACIFICC 1 +# define LZO_INFO_CC "Pacific C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PACIFIC__) +#elif defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define LZO_CC_PGI (__PGIC__ * 0x10000L + (__PGIC_MINOR__-0) * 0x100 + (__PGIC_PATCHLEVEL__-0)) +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PGIC__) "." LZO_PP_MACRO_EXPAND(__PGIC_MINOR__) "." LZO_PP_MACRO_EXPAND(__PGIC_PATCHLEVEL__) +# else +# define LZO_CC_PGI (__PGIC__ * 0x10000L + (__PGIC_MINOR__-0) * 0x100) +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PGIC__) "." LZO_PP_MACRO_EXPAND(__PGIC_MINOR__) ".0" +# endif +# define LZO_INFO_CC "Portland Group PGI C" +#elif defined(__PGI) && (defined(__linux__) || defined(__WIN32__)) +# define LZO_CC_PGI 1 +# define LZO_INFO_CC "Portland Group PGI C" +# define LZO_INFO_CCVER "unknown" +#elif defined(__PUREC__) && defined(__TOS__) +# define LZO_CC_PUREC 1 +# define LZO_INFO_CC "Pure C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__PUREC__) +#elif defined(__SC__) && defined(__ZTC__) +# define LZO_CC_SYMANTECC 1 +# define LZO_INFO_CC "Symantec C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SC__) +#elif defined(__SUNPRO_C) +# define LZO_INFO_CC "SunPro C" +# if ((__SUNPRO_C-0) > 0) +# define LZO_CC_SUNPROC __SUNPRO_C +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_C) +# else +# define LZO_CC_SUNPROC 1 +# define LZO_INFO_CCVER "unknown" +# endif +#elif defined(__SUNPRO_CC) +# define LZO_INFO_CC "SunPro C" +# if ((__SUNPRO_CC-0) > 0) +# define LZO_CC_SUNPROC __SUNPRO_CC +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__SUNPRO_CC) +# else +# define LZO_CC_SUNPROC 1 +# define LZO_INFO_CCVER "unknown" +# endif +#elif defined(__TINYC__) +# define LZO_CC_TINYC 1 +# define LZO_INFO_CC "Tiny C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TINYC__) +#elif defined(__TSC__) +# define LZO_CC_TOPSPEEDC 1 +# define LZO_INFO_CC "TopSpeed C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TSC__) +#elif defined(__WATCOMC__) +# define LZO_CC_WATCOMC 1 +# define LZO_INFO_CC "Watcom C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__WATCOMC__) +#elif defined(__TURBOC__) +# define LZO_CC_TURBOC 1 +# define LZO_INFO_CC "Turbo C" +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__TURBOC__) +#elif defined(__ZTC__) +# define LZO_CC_ZORTECHC 1 +# define LZO_INFO_CC "Zortech C" +# if ((__ZTC__-0) == 0x310) +# define LZO_INFO_CCVER "0x310" +# else +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(__ZTC__) +# endif +#elif defined(__GNUC__) && defined(__VERSION__) +# if defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__) +# define LZO_CC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100 + (__GNUC_PATCHLEVEL__-0)) +# elif defined(__GNUC_MINOR__) +# define LZO_CC_GNUC (__GNUC__ * 0x10000L + (__GNUC_MINOR__-0) * 0x100) +# else +# define LZO_CC_GNUC (__GNUC__ * 0x10000L) +# endif +# define LZO_INFO_CC "gcc" +# define LZO_INFO_CCVER __VERSION__ +#elif defined(_MSC_VER) && ((_MSC_VER-0) > 0) +# define LZO_CC_MSC _MSC_VER +# define LZO_INFO_CC "Microsoft C" +# if defined(_MSC_FULL_VER) +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) "." LZO_PP_MACRO_EXPAND(_MSC_FULL_VER) +# else +# define LZO_INFO_CCVER LZO_PP_MACRO_EXPAND(_MSC_VER) +# endif +#else +# define LZO_CC_UNKNOWN 1 +# define LZO_INFO_CC "unknown" +# define LZO_INFO_CCVER "unknown" +#endif +#if (LZO_CC_GNUC) && defined(__OPEN64__) +# if defined(__OPENCC__) && defined(__OPENCC_MINOR__) && defined(__OPENCC_PATCHLEVEL__) +# define LZO_CC_OPEN64 (__OPENCC__ * 0x10000L + (__OPENCC_MINOR__-0) * 0x100 + (__OPENCC_PATCHLEVEL__-0)) +# define LZO_CC_OPEN64_GNUC LZO_CC_GNUC +# endif +#endif +#if (LZO_CC_GNUC) && defined(__PCC__) +# if defined(__PCC__) && defined(__PCC_MINOR__) && defined(__PCC_MINORMINOR__) +# define LZO_CC_PCC (__PCC__ * 0x10000L + (__PCC_MINOR__-0) * 0x100 + (__PCC_MINORMINOR__-0)) +# define LZO_CC_PCC_GNUC LZO_CC_GNUC +# endif +#endif +#if 0 && (LZO_CC_MSC && (_MSC_VER >= 1200)) && !defined(_MSC_FULL_VER) +# error "LZO_CC_MSC: _MSC_FULL_VER is not defined" +#endif +#if !defined(__LZO_ARCH_OVERRIDE) && !(LZO_ARCH_GENERIC) && defined(_CRAY) +# if (UINT_MAX > LZO_0xffffffffL) && defined(_CRAY) +# if defined(_CRAYMPP) || defined(_CRAYT3D) || defined(_CRAYT3E) +# define LZO_ARCH_CRAY_MPP 1 +# elif defined(_CRAY1) +# define LZO_ARCH_CRAY_PVP 1 +# endif +# endif +#endif +#if !defined(__LZO_ARCH_OVERRIDE) +#if (LZO_ARCH_GENERIC) +# define LZO_INFO_ARCH "generic" +#elif (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) +# define LZO_ARCH_I086 1 +# define LZO_INFO_ARCH "i086" +#elif defined(__aarch64__) || defined(_M_ARM64) +# define LZO_ARCH_ARM64 1 +# define LZO_INFO_ARCH "arm64" +#elif defined(__alpha__) || defined(__alpha) || defined(_M_ALPHA) +# define LZO_ARCH_ALPHA 1 +# define LZO_INFO_ARCH "alpha" +#elif (LZO_ARCH_CRAY_MPP) && (defined(_CRAYT3D) || defined(_CRAYT3E)) +# define LZO_ARCH_ALPHA 1 +# define LZO_INFO_ARCH "alpha" +#elif defined(__amd64__) || defined(__x86_64__) || defined(_M_AMD64) +# define LZO_ARCH_AMD64 1 +# define LZO_INFO_ARCH "amd64" +#elif defined(__arm__) || defined(_M_ARM) +# define LZO_ARCH_ARM 1 +# define LZO_INFO_ARCH "arm" +#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCARM__) +# define LZO_ARCH_ARM 1 +# define LZO_INFO_ARCH "arm" +#elif (UINT_MAX <= LZO_0xffffL) && defined(__AVR__) +# define LZO_ARCH_AVR 1 +# define LZO_INFO_ARCH "avr" +#elif defined(__avr32__) || defined(__AVR32__) +# define LZO_ARCH_AVR32 1 +# define LZO_INFO_ARCH "avr32" +#elif defined(__bfin__) +# define LZO_ARCH_BLACKFIN 1 +# define LZO_INFO_ARCH "blackfin" +#elif (UINT_MAX == LZO_0xffffL) && defined(__C166__) +# define LZO_ARCH_C166 1 +# define LZO_INFO_ARCH "c166" +#elif defined(__cris__) +# define LZO_ARCH_CRIS 1 +# define LZO_INFO_ARCH "cris" +#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCEZ80__) +# define LZO_ARCH_EZ80 1 +# define LZO_INFO_ARCH "ez80" +#elif defined(__H8300__) || defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) +# define LZO_ARCH_H8300 1 +# define LZO_INFO_ARCH "h8300" +#elif defined(__hppa__) || defined(__hppa) +# define LZO_ARCH_HPPA 1 +# define LZO_INFO_ARCH "hppa" +#elif defined(__386__) || defined(__i386__) || defined(__i386) || defined(_M_IX86) || defined(_M_I386) +# define LZO_ARCH_I386 1 +# define LZO_ARCH_IA32 1 +# define LZO_INFO_ARCH "i386" +#elif (LZO_CC_ZORTECHC && defined(__I86__)) +# define LZO_ARCH_I386 1 +# define LZO_ARCH_IA32 1 +# define LZO_INFO_ARCH "i386" +#elif (LZO_OS_DOS32 && LZO_CC_HIGHC) && defined(_I386) +# define LZO_ARCH_I386 1 +# define LZO_ARCH_IA32 1 +# define LZO_INFO_ARCH "i386" +#elif defined(__ia64__) || defined(__ia64) || defined(_M_IA64) +# define LZO_ARCH_IA64 1 +# define LZO_INFO_ARCH "ia64" +#elif (UINT_MAX == LZO_0xffffL) && defined(__m32c__) +# define LZO_ARCH_M16C 1 +# define LZO_INFO_ARCH "m16c" +#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICCM16C__) +# define LZO_ARCH_M16C 1 +# define LZO_INFO_ARCH "m16c" +#elif defined(__m32r__) +# define LZO_ARCH_M32R 1 +# define LZO_INFO_ARCH "m32r" +#elif (LZO_OS_TOS) || defined(__m68k__) || defined(__m68000__) || defined(__mc68000__) || defined(__mc68020__) || defined(_M_M68K) +# define LZO_ARCH_M68K 1 +# define LZO_INFO_ARCH "m68k" +#elif (UINT_MAX == LZO_0xffffL) && defined(__C251__) +# define LZO_ARCH_MCS251 1 +# define LZO_INFO_ARCH "mcs251" +#elif (UINT_MAX == LZO_0xffffL) && defined(__C51__) +# define LZO_ARCH_MCS51 1 +# define LZO_INFO_ARCH "mcs51" +#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC8051__) +# define LZO_ARCH_MCS51 1 +# define LZO_INFO_ARCH "mcs51" +#elif defined(__mips__) || defined(__mips) || defined(_MIPS_ARCH) || defined(_M_MRX000) +# define LZO_ARCH_MIPS 1 +# define LZO_INFO_ARCH "mips" +#elif (UINT_MAX == LZO_0xffffL) && defined(__MSP430__) +# define LZO_ARCH_MSP430 1 +# define LZO_INFO_ARCH "msp430" +#elif defined(__IAR_SYSTEMS_ICC__) && defined(__ICC430__) +# define LZO_ARCH_MSP430 1 +# define LZO_INFO_ARCH "msp430" +#elif defined(__powerpc__) || defined(__powerpc) || defined(__ppc__) || defined(__PPC__) || defined(_M_PPC) || defined(_ARCH_PPC) || defined(_ARCH_PWR) +# define LZO_ARCH_POWERPC 1 +# define LZO_INFO_ARCH "powerpc" +#elif defined(__powerpc64__) || defined(__powerpc64) || defined(__ppc64__) || defined(__PPC64__) +# define LZO_ARCH_POWERPC 1 +# define LZO_INFO_ARCH "powerpc" +#elif defined(__powerpc64le__) || defined(__powerpc64le) || defined(__ppc64le__) || defined(__PPC64LE__) +# define LZO_ARCH_POWERPC 1 +# define LZO_INFO_ARCH "powerpc" +#elif defined(__riscv) +# define LZO_ARCH_RISCV 1 +# define LZO_INFO_ARCH "riscv" +#elif defined(__s390__) || defined(__s390) || defined(__s390x__) || defined(__s390x) +# define LZO_ARCH_S390 1 +# define LZO_INFO_ARCH "s390" +#elif defined(__sh__) || defined(_M_SH) +# define LZO_ARCH_SH 1 +# define LZO_INFO_ARCH "sh" +#elif defined(__sparc__) || defined(__sparc) || defined(__sparcv8) +# define LZO_ARCH_SPARC 1 +# define LZO_INFO_ARCH "sparc" +#elif defined(__SPU__) +# define LZO_ARCH_SPU 1 +# define LZO_INFO_ARCH "spu" +#elif (UINT_MAX == LZO_0xffffL) && defined(__z80) +# define LZO_ARCH_Z80 1 +# define LZO_INFO_ARCH "z80" +#elif (LZO_ARCH_CRAY_PVP) +# if defined(_CRAYSV1) +# define LZO_ARCH_CRAY_SV1 1 +# define LZO_INFO_ARCH "cray_sv1" +# elif (_ADDR64) +# define LZO_ARCH_CRAY_T90 1 +# define LZO_INFO_ARCH "cray_t90" +# elif (_ADDR32) +# define LZO_ARCH_CRAY_YMP 1 +# define LZO_INFO_ARCH "cray_ymp" +# else +# define LZO_ARCH_CRAY_XMP 1 +# define LZO_INFO_ARCH "cray_xmp" +# endif +#else +# define LZO_ARCH_UNKNOWN 1 +# define LZO_INFO_ARCH "unknown" +#endif +#endif +#if !defined(LZO_ARCH_ARM_THUMB2) +#if (LZO_ARCH_ARM) +# if defined(__thumb__) || defined(__thumb) || defined(_M_THUMB) +# if defined(__thumb2__) +# define LZO_ARCH_ARM_THUMB2 1 +# elif 1 && defined(__TARGET_ARCH_THUMB) && ((__TARGET_ARCH_THUMB)+0 >= 4) +# define LZO_ARCH_ARM_THUMB2 1 +# elif 1 && defined(_MSC_VER) && defined(_M_THUMB) && ((_M_THUMB)+0 >= 7) +# define LZO_ARCH_ARM_THUMB2 1 +# endif +# endif +#endif +#endif +#if (LZO_ARCH_ARM_THUMB2) +# undef LZO_INFO_ARCH +# define LZO_INFO_ARCH "arm_thumb2" +#endif +#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_DOS32 || LZO_OS_OS2) +# error "FIXME - missing define for CPU architecture" +#endif +#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN32) +# error "FIXME - missing LZO_OS_WIN32 define for CPU architecture" +#endif +#if 1 && (LZO_ARCH_UNKNOWN) && (LZO_OS_WIN64) +# error "FIXME - missing LZO_OS_WIN64 define for CPU architecture" +#endif +#if (LZO_OS_OS216 || LZO_OS_WIN16) +# define LZO_ARCH_I086PM 1 +#elif 1 && (LZO_OS_DOS16 && defined(BLX286)) +# define LZO_ARCH_I086PM 1 +#elif 1 && (LZO_OS_DOS16 && defined(DOSX286)) +# define LZO_ARCH_I086PM 1 +#elif 1 && (LZO_OS_DOS16 && LZO_CC_BORLANDC && defined(__DPMI16__)) +# define LZO_ARCH_I086PM 1 +#endif +#if (LZO_ARCH_AMD64 && !LZO_ARCH_X64) +# define LZO_ARCH_X64 1 +#elif (!LZO_ARCH_AMD64 && LZO_ARCH_X64) && defined(__LZO_ARCH_OVERRIDE) +# define LZO_ARCH_AMD64 1 +#endif +#if (LZO_ARCH_ARM64 && !LZO_ARCH_AARCH64) +# define LZO_ARCH_AARCH64 1 +#elif (!LZO_ARCH_ARM64 && LZO_ARCH_AARCH64) && defined(__LZO_ARCH_OVERRIDE) +# define LZO_ARCH_ARM64 1 +#endif +#if (LZO_ARCH_I386 && !LZO_ARCH_X86) +# define LZO_ARCH_X86 1 +#elif (!LZO_ARCH_I386 && LZO_ARCH_X86) && defined(__LZO_ARCH_OVERRIDE) +# define LZO_ARCH_I386 1 +#endif +#if (LZO_ARCH_AMD64 && !LZO_ARCH_X64) || (!LZO_ARCH_AMD64 && LZO_ARCH_X64) +# error "unexpected configuration - check your compiler defines" +#endif +#if (LZO_ARCH_ARM64 && !LZO_ARCH_AARCH64) || (!LZO_ARCH_ARM64 && LZO_ARCH_AARCH64) +# error "unexpected configuration - check your compiler defines" +#endif +#if (LZO_ARCH_I386 && !LZO_ARCH_X86) || (!LZO_ARCH_I386 && LZO_ARCH_X86) +# error "unexpected configuration - check your compiler defines" +#endif +#if (LZO_ARCH_ARM_THUMB1 && !LZO_ARCH_ARM) +# error "unexpected configuration - check your compiler defines" +#endif +#if (LZO_ARCH_ARM_THUMB2 && !LZO_ARCH_ARM) +# error "unexpected configuration - check your compiler defines" +#endif +#if (LZO_ARCH_ARM_THUMB1 && LZO_ARCH_ARM_THUMB2) +# error "unexpected configuration - check your compiler defines" +#endif +#if (LZO_ARCH_I086PM && !LZO_ARCH_I086) +# error "unexpected configuration - check your compiler defines" +#endif +#if (LZO_ARCH_I086) +# if (UINT_MAX != LZO_0xffffL) +# error "unexpected configuration - check your compiler defines" +# endif +# if (ULONG_MAX != LZO_0xffffffffL) +# error "unexpected configuration - check your compiler defines" +# endif +#endif +#if (LZO_ARCH_I386) +# if (UINT_MAX != LZO_0xffffL) && defined(__i386_int16__) +# error "unexpected configuration - check your compiler defines" +# endif +# if (UINT_MAX != LZO_0xffffffffL) && !defined(__i386_int16__) +# error "unexpected configuration - check your compiler defines" +# endif +# if (ULONG_MAX != LZO_0xffffffffL) +# error "unexpected configuration - check your compiler defines" +# endif +#endif +#if (LZO_ARCH_AMD64 || LZO_ARCH_I386) +# if !defined(LZO_TARGET_FEATURE_SSE2) +# if defined(__SSE2__) +# define LZO_TARGET_FEATURE_SSE2 1 +# elif defined(_MSC_VER) && (defined(_M_IX86_FP) && ((_M_IX86_FP)+0 >= 2)) +# define LZO_TARGET_FEATURE_SSE2 1 +# elif (LZO_CC_INTELC_MSC || LZO_CC_MSC) && defined(_M_AMD64) +# define LZO_TARGET_FEATURE_SSE2 1 +# endif +# endif +# if !defined(LZO_TARGET_FEATURE_SSSE3) +# if (LZO_TARGET_FEATURE_SSE2) +# if defined(__SSSE3__) +# define LZO_TARGET_FEATURE_SSSE3 1 +# elif defined(_MSC_VER) && defined(__AVX__) +# define LZO_TARGET_FEATURE_SSSE3 1 +# endif +# endif +# endif +# if !defined(LZO_TARGET_FEATURE_SSE4_2) +# if (LZO_TARGET_FEATURE_SSSE3) +# if defined(__SSE4_2__) +# define LZO_TARGET_FEATURE_SSE4_2 1 +# endif +# endif +# endif +# if !defined(LZO_TARGET_FEATURE_AVX) +# if (LZO_TARGET_FEATURE_SSSE3) +# if defined(__AVX__) +# define LZO_TARGET_FEATURE_AVX 1 +# endif +# endif +# endif +# if !defined(LZO_TARGET_FEATURE_AVX2) +# if (LZO_TARGET_FEATURE_AVX) +# if defined(__AVX2__) +# define LZO_TARGET_FEATURE_AVX2 1 +# endif +# endif +# endif +#endif +#if (LZO_TARGET_FEATURE_SSSE3 && !(LZO_TARGET_FEATURE_SSE2)) +# error "unexpected configuration - check your compiler defines" +#endif +#if (LZO_TARGET_FEATURE_SSE4_2 && !(LZO_TARGET_FEATURE_SSSE3)) +# error "unexpected configuration - check your compiler defines" +#endif +#if (LZO_TARGET_FEATURE_AVX && !(LZO_TARGET_FEATURE_SSSE3)) +# error "unexpected configuration - check your compiler defines" +#endif +#if (LZO_TARGET_FEATURE_AVX2 && !(LZO_TARGET_FEATURE_AVX)) +# error "unexpected configuration - check your compiler defines" +#endif +#if (LZO_ARCH_ARM) +# if !defined(LZO_TARGET_FEATURE_NEON) +# if defined(__ARM_NEON) && ((__ARM_NEON)+0) +# define LZO_TARGET_FEATURE_NEON 1 +# elif 1 && defined(__ARM_NEON__) && ((__ARM_NEON__)+0) +# define LZO_TARGET_FEATURE_NEON 1 +# elif 1 && defined(__TARGET_FEATURE_NEON) && ((__TARGET_FEATURE_NEON)+0) +# define LZO_TARGET_FEATURE_NEON 1 +# endif +# endif +#elif (LZO_ARCH_ARM64) +# if !defined(LZO_TARGET_FEATURE_NEON) +# if 1 +# define LZO_TARGET_FEATURE_NEON 1 +# endif +# endif +#endif +#if 0 +#elif !defined(__LZO_MM_OVERRIDE) +#if (LZO_ARCH_I086) +#if (UINT_MAX != LZO_0xffffL) +# error "unexpected configuration - check your compiler defines" +#endif +#if defined(__TINY__) || defined(M_I86TM) || defined(_M_I86TM) +# define LZO_MM_TINY 1 +#elif defined(__HUGE__) || defined(_HUGE_) || defined(M_I86HM) || defined(_M_I86HM) +# define LZO_MM_HUGE 1 +#elif defined(__SMALL__) || defined(M_I86SM) || defined(_M_I86SM) || defined(SMALL_MODEL) +# define LZO_MM_SMALL 1 +#elif defined(__MEDIUM__) || defined(M_I86MM) || defined(_M_I86MM) +# define LZO_MM_MEDIUM 1 +#elif defined(__COMPACT__) || defined(M_I86CM) || defined(_M_I86CM) +# define LZO_MM_COMPACT 1 +#elif defined(__LARGE__) || defined(M_I86LM) || defined(_M_I86LM) || defined(LARGE_MODEL) +# define LZO_MM_LARGE 1 +#elif (LZO_CC_AZTECC) +# if defined(_LARGE_CODE) && defined(_LARGE_DATA) +# define LZO_MM_LARGE 1 +# elif defined(_LARGE_CODE) +# define LZO_MM_MEDIUM 1 +# elif defined(_LARGE_DATA) +# define LZO_MM_COMPACT 1 +# else +# define LZO_MM_SMALL 1 +# endif +#elif (LZO_CC_ZORTECHC && defined(__VCM__)) +# define LZO_MM_LARGE 1 +#else +# error "unknown LZO_ARCH_I086 memory model" +#endif +#if (LZO_OS_DOS16 || LZO_OS_OS216 || LZO_OS_WIN16) +#define LZO_HAVE_MM_HUGE_PTR 1 +#define LZO_HAVE_MM_HUGE_ARRAY 1 +#if (LZO_MM_TINY) +# undef LZO_HAVE_MM_HUGE_ARRAY +#endif +#if (LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_ZORTECHC) +# undef LZO_HAVE_MM_HUGE_PTR +# undef LZO_HAVE_MM_HUGE_ARRAY +#elif (LZO_CC_DMC || LZO_CC_SYMANTECC) +# undef LZO_HAVE_MM_HUGE_ARRAY +#elif (LZO_CC_MSC && defined(_QC)) +# undef LZO_HAVE_MM_HUGE_ARRAY +# if (_MSC_VER < 600) +# undef LZO_HAVE_MM_HUGE_PTR +# endif +#elif (LZO_CC_TURBOC && (__TURBOC__ < 0x0295)) +# undef LZO_HAVE_MM_HUGE_ARRAY +#endif +#if (LZO_ARCH_I086PM) && !(LZO_HAVE_MM_HUGE_PTR) +# if (LZO_OS_DOS16) +# error "unexpected configuration - check your compiler defines" +# elif (LZO_CC_ZORTECHC) +# else +# error "unexpected configuration - check your compiler defines" +# endif +#endif +#if defined(__cplusplus) +extern "C" { +#endif +#if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0200)) + extern void __near __cdecl _AHSHIFT(void); +# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) +#elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) + extern void __near __cdecl _AHSHIFT(void); +# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) +#elif (LZO_CC_MSC || LZO_CC_TOPSPEEDC) + extern void __near __cdecl _AHSHIFT(void); +# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) +#elif (LZO_CC_TURBOC && (__TURBOC__ >= 0x0295)) + extern void __near __cdecl _AHSHIFT(void); +# define LZO_MM_AHSHIFT ((unsigned) _AHSHIFT) +#elif ((LZO_CC_AZTECC || LZO_CC_PACIFICC || LZO_CC_TURBOC) && LZO_OS_DOS16) +# define LZO_MM_AHSHIFT 12 +#elif (LZO_CC_WATCOMC) + extern unsigned char _HShift; +# define LZO_MM_AHSHIFT ((unsigned) _HShift) +#else +# error "FIXME - implement LZO_MM_AHSHIFT" +#endif +#if defined(__cplusplus) +} +#endif +#endif +#elif (LZO_ARCH_C166) +#if !defined(__MODEL__) +# error "FIXME - LZO_ARCH_C166 __MODEL__" +#elif ((__MODEL__) == 0) +# define LZO_MM_SMALL 1 +#elif ((__MODEL__) == 1) +# define LZO_MM_SMALL 1 +#elif ((__MODEL__) == 2) +# define LZO_MM_LARGE 1 +#elif ((__MODEL__) == 3) +# define LZO_MM_TINY 1 +#elif ((__MODEL__) == 4) +# define LZO_MM_XTINY 1 +#elif ((__MODEL__) == 5) +# define LZO_MM_XSMALL 1 +#else +# error "FIXME - LZO_ARCH_C166 __MODEL__" +#endif +#elif (LZO_ARCH_MCS251) +#if !defined(__MODEL__) +# error "FIXME - LZO_ARCH_MCS251 __MODEL__" +#elif ((__MODEL__) == 0) +# define LZO_MM_SMALL 1 +#elif ((__MODEL__) == 2) +# define LZO_MM_LARGE 1 +#elif ((__MODEL__) == 3) +# define LZO_MM_TINY 1 +#elif ((__MODEL__) == 4) +# define LZO_MM_XTINY 1 +#elif ((__MODEL__) == 5) +# define LZO_MM_XSMALL 1 +#else +# error "FIXME - LZO_ARCH_MCS251 __MODEL__" +#endif +#elif (LZO_ARCH_MCS51) +#if !defined(__MODEL__) +# error "FIXME - LZO_ARCH_MCS51 __MODEL__" +#elif ((__MODEL__) == 1) +# define LZO_MM_SMALL 1 +#elif ((__MODEL__) == 2) +# define LZO_MM_LARGE 1 +#elif ((__MODEL__) == 3) +# define LZO_MM_TINY 1 +#elif ((__MODEL__) == 4) +# define LZO_MM_XTINY 1 +#elif ((__MODEL__) == 5) +# define LZO_MM_XSMALL 1 +#else +# error "FIXME - LZO_ARCH_MCS51 __MODEL__" +#endif +#elif (LZO_ARCH_CRAY_PVP) +# define LZO_MM_PVP 1 +#else +# define LZO_MM_FLAT 1 +#endif +#if (LZO_MM_COMPACT) +# define LZO_INFO_MM "compact" +#elif (LZO_MM_FLAT) +# define LZO_INFO_MM "flat" +#elif (LZO_MM_HUGE) +# define LZO_INFO_MM "huge" +#elif (LZO_MM_LARGE) +# define LZO_INFO_MM "large" +#elif (LZO_MM_MEDIUM) +# define LZO_INFO_MM "medium" +#elif (LZO_MM_PVP) +# define LZO_INFO_MM "pvp" +#elif (LZO_MM_SMALL) +# define LZO_INFO_MM "small" +#elif (LZO_MM_TINY) +# define LZO_INFO_MM "tiny" +#else +# error "unknown memory model" +#endif +#endif +#if !defined(__lzo_gnuc_extension__) +#if (LZO_CC_GNUC >= 0x020800ul) +# define __lzo_gnuc_extension__ __extension__ +#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define __lzo_gnuc_extension__ __extension__ +#elif (LZO_CC_IBMC >= 600) +# define __lzo_gnuc_extension__ __extension__ +#endif +#endif +#if !defined(__lzo_gnuc_extension__) +# define __lzo_gnuc_extension__ /*empty*/ +#endif +#if !defined(lzo_has_builtin) +#if (LZO_CC_CLANG) && defined(__has_builtin) +# define lzo_has_builtin __has_builtin +#endif +#endif +#if !defined(lzo_has_builtin) +# define lzo_has_builtin(x) 0 +#endif +#if !defined(lzo_has_attribute) +#if (LZO_CC_CLANG) && defined(__has_attribute) +# define lzo_has_attribute __has_attribute +#endif +#endif +#if !defined(lzo_has_attribute) +# define lzo_has_attribute(x) 0 +#endif +#if !defined(lzo_has_declspec_attribute) +#if (LZO_CC_CLANG) && defined(__has_declspec_attribute) +# define lzo_has_declspec_attribute __has_declspec_attribute +#endif +#endif +#if !defined(lzo_has_declspec_attribute) +# define lzo_has_declspec_attribute(x) 0 +#endif +#if !defined(lzo_has_feature) +#if (LZO_CC_CLANG) && defined(__has_feature) +# define lzo_has_feature __has_feature +#endif +#endif +#if !defined(lzo_has_feature) +# define lzo_has_feature(x) 0 +#endif +#if !defined(lzo_has_extension) +#if (LZO_CC_CLANG) && defined(__has_extension) +# define lzo_has_extension __has_extension +#elif (LZO_CC_CLANG) && defined(__has_feature) +# define lzo_has_extension __has_feature +#endif +#endif +#if !defined(lzo_has_extension) +# define lzo_has_extension(x) 0 +#endif +#if !defined(LZO_CFG_USE_NEW_STYLE_CASTS) && defined(__cplusplus) && 0 +# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020800ul)) +# define LZO_CFG_USE_NEW_STYLE_CASTS 0 +# elif (LZO_CC_INTELC && (__INTEL_COMPILER < 1200)) +# define LZO_CFG_USE_NEW_STYLE_CASTS 0 +# else +# define LZO_CFG_USE_NEW_STYLE_CASTS 1 +# endif +#endif +#if !defined(LZO_CFG_USE_NEW_STYLE_CASTS) +# define LZO_CFG_USE_NEW_STYLE_CASTS 0 +#endif +#if !defined(__cplusplus) +# if defined(LZO_CFG_USE_NEW_STYLE_CASTS) +# undef LZO_CFG_USE_NEW_STYLE_CASTS +# endif +# define LZO_CFG_USE_NEW_STYLE_CASTS 0 +#endif +#if !defined(LZO_REINTERPRET_CAST) +# if (LZO_CFG_USE_NEW_STYLE_CASTS) +# define LZO_REINTERPRET_CAST(t,e) (reinterpret_cast<t> (e)) +# endif +#endif +#if !defined(LZO_REINTERPRET_CAST) +# define LZO_REINTERPRET_CAST(t,e) ((t) (e)) +#endif +#if !defined(LZO_STATIC_CAST) +# if (LZO_CFG_USE_NEW_STYLE_CASTS) +# define LZO_STATIC_CAST(t,e) (static_cast<t> (e)) +# endif +#endif +#if !defined(LZO_STATIC_CAST) +# define LZO_STATIC_CAST(t,e) ((t) (e)) +#endif +#if !defined(LZO_STATIC_CAST2) +# define LZO_STATIC_CAST2(t1,t2,e) LZO_STATIC_CAST(t1, LZO_STATIC_CAST(t2, e)) +#endif +#if !defined(LZO_UNCONST_CAST) +# if (LZO_CFG_USE_NEW_STYLE_CASTS) +# define LZO_UNCONST_CAST(t,e) (const_cast<t> (e)) +# elif (LZO_HAVE_MM_HUGE_PTR) +# define LZO_UNCONST_CAST(t,e) ((t) (e)) +# elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((lzo_uintptr_t) ((const void *) (e))))) +# endif +#endif +#if !defined(LZO_UNCONST_CAST) +# define LZO_UNCONST_CAST(t,e) ((t) ((void *) ((const void *) (e)))) +#endif +#if !defined(LZO_UNCONST_VOLATILE_CAST) +# if (LZO_CFG_USE_NEW_STYLE_CASTS) +# define LZO_UNCONST_VOLATILE_CAST(t,e) (const_cast<t> (e)) +# elif (LZO_HAVE_MM_HUGE_PTR) +# define LZO_UNCONST_VOLATILE_CAST(t,e) ((t) (e)) +# elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define LZO_UNCONST_VOLATILE_CAST(t,e) ((t) ((volatile void *) ((lzo_uintptr_t) ((volatile const void *) (e))))) +# endif +#endif +#if !defined(LZO_UNCONST_VOLATILE_CAST) +# define LZO_UNCONST_VOLATILE_CAST(t,e) ((t) ((volatile void *) ((volatile const void *) (e)))) +#endif +#if !defined(LZO_UNVOLATILE_CAST) +# if (LZO_CFG_USE_NEW_STYLE_CASTS) +# define LZO_UNVOLATILE_CAST(t,e) (const_cast<t> (e)) +# elif (LZO_HAVE_MM_HUGE_PTR) +# define LZO_UNVOLATILE_CAST(t,e) ((t) (e)) +# elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define LZO_UNVOLATILE_CAST(t,e) ((t) ((void *) ((lzo_uintptr_t) ((volatile void *) (e))))) +# endif +#endif +#if !defined(LZO_UNVOLATILE_CAST) +# define LZO_UNVOLATILE_CAST(t,e) ((t) ((void *) ((volatile void *) (e)))) +#endif +#if !defined(LZO_UNVOLATILE_CONST_CAST) +# if (LZO_CFG_USE_NEW_STYLE_CASTS) +# define LZO_UNVOLATILE_CONST_CAST(t,e) (const_cast<t> (e)) +# elif (LZO_HAVE_MM_HUGE_PTR) +# define LZO_UNVOLATILE_CONST_CAST(t,e) ((t) (e)) +# elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define LZO_UNVOLATILE_CONST_CAST(t,e) ((t) ((const void *) ((lzo_uintptr_t) ((volatile const void *) (e))))) +# endif +#endif +#if !defined(LZO_UNVOLATILE_CONST_CAST) +# define LZO_UNVOLATILE_CONST_CAST(t,e) ((t) ((const void *) ((volatile const void *) (e)))) +#endif +#if !defined(LZO_PCAST) +# if (LZO_HAVE_MM_HUGE_PTR) +# define LZO_PCAST(t,e) ((t) (e)) +# endif +#endif +#if !defined(LZO_PCAST) +# define LZO_PCAST(t,e) LZO_STATIC_CAST(t, LZO_STATIC_CAST(void *, e)) +#endif +#if !defined(LZO_CCAST) +# if (LZO_HAVE_MM_HUGE_PTR) +# define LZO_CCAST(t,e) ((t) (e)) +# endif +#endif +#if !defined(LZO_CCAST) +# define LZO_CCAST(t,e) LZO_STATIC_CAST(t, LZO_STATIC_CAST(const void *, e)) +#endif +#if !defined(LZO_ICONV) +# define LZO_ICONV(t,e) LZO_STATIC_CAST(t, e) +#endif +#if !defined(LZO_ICAST) +# define LZO_ICAST(t,e) LZO_STATIC_CAST(t, e) +#endif +#if !defined(LZO_ITRUNC) +# define LZO_ITRUNC(t,e) LZO_STATIC_CAST(t, e) +#endif +#if !defined(__lzo_cte) +# if (LZO_CC_MSC || LZO_CC_WATCOMC) +# define __lzo_cte(e) ((void)0,(e)) +# elif 1 +# define __lzo_cte(e) ((void)0,(e)) +# endif +#endif +#if !defined(__lzo_cte) +# define __lzo_cte(e) (e) +#endif +#if !defined(LZO_BLOCK_BEGIN) +# define LZO_BLOCK_BEGIN do { +# define LZO_BLOCK_END } while __lzo_cte(0) +#endif +#if !defined(LZO_UNUSED) +# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) +# define LZO_UNUSED(var) ((void) &var) +# elif (LZO_CC_BORLANDC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PELLESC || LZO_CC_TURBOC) +# define LZO_UNUSED(var) if (&var) ; else +# elif (LZO_CC_CLANG && (LZO_CC_CLANG >= 0x030200ul)) +# define LZO_UNUSED(var) ((void) &var) +# elif (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define LZO_UNUSED(var) ((void) var) +# elif (LZO_CC_MSC && (_MSC_VER < 900)) +# define LZO_UNUSED(var) if (&var) ; else +# elif (LZO_CC_KEILC) +# define LZO_UNUSED(var) {extern int lzo_unused__[1-2*!(sizeof(var)>0)]; (void)lzo_unused__;} +# elif (LZO_CC_PACIFICC) +# define LZO_UNUSED(var) ((void) sizeof(var)) +# elif (LZO_CC_WATCOMC) && defined(__cplusplus) +# define LZO_UNUSED(var) ((void) var) +# else +# define LZO_UNUSED(var) ((void) &var) +# endif +#endif +#if !defined(LZO_UNUSED_RESULT) +# define LZO_UNUSED_RESULT(var) LZO_UNUSED(var) +#endif +#if !defined(LZO_UNUSED_FUNC) +# if (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0600)) +# define LZO_UNUSED_FUNC(func) ((void) func) +# elif (LZO_CC_BORLANDC || LZO_CC_NDPC || LZO_CC_TURBOC) +# define LZO_UNUSED_FUNC(func) if (func) ; else +# elif (LZO_CC_CLANG || LZO_CC_LLVM) +# define LZO_UNUSED_FUNC(func) ((void) &func) +# elif (LZO_CC_MSC && (_MSC_VER < 900)) +# define LZO_UNUSED_FUNC(func) if (func) ; else +# elif (LZO_CC_MSC) +# define LZO_UNUSED_FUNC(func) ((void) &func) +# elif (LZO_CC_KEILC || LZO_CC_PELLESC) +# define LZO_UNUSED_FUNC(func) {extern int lzo_unused__[1-2*!(sizeof((int)func)>0)]; (void)lzo_unused__;} +# else +# define LZO_UNUSED_FUNC(func) ((void) func) +# endif +#endif +#if !defined(LZO_UNUSED_LABEL) +# if (LZO_CC_CLANG >= 0x020800ul) +# define LZO_UNUSED_LABEL(l) (__lzo_gnuc_extension__ ((void) ((const void *) &&l))) +# elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_INTELC || LZO_CC_WATCOMC) +# define LZO_UNUSED_LABEL(l) if __lzo_cte(0) goto l +# else +# define LZO_UNUSED_LABEL(l) switch (0) case 1:goto l +# endif +#endif +#if !defined(LZO_DEFINE_UNINITIALIZED_VAR) +# if 0 +# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var +# elif 0 && (LZO_CC_GNUC) +# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = var +# else +# define LZO_DEFINE_UNINITIALIZED_VAR(type,var,init) type var = init +# endif +#endif +#if !defined(__lzo_inline) +#if (LZO_CC_TURBOC && (__TURBOC__ <= 0x0295)) +#elif defined(__cplusplus) +# define __lzo_inline inline +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__-0 >= 199901L) +# define __lzo_inline inline +#elif (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0550)) +# define __lzo_inline __inline +#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) +# define __lzo_inline __inline__ +#elif (LZO_CC_DMC) +# define __lzo_inline __inline +#elif (LZO_CC_GHS) +# define __lzo_inline __inline__ +#elif (LZO_CC_IBMC >= 600) +# define __lzo_inline __inline__ +#elif (LZO_CC_INTELC) +# define __lzo_inline __inline +#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x2405)) +# define __lzo_inline __inline +#elif (LZO_CC_MSC && (_MSC_VER >= 900)) +# define __lzo_inline __inline +#elif (LZO_CC_SUNPROC >= 0x5100) +# define __lzo_inline __inline__ +#endif +#endif +#if defined(__lzo_inline) +# ifndef __lzo_HAVE_inline +# define __lzo_HAVE_inline 1 +# endif +#else +# define __lzo_inline /*empty*/ +#endif +#if !defined(__lzo_forceinline) +#if (LZO_CC_GNUC >= 0x030200ul) +# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) +#elif (LZO_CC_IBMC >= 700) +# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) +#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 450)) +# define __lzo_forceinline __forceinline +#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800)) +# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) +#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) +#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) +# define __lzo_forceinline __forceinline +#elif (LZO_CC_PGI >= 0x0d0a00ul) +# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) +#elif (LZO_CC_SUNPROC >= 0x5100) +# define __lzo_forceinline __inline__ __attribute__((__always_inline__)) +#endif +#endif +#if defined(__lzo_forceinline) +# ifndef __lzo_HAVE_forceinline +# define __lzo_HAVE_forceinline 1 +# endif +#else +# define __lzo_forceinline __lzo_inline +#endif +#if !defined(__lzo_noinline) +#if 1 && (LZO_ARCH_I386) && (LZO_CC_GNUC >= 0x040000ul) && (LZO_CC_GNUC < 0x040003ul) +# define __lzo_noinline __attribute__((__noinline__,__used__)) +#elif (LZO_CC_GNUC >= 0x030200ul) +# define __lzo_noinline __attribute__((__noinline__)) +#elif (LZO_CC_IBMC >= 700) +# define __lzo_noinline __attribute__((__noinline__)) +#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 600)) +# define __lzo_noinline __declspec(noinline) +#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800)) +# define __lzo_noinline __attribute__((__noinline__)) +#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define __lzo_noinline __attribute__((__noinline__)) +#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) +# define __lzo_noinline __declspec(noinline) +#elif (LZO_CC_MWERKS && (__MWERKS__ >= 0x3200) && (LZO_OS_WIN32 || LZO_OS_WIN64)) +# if defined(__cplusplus) +# else +# define __lzo_noinline __declspec(noinline) +# endif +#elif (LZO_CC_PGI >= 0x0d0a00ul) +# define __lzo_noinline __attribute__((__noinline__)) +#elif (LZO_CC_SUNPROC >= 0x5100) +# define __lzo_noinline __attribute__((__noinline__)) +#endif +#endif +#if defined(__lzo_noinline) +# ifndef __lzo_HAVE_noinline +# define __lzo_HAVE_noinline 1 +# endif +#else +# define __lzo_noinline /*empty*/ +#endif +#if (__lzo_HAVE_forceinline || __lzo_HAVE_noinline) && !(__lzo_HAVE_inline) +# error "unexpected configuration - check your compiler defines" +#endif +#if !defined(__lzo_static_inline) +#if (LZO_CC_IBMC) +# define __lzo_static_inline __lzo_gnuc_extension__ static __lzo_inline +#endif +#endif +#if !defined(__lzo_static_inline) +# define __lzo_static_inline static __lzo_inline +#endif +#if !defined(__lzo_static_forceinline) +#if (LZO_CC_IBMC) +# define __lzo_static_forceinline __lzo_gnuc_extension__ static __lzo_forceinline +#endif +#endif +#if !defined(__lzo_static_forceinline) +# define __lzo_static_forceinline static __lzo_forceinline +#endif +#if !defined(__lzo_static_noinline) +#if (LZO_CC_IBMC) +# define __lzo_static_noinline __lzo_gnuc_extension__ static __lzo_noinline +#endif +#endif +#if !defined(__lzo_static_noinline) +# define __lzo_static_noinline static __lzo_noinline +#endif +#if !defined(__lzo_c99_extern_inline) +#if defined(__GNUC_GNU_INLINE__) +# define __lzo_c99_extern_inline __lzo_inline +#elif defined(__GNUC_STDC_INLINE__) +# define __lzo_c99_extern_inline extern __lzo_inline +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__-0 >= 199901L) +# define __lzo_c99_extern_inline extern __lzo_inline +#endif +#if !defined(__lzo_c99_extern_inline) && (__lzo_HAVE_inline) +# define __lzo_c99_extern_inline __lzo_inline +#endif +#endif +#if defined(__lzo_c99_extern_inline) +# ifndef __lzo_HAVE_c99_extern_inline +# define __lzo_HAVE_c99_extern_inline 1 +# endif +#else +# define __lzo_c99_extern_inline /*empty*/ +#endif +#if !defined(__lzo_may_alias) +#if (LZO_CC_GNUC >= 0x030400ul) +# define __lzo_may_alias __attribute__((__may_alias__)) +#elif (LZO_CC_CLANG >= 0x020900ul) +# define __lzo_may_alias __attribute__((__may_alias__)) +#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 1210)) && 0 +# define __lzo_may_alias __attribute__((__may_alias__)) +#elif (LZO_CC_PGI >= 0x0d0a00ul) && 0 +# define __lzo_may_alias __attribute__((__may_alias__)) +#endif +#endif +#if defined(__lzo_may_alias) +# ifndef __lzo_HAVE_may_alias +# define __lzo_HAVE_may_alias 1 +# endif +#else +# define __lzo_may_alias /*empty*/ +#endif +#if !defined(__lzo_noreturn) +#if (LZO_CC_GNUC >= 0x020700ul) +# define __lzo_noreturn __attribute__((__noreturn__)) +#elif (LZO_CC_IBMC >= 700) +# define __lzo_noreturn __attribute__((__noreturn__)) +#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 450)) +# define __lzo_noreturn __declspec(noreturn) +#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 600)) +# define __lzo_noreturn __attribute__((__noreturn__)) +#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define __lzo_noreturn __attribute__((__noreturn__)) +#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) +# define __lzo_noreturn __declspec(noreturn) +#elif (LZO_CC_PGI >= 0x0d0a00ul) +# define __lzo_noreturn __attribute__((__noreturn__)) +#endif +#endif +#if defined(__lzo_noreturn) +# ifndef __lzo_HAVE_noreturn +# define __lzo_HAVE_noreturn 1 +# endif +#else +# define __lzo_noreturn /*empty*/ +#endif +#if !defined(__lzo_nothrow) +#if (LZO_CC_GNUC >= 0x030300ul) +# define __lzo_nothrow __attribute__((__nothrow__)) +#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 450)) && defined(__cplusplus) +# define __lzo_nothrow __declspec(nothrow) +#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 900)) +# define __lzo_nothrow __attribute__((__nothrow__)) +#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define __lzo_nothrow __attribute__((__nothrow__)) +#elif (LZO_CC_MSC && (_MSC_VER >= 1200)) && defined(__cplusplus) +# define __lzo_nothrow __declspec(nothrow) +#endif +#endif +#if defined(__lzo_nothrow) +# ifndef __lzo_HAVE_nothrow +# define __lzo_HAVE_nothrow 1 +# endif +#else +# define __lzo_nothrow /*empty*/ +#endif +#if !defined(__lzo_restrict) +#if (LZO_CC_GNUC >= 0x030400ul) +# define __lzo_restrict __restrict__ +#elif (LZO_CC_IBMC >= 800) && !defined(__cplusplus) +# define __lzo_restrict __restrict__ +#elif (LZO_CC_IBMC >= 1210) +# define __lzo_restrict __restrict__ +#elif (LZO_CC_INTELC_MSC && (__INTEL_COMPILER >= 600)) +#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 600)) +# define __lzo_restrict __restrict__ +#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM) +# define __lzo_restrict __restrict__ +#elif (LZO_CC_MSC && (_MSC_VER >= 1400)) +# define __lzo_restrict __restrict +#elif (LZO_CC_PGI >= 0x0d0a00ul) +# define __lzo_restrict __restrict__ +#endif +#endif +#if defined(__lzo_restrict) +# ifndef __lzo_HAVE_restrict +# define __lzo_HAVE_restrict 1 +# endif +#else +# define __lzo_restrict /*empty*/ +#endif +#if !defined(__lzo_alignof) +#if (LZO_CC_ARMCC || LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) +# define __lzo_alignof(e) __alignof__(e) +#elif (LZO_CC_GHS) && !defined(__cplusplus) +# define __lzo_alignof(e) __alignof__(e) +#elif (LZO_CC_IBMC >= 600) +# define __lzo_alignof(e) (__lzo_gnuc_extension__ __alignof__(e)) +#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 700)) +# define __lzo_alignof(e) __alignof__(e) +#elif (LZO_CC_MSC && (_MSC_VER >= 1300)) +# define __lzo_alignof(e) __alignof(e) +#elif (LZO_CC_SUNPROC >= 0x5100) +# define __lzo_alignof(e) __alignof__(e) +#endif +#endif +#if defined(__lzo_alignof) +# ifndef __lzo_HAVE_alignof +# define __lzo_HAVE_alignof 1 +# endif +#endif +#if !defined(__lzo_struct_packed) +#if (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020800ul)) && defined(__cplusplus) +#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020700ul)) +#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020800ul)) && defined(__cplusplus) +#elif (LZO_CC_PCC && (LZO_CC_PCC < 0x010100ul)) +#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC < 0x5110)) && !defined(__cplusplus) +#elif (LZO_CC_GNUC >= 0x030400ul) && !(LZO_CC_PCC_GNUC) && (LZO_ARCH_AMD64 || LZO_ARCH_I386) +# define __lzo_struct_packed(s) struct s { +# define __lzo_struct_packed_end() } __attribute__((__gcc_struct__,__packed__)); +# define __lzo_struct_packed_ma_end() } __lzo_may_alias __attribute__((__gcc_struct__,__packed__)); +#elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || (LZO_CC_PGI >= 0x0d0a00ul) || (LZO_CC_SUNPROC >= 0x5100)) +# define __lzo_struct_packed(s) struct s { +# define __lzo_struct_packed_end() } __attribute__((__packed__)); +# define __lzo_struct_packed_ma_end() } __lzo_may_alias __attribute__((__packed__)); +#elif (LZO_CC_IBMC >= 700) +# define __lzo_struct_packed(s) __lzo_gnuc_extension__ struct s { +# define __lzo_struct_packed_end() } __attribute__((__packed__)); +# define __lzo_struct_packed_ma_end() } __lzo_may_alias __attribute__((__packed__)); +#elif (LZO_CC_INTELC_MSC) || (LZO_CC_MSC && (_MSC_VER >= 1300)) +# define __lzo_struct_packed(s) __pragma(pack(push,1)) struct s { +# define __lzo_struct_packed_end() } __pragma(pack(pop)); +#elif (LZO_CC_WATCOMC && (__WATCOMC__ >= 900)) +# define __lzo_struct_packed(s) _Packed struct s { +# define __lzo_struct_packed_end() }; +#endif +#endif +#if defined(__lzo_struct_packed) && !defined(__lzo_struct_packed_ma) +# define __lzo_struct_packed_ma(s) __lzo_struct_packed(s) +#endif +#if defined(__lzo_struct_packed_end) && !defined(__lzo_struct_packed_ma_end) +# define __lzo_struct_packed_ma_end() __lzo_struct_packed_end() +#endif +#if !defined(__lzo_byte_struct) +#if defined(__lzo_struct_packed) +# define __lzo_byte_struct(s,n) __lzo_struct_packed(s) unsigned char a[n]; __lzo_struct_packed_end() +# define __lzo_byte_struct_ma(s,n) __lzo_struct_packed_ma(s) unsigned char a[n]; __lzo_struct_packed_ma_end() +#elif (LZO_CC_CILLY || LZO_CC_CLANG || LZO_CC_PGI || (LZO_CC_SUNPROC >= 0x5100)) +# define __lzo_byte_struct(s,n) struct s { unsigned char a[n]; } __attribute__((__packed__)); +# define __lzo_byte_struct_ma(s,n) struct s { unsigned char a[n]; } __lzo_may_alias __attribute__((__packed__)); +#endif +#endif +#if defined(__lzo_byte_struct) && !defined(__lzo_byte_struct_ma) +# define __lzo_byte_struct_ma(s,n) __lzo_byte_struct(s,n) +#endif +#if !defined(__lzo_struct_align16) && (__lzo_HAVE_alignof) +#if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x030000ul)) +#elif (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020800ul)) && defined(__cplusplus) +#elif (LZO_CC_CILLY || LZO_CC_PCC) +#elif (LZO_CC_INTELC_MSC) || (LZO_CC_MSC && (_MSC_VER >= 1300)) +# define __lzo_struct_align16(s) struct __declspec(align(16)) s { +# define __lzo_struct_align16_end() }; +# define __lzo_struct_align32(s) struct __declspec(align(32)) s { +# define __lzo_struct_align32_end() }; +# define __lzo_struct_align64(s) struct __declspec(align(64)) s { +# define __lzo_struct_align64_end() }; +#elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_GNUC || (LZO_CC_IBMC >= 700) || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define __lzo_struct_align16(s) struct s { +# define __lzo_struct_align16_end() } __attribute__((__aligned__(16))); +# define __lzo_struct_align32(s) struct s { +# define __lzo_struct_align32_end() } __attribute__((__aligned__(32))); +# define __lzo_struct_align64(s) struct s { +# define __lzo_struct_align64_end() } __attribute__((__aligned__(64))); +#endif +#endif +#if !defined(__lzo_union_um) +#if (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020800ul)) && defined(__cplusplus) +#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020700ul)) +#elif (LZO_CC_GNUC && (LZO_CC_GNUC < 0x020800ul)) && defined(__cplusplus) +#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER < 810)) +#elif (LZO_CC_PCC && (LZO_CC_PCC < 0x010100ul)) +#elif (LZO_CC_SUNPROC && (LZO_CC_SUNPROC < 0x5110)) && !defined(__cplusplus) +#elif (LZO_CC_ARMCC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || (LZO_CC_PGI >= 0x0d0a00ul) || (LZO_CC_SUNPROC >= 0x5100)) +# define __lzo_union_am(s) union s { +# define __lzo_union_am_end() } __lzo_may_alias; +# define __lzo_union_um(s) union s { +# define __lzo_union_um_end() } __lzo_may_alias __attribute__((__packed__)); +#elif (LZO_CC_IBMC >= 700) +# define __lzo_union_am(s) __lzo_gnuc_extension__ union s { +# define __lzo_union_am_end() } __lzo_may_alias; +# define __lzo_union_um(s) __lzo_gnuc_extension__ union s { +# define __lzo_union_um_end() } __lzo_may_alias __attribute__((__packed__)); +#elif (LZO_CC_INTELC_MSC) || (LZO_CC_MSC && (_MSC_VER >= 1300)) +# define __lzo_union_um(s) __pragma(pack(push,1)) union s { +# define __lzo_union_um_end() } __pragma(pack(pop)); +#elif (LZO_CC_WATCOMC && (__WATCOMC__ >= 900)) +# define __lzo_union_um(s) _Packed union s { +# define __lzo_union_um_end() }; +#endif +#endif +#if !defined(__lzo_union_am) +# define __lzo_union_am(s) union s { +# define __lzo_union_am_end() }; +#endif +#if !defined(__lzo_constructor) +#if (LZO_CC_GNUC >= 0x030400ul) +# define __lzo_constructor __attribute__((__constructor__,__used__)) +#elif (LZO_CC_GNUC >= 0x020700ul) +# define __lzo_constructor __attribute__((__constructor__)) +#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800)) +# define __lzo_constructor __attribute__((__constructor__,__used__)) +#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define __lzo_constructor __attribute__((__constructor__)) +#endif +#endif +#if defined(__lzo_constructor) +# ifndef __lzo_HAVE_constructor +# define __lzo_HAVE_constructor 1 +# endif +#endif +#if !defined(__lzo_destructor) +#if (LZO_CC_GNUC >= 0x030400ul) +# define __lzo_destructor __attribute__((__destructor__,__used__)) +#elif (LZO_CC_GNUC >= 0x020700ul) +# define __lzo_destructor __attribute__((__destructor__)) +#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 800)) +# define __lzo_destructor __attribute__((__destructor__,__used__)) +#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define __lzo_destructor __attribute__((__destructor__)) +#endif +#endif +#if defined(__lzo_destructor) +# ifndef __lzo_HAVE_destructor +# define __lzo_HAVE_destructor 1 +# endif +#endif +#if (__lzo_HAVE_destructor) && !(__lzo_HAVE_constructor) +# error "unexpected configuration - check your compiler defines" +#endif +#if !defined(__lzo_likely) && !defined(__lzo_unlikely) +#if (LZO_CC_GNUC >= 0x030200ul) +# define __lzo_likely(e) (__builtin_expect(!!(e),1)) +# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) +#elif (LZO_CC_IBMC >= 1010) +# define __lzo_likely(e) (__builtin_expect(!!(e),1)) +# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) +#elif (LZO_CC_INTELC && (__INTEL_COMPILER >= 800)) +# define __lzo_likely(e) (__builtin_expect(!!(e),1)) +# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) +#elif (LZO_CC_CLANG && LZO_CC_CLANG_C2) +#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define __lzo_likely(e) (__builtin_expect(!!(e),1)) +# define __lzo_unlikely(e) (__builtin_expect(!!(e),0)) +#endif +#endif +#if defined(__lzo_likely) +# ifndef __lzo_HAVE_likely +# define __lzo_HAVE_likely 1 +# endif +#else +# define __lzo_likely(e) (e) +#endif +#if defined(__lzo_very_likely) +# ifndef __lzo_HAVE_very_likely +# define __lzo_HAVE_very_likely 1 +# endif +#else +# define __lzo_very_likely(e) __lzo_likely(e) +#endif +#if defined(__lzo_unlikely) +# ifndef __lzo_HAVE_unlikely +# define __lzo_HAVE_unlikely 1 +# endif +#else +# define __lzo_unlikely(e) (e) +#endif +#if defined(__lzo_very_unlikely) +# ifndef __lzo_HAVE_very_unlikely +# define __lzo_HAVE_very_unlikely 1 +# endif +#else +# define __lzo_very_unlikely(e) __lzo_unlikely(e) +#endif +#if !defined(__lzo_loop_forever) +# if (LZO_CC_IBMC) +# define __lzo_loop_forever() LZO_BLOCK_BEGIN for (;;) { ; } LZO_BLOCK_END +# else +# define __lzo_loop_forever() do { ; } while __lzo_cte(1) +# endif +#endif +#if !defined(__lzo_unreachable) +#if (LZO_CC_CLANG && (LZO_CC_CLANG >= 0x020800ul)) && lzo_has_builtin(__builtin_unreachable) +# define __lzo_unreachable() __builtin_unreachable(); +#elif (LZO_CC_GNUC >= 0x040500ul) +# define __lzo_unreachable() __builtin_unreachable(); +#elif (LZO_CC_INTELC_GNUC && (__INTEL_COMPILER >= 1300)) && 1 +# define __lzo_unreachable() __builtin_unreachable(); +#endif +#endif +#if defined(__lzo_unreachable) +# ifndef __lzo_HAVE_unreachable +# define __lzo_HAVE_unreachable 1 +# endif +#else +# if 0 +# define __lzo_unreachable() ((void)0); +# else +# define __lzo_unreachable() __lzo_loop_forever(); +# endif +#endif +#if !defined(lzo_unused_funcs_impl) +# if 1 && (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || (LZO_CC_GNUC >= 0x020700ul) || LZO_CC_INTELC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE || LZO_CC_PGI) +# define lzo_unused_funcs_impl(r,f) static r __attribute__((__unused__)) f +# elif 1 && (LZO_CC_BORLANDC || LZO_CC_GNUC) +# define lzo_unused_funcs_impl(r,f) static r f +# else +# define lzo_unused_funcs_impl(r,f) __lzo_static_forceinline r f +# endif +#endif +#ifndef __LZO_CTA_NAME +#if (LZO_CFG_USE_COUNTER) +# define __LZO_CTA_NAME(a) LZO_PP_ECONCAT2(a,__COUNTER__) +#else +# define __LZO_CTA_NAME(a) LZO_PP_ECONCAT2(a,__LINE__) +#endif +#endif +#if !defined(LZO_COMPILE_TIME_ASSERT_HEADER) +# if (LZO_CC_AZTECC || LZO_CC_ZORTECHC) +# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1-!(e)]; LZO_EXTERN_C_END +# elif (LZO_CC_DMC || LZO_CC_SYMANTECC) +# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1u-2*!(e)]; LZO_EXTERN_C_END +# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) +# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1-!(e)]; LZO_EXTERN_C_END +# elif (LZO_CC_CLANG && (LZO_CC_CLANG < 0x020900ul)) && defined(__cplusplus) +# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN int __LZO_CTA_NAME(lzo_cta_f__)(int [1-2*!(e)]); LZO_EXTERN_C_END +# elif (LZO_CC_GNUC) && defined(__CHECKER__) && defined(__SPARSE_CHECKER__) +# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN enum {__LZO_CTA_NAME(lzo_cta_e__)=1/!!(e)} __attribute__((__unused__)); LZO_EXTERN_C_END +# else +# define LZO_COMPILE_TIME_ASSERT_HEADER(e) LZO_EXTERN_C_BEGIN extern int __LZO_CTA_NAME(lzo_cta__)[1-2*!(e)]; LZO_EXTERN_C_END +# endif +#endif +#if !defined(LZO_COMPILE_TIME_ASSERT) +# if (LZO_CC_AZTECC) +# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-!(e)];} +# elif (LZO_CC_CLANG && (LZO_CC_CLANG >= 0x030000ul)) +# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-2*!(e)] __attribute__((__unused__));} +# elif (LZO_CC_DMC || LZO_CC_PACIFICC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) +# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; +# elif (LZO_CC_GNUC) && defined(__CHECKER__) && defined(__SPARSE_CHECKER__) +# define LZO_COMPILE_TIME_ASSERT(e) {(void) (0/!!(e));} +# elif (LZO_CC_GNUC >= 0x040700ul) && (LZO_CFG_USE_COUNTER) && defined(__cplusplus) +# define LZO_COMPILE_TIME_ASSERT(e) {enum {__LZO_CTA_NAME(lzo_cta_e__)=1/!!(e)} __attribute__((__unused__));} +# elif (LZO_CC_GNUC >= 0x040700ul) +# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-2*!(e)] __attribute__((__unused__));} +# elif (LZO_CC_MSC && (_MSC_VER < 900)) +# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; +# elif (LZO_CC_TURBOC && (__TURBOC__ == 0x0295)) +# define LZO_COMPILE_TIME_ASSERT(e) switch(0) case 1:case !(e):break; +# else +# define LZO_COMPILE_TIME_ASSERT(e) {typedef int __LZO_CTA_NAME(lzo_cta_t__)[1-2*!(e)];} +# endif +#endif +#if (LZO_LANG_ASSEMBLER) +# undef LZO_COMPILE_TIME_ASSERT_HEADER +# define LZO_COMPILE_TIME_ASSERT_HEADER(e) /*empty*/ +#else +LZO_COMPILE_TIME_ASSERT_HEADER(1 == 1) +#if defined(__cplusplus) +extern "C" { LZO_COMPILE_TIME_ASSERT_HEADER(2 == 2) } +#endif +LZO_COMPILE_TIME_ASSERT_HEADER(3 == 3) +#endif +#if (LZO_ARCH_I086 || LZO_ARCH_I386) && (LZO_OS_DOS16 || LZO_OS_DOS32 || LZO_OS_OS2 || LZO_OS_OS216 || LZO_OS_WIN16 || LZO_OS_WIN32 || LZO_OS_WIN64) +# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC) +# elif (LZO_CC_DMC || LZO_CC_SYMANTECC || LZO_CC_ZORTECHC) +# define __lzo_cdecl __cdecl +# define __lzo_cdecl_atexit /*empty*/ +# define __lzo_cdecl_main __cdecl +# if (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) +# define __lzo_cdecl_qsort __pascal +# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) +# define __lzo_cdecl_qsort _stdcall +# else +# define __lzo_cdecl_qsort __cdecl +# endif +# elif (LZO_CC_WATCOMC) +# define __lzo_cdecl __cdecl +# else +# define __lzo_cdecl __cdecl +# define __lzo_cdecl_atexit __cdecl +# define __lzo_cdecl_main __cdecl +# define __lzo_cdecl_qsort __cdecl +# endif +# if (LZO_CC_GNUC || LZO_CC_HIGHC || LZO_CC_NDPC || LZO_CC_PACIFICC || LZO_CC_WATCOMC) +# elif (LZO_OS_OS2 && (LZO_CC_DMC || LZO_CC_SYMANTECC)) +# define __lzo_cdecl_sighandler __pascal +# elif (LZO_OS_OS2 && (LZO_CC_ZORTECHC)) +# define __lzo_cdecl_sighandler _stdcall +# elif (LZO_CC_MSC && (_MSC_VER >= 1400)) && defined(_M_CEE_PURE) +# define __lzo_cdecl_sighandler __clrcall +# elif (LZO_CC_MSC && (_MSC_VER >= 600 && _MSC_VER < 700)) +# if defined(_DLL) +# define __lzo_cdecl_sighandler _far _cdecl _loadds +# elif defined(_MT) +# define __lzo_cdecl_sighandler _far _cdecl +# else +# define __lzo_cdecl_sighandler _cdecl +# endif +# else +# define __lzo_cdecl_sighandler __cdecl +# endif +#elif (LZO_ARCH_I386) && (LZO_CC_WATCOMC) +# define __lzo_cdecl __cdecl +#elif (LZO_ARCH_M68K && LZO_OS_TOS && (LZO_CC_PUREC || LZO_CC_TURBOC)) +# define __lzo_cdecl cdecl +#endif +#if !defined(__lzo_cdecl) +# define __lzo_cdecl /*empty*/ +#endif +#if !defined(__lzo_cdecl_atexit) +# define __lzo_cdecl_atexit /*empty*/ +#endif +#if !defined(__lzo_cdecl_main) +# define __lzo_cdecl_main /*empty*/ +#endif +#if !defined(__lzo_cdecl_qsort) +# define __lzo_cdecl_qsort /*empty*/ +#endif +#if !defined(__lzo_cdecl_sighandler) +# define __lzo_cdecl_sighandler /*empty*/ +#endif +#if !defined(__lzo_cdecl_va) +# define __lzo_cdecl_va __lzo_cdecl +#endif +#if !(LZO_CFG_NO_WINDOWS_H) +#if !defined(LZO_HAVE_WINDOWS_H) +#if (LZO_OS_CYGWIN || (LZO_OS_EMX && defined(__RSXNT__)) || LZO_OS_WIN32 || LZO_OS_WIN64) +# if (LZO_CC_WATCOMC && (__WATCOMC__ < 1000)) +# elif ((LZO_OS_WIN32 && defined(__PW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x030000ul))) +# elif ((LZO_OS_CYGWIN || defined(__MINGW32__)) && (LZO_CC_GNUC && (LZO_CC_GNUC < 0x025f00ul))) +# else +# define LZO_HAVE_WINDOWS_H 1 +# endif +#endif +#endif +#endif +#define LZO_SIZEOF_CHAR 1 +#ifndef LZO_SIZEOF_SHORT +#if defined(SIZEOF_SHORT) +# define LZO_SIZEOF_SHORT (SIZEOF_SHORT) +#elif defined(__SIZEOF_SHORT__) +# define LZO_SIZEOF_SHORT (__SIZEOF_SHORT__) +#endif +#endif +#ifndef LZO_SIZEOF_INT +#if defined(SIZEOF_INT) +# define LZO_SIZEOF_INT (SIZEOF_INT) +#elif defined(__SIZEOF_INT__) +# define LZO_SIZEOF_INT (__SIZEOF_INT__) +#endif +#endif +#ifndef LZO_SIZEOF_LONG +#if defined(SIZEOF_LONG) +# define LZO_SIZEOF_LONG (SIZEOF_LONG) +#elif defined(__SIZEOF_LONG__) +# define LZO_SIZEOF_LONG (__SIZEOF_LONG__) +#endif +#endif +#ifndef LZO_SIZEOF_LONG_LONG +#if defined(SIZEOF_LONG_LONG) +# define LZO_SIZEOF_LONG_LONG (SIZEOF_LONG_LONG) +#elif defined(__SIZEOF_LONG_LONG__) +# define LZO_SIZEOF_LONG_LONG (__SIZEOF_LONG_LONG__) +#endif +#endif +#ifndef LZO_SIZEOF___INT16 +#if defined(SIZEOF___INT16) +# define LZO_SIZEOF___INT16 (SIZEOF___INT16) +#endif +#endif +#ifndef LZO_SIZEOF___INT32 +#if defined(SIZEOF___INT32) +# define LZO_SIZEOF___INT32 (SIZEOF___INT32) +#endif +#endif +#ifndef LZO_SIZEOF___INT64 +#if defined(SIZEOF___INT64) +# define LZO_SIZEOF___INT64 (SIZEOF___INT64) +#endif +#endif +#ifndef LZO_SIZEOF_VOID_P +#if defined(SIZEOF_VOID_P) +# define LZO_SIZEOF_VOID_P (SIZEOF_VOID_P) +#elif defined(__SIZEOF_POINTER__) +# define LZO_SIZEOF_VOID_P (__SIZEOF_POINTER__) +#endif +#endif +#ifndef LZO_SIZEOF_SIZE_T +#if defined(SIZEOF_SIZE_T) +# define LZO_SIZEOF_SIZE_T (SIZEOF_SIZE_T) +#elif defined(__SIZEOF_SIZE_T__) +# define LZO_SIZEOF_SIZE_T (__SIZEOF_SIZE_T__) +#endif +#endif +#ifndef LZO_SIZEOF_PTRDIFF_T +#if defined(SIZEOF_PTRDIFF_T) +# define LZO_SIZEOF_PTRDIFF_T (SIZEOF_PTRDIFF_T) +#elif defined(__SIZEOF_PTRDIFF_T__) +# define LZO_SIZEOF_PTRDIFF_T (__SIZEOF_PTRDIFF_T__) +#endif +#endif +#define __LZO_LSR(x,b) (((x)+0ul) >> (b)) +#if !defined(LZO_SIZEOF_SHORT) +# if (LZO_ARCH_CRAY_PVP) +# define LZO_SIZEOF_SHORT 8 +# elif (USHRT_MAX == LZO_0xffffL) +# define LZO_SIZEOF_SHORT 2 +# elif (__LZO_LSR(USHRT_MAX,7) == 1) +# define LZO_SIZEOF_SHORT 1 +# elif (__LZO_LSR(USHRT_MAX,15) == 1) +# define LZO_SIZEOF_SHORT 2 +# elif (__LZO_LSR(USHRT_MAX,31) == 1) +# define LZO_SIZEOF_SHORT 4 +# elif (__LZO_LSR(USHRT_MAX,63) == 1) +# define LZO_SIZEOF_SHORT 8 +# elif (__LZO_LSR(USHRT_MAX,127) == 1) +# define LZO_SIZEOF_SHORT 16 +# else +# error "LZO_SIZEOF_SHORT" +# endif +#endif +LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_SHORT == sizeof(short)) +#if !defined(LZO_SIZEOF_INT) +# if (LZO_ARCH_CRAY_PVP) +# define LZO_SIZEOF_INT 8 +# elif (UINT_MAX == LZO_0xffffL) +# define LZO_SIZEOF_INT 2 +# elif (UINT_MAX == LZO_0xffffffffL) +# define LZO_SIZEOF_INT 4 +# elif (__LZO_LSR(UINT_MAX,7) == 1) +# define LZO_SIZEOF_INT 1 +# elif (__LZO_LSR(UINT_MAX,15) == 1) +# define LZO_SIZEOF_INT 2 +# elif (__LZO_LSR(UINT_MAX,31) == 1) +# define LZO_SIZEOF_INT 4 +# elif (__LZO_LSR(UINT_MAX,63) == 1) +# define LZO_SIZEOF_INT 8 +# elif (__LZO_LSR(UINT_MAX,127) == 1) +# define LZO_SIZEOF_INT 16 +# else +# error "LZO_SIZEOF_INT" +# endif +#endif +LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_INT == sizeof(int)) +#if !defined(LZO_SIZEOF_LONG) +# if (ULONG_MAX == LZO_0xffffffffL) +# define LZO_SIZEOF_LONG 4 +# elif (__LZO_LSR(ULONG_MAX,7) == 1) +# define LZO_SIZEOF_LONG 1 +# elif (__LZO_LSR(ULONG_MAX,15) == 1) +# define LZO_SIZEOF_LONG 2 +# elif (__LZO_LSR(ULONG_MAX,31) == 1) +# define LZO_SIZEOF_LONG 4 +# elif (__LZO_LSR(ULONG_MAX,39) == 1) +# define LZO_SIZEOF_LONG 5 +# elif (__LZO_LSR(ULONG_MAX,63) == 1) +# define LZO_SIZEOF_LONG 8 +# elif (__LZO_LSR(ULONG_MAX,127) == 1) +# define LZO_SIZEOF_LONG 16 +# else +# error "LZO_SIZEOF_LONG" +# endif +#endif +LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_LONG == sizeof(long)) +#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) +#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) +# if defined(__LONG_MAX__) && defined(__LONG_LONG_MAX__) +# if (LZO_CC_GNUC >= 0x030300ul) +# if ((__LONG_MAX__-0) == (__LONG_LONG_MAX__-0)) +# define LZO_SIZEOF_LONG_LONG LZO_SIZEOF_LONG +# elif (__LZO_LSR(__LONG_LONG_MAX__,30) == 1) +# define LZO_SIZEOF_LONG_LONG 4 +# endif +# endif +# endif +#endif +#endif +#if !defined(LZO_SIZEOF_LONG_LONG) && !defined(LZO_SIZEOF___INT64) +#if (LZO_SIZEOF_LONG > 0 && LZO_SIZEOF_LONG < 8) +#if (LZO_ARCH_I086 && LZO_CC_DMC) +#elif (LZO_CC_CILLY) && defined(__GNUC__) +# define LZO_SIZEOF_LONG_LONG 8 +#elif (LZO_CC_ARMCC_GNUC || LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_LLVM || LZO_CC_PATHSCALE) +# define LZO_SIZEOF_LONG_LONG 8 +#elif ((LZO_OS_WIN32 || LZO_OS_WIN64 || defined(_WIN32)) && LZO_CC_MSC && (_MSC_VER >= 1400)) +# define LZO_SIZEOF_LONG_LONG 8 +#elif (LZO_OS_WIN64 || defined(_WIN64)) +# define LZO_SIZEOF___INT64 8 +#elif (LZO_ARCH_I386 && (LZO_CC_DMC)) +# define LZO_SIZEOF_LONG_LONG 8 +#elif (LZO_ARCH_I386 && (LZO_CC_SYMANTECC && (__SC__ >= 0x700))) +# define LZO_SIZEOF_LONG_LONG 8 +#elif (LZO_ARCH_I386 && (LZO_CC_INTELC && defined(__linux__))) +# define LZO_SIZEOF_LONG_LONG 8 +#elif (LZO_ARCH_I386 && (LZO_CC_MWERKS || LZO_CC_PELLESC || LZO_CC_PGI || LZO_CC_SUNPROC)) +# define LZO_SIZEOF_LONG_LONG 8 +#elif (LZO_ARCH_I386 && (LZO_CC_INTELC || LZO_CC_MSC)) +# define LZO_SIZEOF___INT64 8 +#elif ((LZO_OS_WIN32 || defined(_WIN32)) && (LZO_CC_MSC)) +# define LZO_SIZEOF___INT64 8 +#elif (LZO_ARCH_I386 && (LZO_CC_BORLANDC && (__BORLANDC__ >= 0x0520))) +# define LZO_SIZEOF___INT64 8 +#elif (LZO_ARCH_I386 && (LZO_CC_WATCOMC && (__WATCOMC__ >= 1100))) +# define LZO_SIZEOF___INT64 8 +#elif (LZO_CC_GHS && defined(__LLONG_BIT) && ((__LLONG_BIT-0) == 64)) +# define LZO_SIZEOF_LONG_LONG 8 +#elif (LZO_CC_WATCOMC && defined(_INTEGRAL_MAX_BITS) && ((_INTEGRAL_MAX_BITS-0) == 64)) +# define LZO_SIZEOF___INT64 8 +#elif (LZO_OS_OS400 || defined(__OS400__)) && defined(__LLP64_IFC__) +# define LZO_SIZEOF_LONG_LONG 8 +#elif (defined(__vms) || defined(__VMS)) && ((__INITIAL_POINTER_SIZE-0) == 64) +# define LZO_SIZEOF_LONG_LONG 8 +#elif (LZO_CC_SDCC) && (LZO_SIZEOF_INT == 2) +#elif 1 && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +# define LZO_SIZEOF_LONG_LONG 8 +#endif +#endif +#endif +#if defined(__cplusplus) && (LZO_CC_GNUC) +# if (LZO_CC_GNUC < 0x020800ul) +# undef LZO_SIZEOF_LONG_LONG +# endif +#endif +#if (LZO_CFG_NO_LONG_LONG) +# undef LZO_SIZEOF_LONG_LONG +#elif defined(__NO_LONG_LONG) +# undef LZO_SIZEOF_LONG_LONG +#elif defined(_NO_LONGLONG) +# undef LZO_SIZEOF_LONG_LONG +#endif +#if !defined(LZO_WORDSIZE) +#if (LZO_ARCH_ALPHA) +# define LZO_WORDSIZE 8 +#elif (LZO_ARCH_AMD64) +# define LZO_WORDSIZE 8 +#elif (LZO_ARCH_ARM64) +# define LZO_WORDSIZE 8 +#elif (LZO_ARCH_AVR) +# define LZO_WORDSIZE 1 +#elif (LZO_ARCH_H8300) +# if defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) +# define LZO_WORDSIZE 4 +# else +# define LZO_WORDSIZE 2 +# endif +#elif (LZO_ARCH_I086) +# define LZO_WORDSIZE 2 +#elif (LZO_ARCH_IA64) +# define LZO_WORDSIZE 8 +#elif (LZO_ARCH_M16C) +# define LZO_WORDSIZE 2 +#elif (LZO_ARCH_SPU) +# define LZO_WORDSIZE 4 +#elif (LZO_ARCH_Z80) +# define LZO_WORDSIZE 1 +#elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) +# define LZO_WORDSIZE 8 +#elif (LZO_OS_OS400 || defined(__OS400__)) +# define LZO_WORDSIZE 8 +#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) +# define LZO_WORDSIZE 8 +#endif +#endif +#if !defined(LZO_SIZEOF_VOID_P) +#if defined(__ILP32__) || defined(__ILP32) || defined(_ILP32) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(int) == 4) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 4) +# define LZO_SIZEOF_VOID_P 4 +#elif defined(__ILP64__) || defined(__ILP64) || defined(_ILP64) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(int) == 8) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 8) +# define LZO_SIZEOF_VOID_P 8 +#elif defined(__LLP64__) || defined(__LLP64) || defined(_LLP64) || defined(_WIN64) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 4) +# define LZO_SIZEOF_VOID_P 8 +#elif defined(__LP64__) || defined(__LP64) || defined(_LP64) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(long) == 8) +# define LZO_SIZEOF_VOID_P 8 +#elif (LZO_ARCH_AVR) +# define LZO_SIZEOF_VOID_P 2 +#elif (LZO_ARCH_C166 || LZO_ARCH_MCS51 || LZO_ARCH_MCS251 || LZO_ARCH_MSP430) +# define LZO_SIZEOF_VOID_P 2 +#elif (LZO_ARCH_H8300) +# if defined(__H8300H__) || defined(__H8300S__) || defined(__H8300SX__) + LZO_COMPILE_TIME_ASSERT_HEADER(LZO_WORDSIZE == 4) +# if defined(__NORMAL_MODE__) +# define LZO_SIZEOF_VOID_P 2 +# else +# define LZO_SIZEOF_VOID_P 4 +# endif +# else + LZO_COMPILE_TIME_ASSERT_HEADER(LZO_WORDSIZE == 2) +# define LZO_SIZEOF_VOID_P 2 +# endif +# if (LZO_CC_GNUC && (LZO_CC_GNUC < 0x040000ul)) && (LZO_SIZEOF_INT == 4) +# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_INT +# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_INT +# endif +#elif (LZO_ARCH_I086) +# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM) +# define LZO_SIZEOF_VOID_P 2 +# elif (LZO_MM_COMPACT || LZO_MM_LARGE || LZO_MM_HUGE) +# define LZO_SIZEOF_VOID_P 4 +# else +# error "invalid LZO_ARCH_I086 memory model" +# endif +#elif (LZO_ARCH_M16C) +# if defined(__m32c_cpu__) || defined(__m32cm_cpu__) +# define LZO_SIZEOF_VOID_P 4 +# else +# define LZO_SIZEOF_VOID_P 2 +# endif +#elif (LZO_ARCH_SPU) +# define LZO_SIZEOF_VOID_P 4 +#elif (LZO_ARCH_Z80) +# define LZO_SIZEOF_VOID_P 2 +#elif (LZO_SIZEOF_LONG == 8) && ((defined(__mips__) && defined(__R5900__)) || defined(__MIPS_PSX2__)) +# define LZO_SIZEOF_VOID_P 4 +#elif (LZO_OS_OS400 || defined(__OS400__)) +# if defined(__LLP64_IFC__) +# define LZO_SIZEOF_VOID_P 8 +# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG +# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG +# else +# define LZO_SIZEOF_VOID_P 16 +# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG +# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG +# endif +#elif (defined(__vms) || defined(__VMS)) && (__INITIAL_POINTER_SIZE+0 == 64) +# define LZO_SIZEOF_VOID_P 8 +# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_LONG +# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_LONG +#endif +#endif +#if !defined(LZO_SIZEOF_VOID_P) +# define LZO_SIZEOF_VOID_P LZO_SIZEOF_LONG +#endif +LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_VOID_P == sizeof(void *)) +#if !defined(LZO_SIZEOF_SIZE_T) +#if (LZO_ARCH_I086 || LZO_ARCH_M16C) +# define LZO_SIZEOF_SIZE_T 2 +#endif +#endif +#if !defined(LZO_SIZEOF_SIZE_T) +# define LZO_SIZEOF_SIZE_T LZO_SIZEOF_VOID_P +#endif +#if defined(offsetof) +LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_SIZE_T == sizeof(size_t)) +#endif +#if !defined(LZO_SIZEOF_PTRDIFF_T) +#if (LZO_ARCH_I086) +# if (LZO_MM_TINY || LZO_MM_SMALL || LZO_MM_MEDIUM || LZO_MM_HUGE) +# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_VOID_P +# elif (LZO_MM_COMPACT || LZO_MM_LARGE) +# if (LZO_CC_BORLANDC || LZO_CC_TURBOC) +# define LZO_SIZEOF_PTRDIFF_T 4 +# else +# define LZO_SIZEOF_PTRDIFF_T 2 +# endif +# else +# error "invalid LZO_ARCH_I086 memory model" +# endif +#endif +#endif +#if !defined(LZO_SIZEOF_PTRDIFF_T) +# define LZO_SIZEOF_PTRDIFF_T LZO_SIZEOF_SIZE_T +#endif +#if defined(offsetof) +LZO_COMPILE_TIME_ASSERT_HEADER(LZO_SIZEOF_PTRDIFF_T == sizeof(ptrdiff_t)) +#endif +#if !defined(LZO_WORDSIZE) +# define LZO_WORDSIZE LZO_SIZEOF_VOID_P +#endif +#if (LZO_ABI_NEUTRAL_ENDIAN) +# undef LZO_ABI_BIG_ENDIAN +# undef LZO_ABI_LITTLE_ENDIAN +#elif !(LZO_ABI_BIG_ENDIAN) && !(LZO_ABI_LITTLE_ENDIAN) +#if (LZO_ARCH_ALPHA) && (LZO_ARCH_CRAY_MPP) +# define LZO_ABI_BIG_ENDIAN 1 +#elif (LZO_ARCH_IA64) && (LZO_OS_POSIX_LINUX || LZO_OS_WIN64) +# define LZO_ABI_LITTLE_ENDIAN 1 +#elif (LZO_ARCH_ALPHA || LZO_ARCH_AMD64 || LZO_ARCH_BLACKFIN || LZO_ARCH_CRIS || LZO_ARCH_I086 || LZO_ARCH_I386 || LZO_ARCH_MSP430 || LZO_ARCH_RISCV) +# define LZO_ABI_LITTLE_ENDIAN 1 +#elif (LZO_ARCH_AVR32 || LZO_ARCH_M68K || LZO_ARCH_S390 || LZO_ARCH_SPU) +# define LZO_ABI_BIG_ENDIAN 1 +#elif 1 && defined(__IAR_SYSTEMS_ICC__) && defined(__LITTLE_ENDIAN__) +# if (__LITTLE_ENDIAN__ == 1) +# define LZO_ABI_LITTLE_ENDIAN 1 +# else +# define LZO_ABI_BIG_ENDIAN 1 +# endif +#elif 1 && defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__) +# define LZO_ABI_BIG_ENDIAN 1 +#elif 1 && defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) +# define LZO_ABI_LITTLE_ENDIAN 1 +#elif 1 && (LZO_ARCH_ARM) && defined(__ARM_BIG_ENDIAN) && ((__ARM_BIG_ENDIAN)+0) +# define LZO_ABI_BIG_ENDIAN 1 +#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEB__) && !defined(__ARMEL__) +# define LZO_ABI_BIG_ENDIAN 1 +#elif 1 && (LZO_ARCH_ARM) && defined(__ARMEL__) && !defined(__ARMEB__) +# define LZO_ABI_LITTLE_ENDIAN 1 +#elif 1 && (LZO_ARCH_ARM) && defined(_MSC_VER) && defined(_WIN32) +# define LZO_ABI_LITTLE_ENDIAN 1 +#elif 1 && (LZO_ARCH_ARM && LZO_CC_ARMCC_ARMCC) +# if defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN) +# error "unexpected configuration - check your compiler defines" +# elif defined(__BIG_ENDIAN) +# define LZO_ABI_BIG_ENDIAN 1 +# else +# define LZO_ABI_LITTLE_ENDIAN 1 +# endif +# define LZO_ABI_LITTLE_ENDIAN 1 +#elif 1 && (LZO_ARCH_ARM64) && defined(__ARM_BIG_ENDIAN) && ((__ARM_BIG_ENDIAN)+0) +# define LZO_ABI_BIG_ENDIAN 1 +#elif 1 && (LZO_ARCH_ARM64) && defined(__AARCH64EB__) && !defined(__AARCH64EL__) +# define LZO_ABI_BIG_ENDIAN 1 +#elif 1 && (LZO_ARCH_ARM64) && defined(__AARCH64EL__) && !defined(__AARCH64EB__) +# define LZO_ABI_LITTLE_ENDIAN 1 +#elif 1 && (LZO_ARCH_ARM64) && defined(_MSC_VER) && defined(_WIN32) +# define LZO_ABI_LITTLE_ENDIAN 1 +#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEB__) && !defined(__MIPSEL__) +# define LZO_ABI_BIG_ENDIAN 1 +#elif 1 && (LZO_ARCH_MIPS) && defined(__MIPSEL__) && !defined(__MIPSEB__) +# define LZO_ABI_LITTLE_ENDIAN 1 +#endif +#endif +#if (LZO_ABI_BIG_ENDIAN) && (LZO_ABI_LITTLE_ENDIAN) +# error "unexpected configuration - check your compiler defines" +#endif +#if (LZO_ABI_BIG_ENDIAN) +# define LZO_INFO_ABI_ENDIAN "be" +#elif (LZO_ABI_LITTLE_ENDIAN) +# define LZO_INFO_ABI_ENDIAN "le" +#elif (LZO_ABI_NEUTRAL_ENDIAN) +# define LZO_INFO_ABI_ENDIAN "neutral" +#endif +#if (LZO_SIZEOF_INT == 1 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) +# define LZO_ABI_I8LP16 1 +# define LZO_INFO_ABI_PM "i8lp16" +#elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 2 && LZO_SIZEOF_VOID_P == 2) +# define LZO_ABI_ILP16 1 +# define LZO_INFO_ABI_PM "ilp16" +#elif (LZO_SIZEOF_INT == 2 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4) +# define LZO_ABI_LP32 1 +# define LZO_INFO_ABI_PM "lp32" +#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 4) +# define LZO_ABI_ILP32 1 +# define LZO_INFO_ABI_PM "ilp32" +#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 4 && LZO_SIZEOF_VOID_P == 8 && LZO_SIZEOF_SIZE_T == 8) +# define LZO_ABI_LLP64 1 +# define LZO_INFO_ABI_PM "llp64" +#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) +# define LZO_ABI_LP64 1 +# define LZO_INFO_ABI_PM "lp64" +#elif (LZO_SIZEOF_INT == 8 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 8) +# define LZO_ABI_ILP64 1 +# define LZO_INFO_ABI_PM "ilp64" +#elif (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_LONG == 8 && LZO_SIZEOF_VOID_P == 4) +# define LZO_ABI_IP32L64 1 +# define LZO_INFO_ABI_PM "ip32l64" +#endif +#if (LZO_SIZEOF_INT == 4 && LZO_SIZEOF_VOID_P == 4 && LZO_WORDSIZE == 8) +# define LZO_ABI_IP32W64 1 +# ifndef LZO_INFO_ABI_PM +# define LZO_INFO_ABI_PM "ip32w64" +# endif +#endif +#if 0 +#elif !defined(__LZO_LIBC_OVERRIDE) +#if (LZO_LIBC_NAKED) +# define LZO_INFO_LIBC "naked" +#elif (LZO_LIBC_FREESTANDING) +# define LZO_INFO_LIBC "freestanding" +#elif (LZO_LIBC_MOSTLY_FREESTANDING) +# define LZO_INFO_LIBC "mfreestanding" +#elif (LZO_LIBC_ISOC90) +# define LZO_INFO_LIBC "isoc90" +#elif (LZO_LIBC_ISOC99) +# define LZO_INFO_LIBC "isoc99" +#elif (LZO_CC_ARMCC_ARMCC) && defined(__ARMCLIB_VERSION) +# define LZO_LIBC_ISOC90 1 +# define LZO_INFO_LIBC "isoc90" +#elif defined(__dietlibc__) +# define LZO_LIBC_DIETLIBC 1 +# define LZO_INFO_LIBC "dietlibc" +#elif defined(_NEWLIB_VERSION) +# define LZO_LIBC_NEWLIB 1 +# define LZO_INFO_LIBC "newlib" +#elif defined(__UCLIBC__) && defined(__UCLIBC_MAJOR__) && defined(__UCLIBC_MINOR__) +# if defined(__UCLIBC_SUBLEVEL__) +# define LZO_LIBC_UCLIBC (__UCLIBC_MAJOR__ * 0x10000L + (__UCLIBC_MINOR__-0) * 0x100 + (__UCLIBC_SUBLEVEL__-0)) +# else +# define LZO_LIBC_UCLIBC 0x00090bL +# endif +# define LZO_INFO_LIBC "uc" "libc" +#elif defined(__GLIBC__) && defined(__GLIBC_MINOR__) +# define LZO_LIBC_GLIBC (__GLIBC__ * 0x10000L + (__GLIBC_MINOR__-0) * 0x100) +# define LZO_INFO_LIBC "glibc" +#elif (LZO_CC_MWERKS) && defined(__MSL__) +# define LZO_LIBC_MSL __MSL__ +# define LZO_INFO_LIBC "msl" +#elif 1 && defined(__IAR_SYSTEMS_ICC__) +# define LZO_LIBC_ISOC90 1 +# define LZO_INFO_LIBC "isoc90" +#else +# define LZO_LIBC_DEFAULT 1 +# define LZO_INFO_LIBC "default" +#endif +#endif +#if (LZO_ARCH_I386 && (LZO_OS_DOS32 || LZO_OS_WIN32) && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) +# define LZO_ASM_SYNTAX_MSC 1 +#elif (LZO_OS_WIN64 && (LZO_CC_DMC || LZO_CC_INTELC || LZO_CC_MSC || LZO_CC_PELLESC)) +#elif (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC == 0x011f00ul)) +#elif (LZO_ARCH_I386 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) +# define LZO_ASM_SYNTAX_GNUC 1 +#elif (LZO_ARCH_AMD64 && (LZO_CC_CLANG || LZO_CC_GNUC || LZO_CC_INTELC || LZO_CC_PATHSCALE)) +# define LZO_ASM_SYNTAX_GNUC 1 +#elif (LZO_CC_GNUC) +# define LZO_ASM_SYNTAX_GNUC 1 +#endif +#if (LZO_ASM_SYNTAX_GNUC) +#if (LZO_ARCH_I386 && LZO_CC_GNUC && (LZO_CC_GNUC < 0x020000ul)) +# define __LZO_ASM_CLOBBER "ax" +# define __LZO_ASM_CLOBBER_LIST_CC /*empty*/ +# define __LZO_ASM_CLOBBER_LIST_CC_MEMORY /*empty*/ +# define __LZO_ASM_CLOBBER_LIST_EMPTY /*empty*/ +#elif (LZO_CC_INTELC && (__INTEL_COMPILER < 1000)) +# define __LZO_ASM_CLOBBER "memory" +# define __LZO_ASM_CLOBBER_LIST_CC /*empty*/ +# define __LZO_ASM_CLOBBER_LIST_CC_MEMORY : "memory" +# define __LZO_ASM_CLOBBER_LIST_EMPTY /*empty*/ +#else +# define __LZO_ASM_CLOBBER "cc", "memory" +# define __LZO_ASM_CLOBBER_LIST_CC : "cc" +# define __LZO_ASM_CLOBBER_LIST_CC_MEMORY : "cc", "memory" +# define __LZO_ASM_CLOBBER_LIST_EMPTY /*empty*/ +#endif +#endif +#if (LZO_ARCH_ALPHA) +# define LZO_OPT_AVOID_UINT_INDEX 1 +#elif (LZO_ARCH_AMD64) +# define LZO_OPT_AVOID_INT_INDEX 1 +# define LZO_OPT_AVOID_UINT_INDEX 1 +# ifndef LZO_OPT_UNALIGNED16 +# define LZO_OPT_UNALIGNED16 1 +# endif +# ifndef LZO_OPT_UNALIGNED32 +# define LZO_OPT_UNALIGNED32 1 +# endif +# ifndef LZO_OPT_UNALIGNED64 +# define LZO_OPT_UNALIGNED64 1 +# endif +#elif (LZO_ARCH_ARM) +# if defined(__ARM_FEATURE_UNALIGNED) +# if ((__ARM_FEATURE_UNALIGNED)+0) +# ifndef LZO_OPT_UNALIGNED16 +# define LZO_OPT_UNALIGNED16 1 +# endif +# ifndef LZO_OPT_UNALIGNED32 +# define LZO_OPT_UNALIGNED32 1 +# endif +# endif +# elif 1 && (LZO_ARCH_ARM_THUMB2) +# ifndef LZO_OPT_UNALIGNED16 +# define LZO_OPT_UNALIGNED16 1 +# endif +# ifndef LZO_OPT_UNALIGNED32 +# define LZO_OPT_UNALIGNED32 1 +# endif +# elif 1 && defined(__ARM_ARCH) && ((__ARM_ARCH)+0 >= 7) +# ifndef LZO_OPT_UNALIGNED16 +# define LZO_OPT_UNALIGNED16 1 +# endif +# ifndef LZO_OPT_UNALIGNED32 +# define LZO_OPT_UNALIGNED32 1 +# endif +# elif 1 && defined(__TARGET_ARCH_ARM) && ((__TARGET_ARCH_ARM)+0 >= 7) +# ifndef LZO_OPT_UNALIGNED16 +# define LZO_OPT_UNALIGNED16 1 +# endif +# ifndef LZO_OPT_UNALIGNED32 +# define LZO_OPT_UNALIGNED32 1 +# endif +# elif 1 && defined(__TARGET_ARCH_ARM) && ((__TARGET_ARCH_ARM)+0 >= 6) && (defined(__TARGET_PROFILE_A) || defined(__TARGET_PROFILE_R)) +# ifndef LZO_OPT_UNALIGNED16 +# define LZO_OPT_UNALIGNED16 1 +# endif +# ifndef LZO_OPT_UNALIGNED32 +# define LZO_OPT_UNALIGNED32 1 +# endif +# elif 1 && defined(_MSC_VER) && defined(_M_ARM) && ((_M_ARM)+0 >= 7) +# ifndef LZO_OPT_UNALIGNED16 +# define LZO_OPT_UNALIGNED16 1 +# endif +# ifndef LZO_OPT_UNALIGNED32 +# define LZO_OPT_UNALIGNED32 1 +# endif +# endif +#elif (LZO_ARCH_ARM64) +# ifndef LZO_OPT_UNALIGNED16 +# define LZO_OPT_UNALIGNED16 1 +# endif +# ifndef LZO_OPT_UNALIGNED32 +# define LZO_OPT_UNALIGNED32 1 +# endif +# ifndef LZO_OPT_UNALIGNED64 +# define LZO_OPT_UNALIGNED64 1 +# endif +#elif (LZO_ARCH_CRIS) +# ifndef LZO_OPT_UNALIGNED16 +# define LZO_OPT_UNALIGNED16 1 +# endif +# ifndef LZO_OPT_UNALIGNED32 +# define LZO_OPT_UNALIGNED32 1 +# endif +#elif (LZO_ARCH_I386) +# ifndef LZO_OPT_UNALIGNED16 +# define LZO_OPT_UNALIGNED16 1 +# endif +# ifndef LZO_OPT_UNALIGNED32 +# define LZO_OPT_UNALIGNED32 1 +# endif +#elif (LZO_ARCH_IA64) +# define LZO_OPT_AVOID_INT_INDEX 1 +# define LZO_OPT_AVOID_UINT_INDEX 1 +# define LZO_OPT_PREFER_POSTINC 1 +#elif (LZO_ARCH_M68K) +# define LZO_OPT_PREFER_POSTINC 1 +# define LZO_OPT_PREFER_PREDEC 1 +# if defined(__mc68020__) && !defined(__mcoldfire__) +# ifndef LZO_OPT_UNALIGNED16 +# define LZO_OPT_UNALIGNED16 1 +# endif +# ifndef LZO_OPT_UNALIGNED32 +# define LZO_OPT_UNALIGNED32 1 +# endif +# endif +#elif (LZO_ARCH_MIPS) +# define LZO_OPT_AVOID_UINT_INDEX 1 +#elif (LZO_ARCH_POWERPC) +# define LZO_OPT_PREFER_PREINC 1 +# define LZO_OPT_PREFER_PREDEC 1 +# if (LZO_ABI_BIG_ENDIAN) || (LZO_WORDSIZE == 8) +# ifndef LZO_OPT_UNALIGNED16 +# define LZO_OPT_UNALIGNED16 1 +# endif +# ifndef LZO_OPT_UNALIGNED32 +# define LZO_OPT_UNALIGNED32 1 +# endif +# if (LZO_WORDSIZE == 8) +# ifndef LZO_OPT_UNALIGNED64 +# define LZO_OPT_UNALIGNED64 1 +# endif +# endif +# endif +#elif (LZO_ARCH_RISCV) +# define LZO_OPT_AVOID_UINT_INDEX 1 +# ifndef LZO_OPT_UNALIGNED16 +# define LZO_OPT_UNALIGNED16 1 +# endif +# ifndef LZO_OPT_UNALIGNED32 +# define LZO_OPT_UNALIGNED32 1 +# endif +# if (LZO_WORDSIZE == 8) +# ifndef LZO_OPT_UNALIGNED64 +# define LZO_OPT_UNALIGNED64 1 +# endif +# endif +#elif (LZO_ARCH_S390) +# ifndef LZO_OPT_UNALIGNED16 +# define LZO_OPT_UNALIGNED16 1 +# endif +# ifndef LZO_OPT_UNALIGNED32 +# define LZO_OPT_UNALIGNED32 1 +# endif +# if (LZO_WORDSIZE == 8) +# ifndef LZO_OPT_UNALIGNED64 +# define LZO_OPT_UNALIGNED64 1 +# endif +# endif +#elif (LZO_ARCH_SH) +# define LZO_OPT_PREFER_POSTINC 1 +# define LZO_OPT_PREFER_PREDEC 1 +#endif +#ifndef LZO_CFG_NO_INLINE_ASM +#if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC) +# define LZO_CFG_NO_INLINE_ASM 1 +#elif (LZO_CC_LLVM) +# define LZO_CFG_NO_INLINE_ASM 1 +#endif +#endif +#if (LZO_CFG_NO_INLINE_ASM) +# undef LZO_ASM_SYNTAX_MSC +# undef LZO_ASM_SYNTAX_GNUC +# undef __LZO_ASM_CLOBBER +# undef __LZO_ASM_CLOBBER_LIST_CC +# undef __LZO_ASM_CLOBBER_LIST_CC_MEMORY +# undef __LZO_ASM_CLOBBER_LIST_EMPTY +#endif +#ifndef LZO_CFG_NO_UNALIGNED +#if (LZO_ABI_NEUTRAL_ENDIAN) || (LZO_ARCH_GENERIC) +# define LZO_CFG_NO_UNALIGNED 1 +#endif +#endif +#if (LZO_CFG_NO_UNALIGNED) +# undef LZO_OPT_UNALIGNED16 +# undef LZO_OPT_UNALIGNED32 +# undef LZO_OPT_UNALIGNED64 +#endif +#if defined(__LZO_INFOSTR_MM) +#elif (LZO_MM_FLAT) && (defined(__LZO_INFOSTR_PM) || defined(LZO_INFO_ABI_PM)) +# define __LZO_INFOSTR_MM "" +#elif defined(LZO_INFO_MM) +# define __LZO_INFOSTR_MM "." LZO_INFO_MM +#else +# define __LZO_INFOSTR_MM "" +#endif +#if defined(__LZO_INFOSTR_PM) +#elif defined(LZO_INFO_ABI_PM) +# define __LZO_INFOSTR_PM "." LZO_INFO_ABI_PM +#else +# define __LZO_INFOSTR_PM "" +#endif +#if defined(__LZO_INFOSTR_ENDIAN) +#elif defined(LZO_INFO_ABI_ENDIAN) +# define __LZO_INFOSTR_ENDIAN "." LZO_INFO_ABI_ENDIAN +#else +# define __LZO_INFOSTR_ENDIAN "" +#endif +#if defined(__LZO_INFOSTR_OSNAME) +#elif defined(LZO_INFO_OS_CONSOLE) +# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_CONSOLE +#elif defined(LZO_INFO_OS_POSIX) +# define __LZO_INFOSTR_OSNAME LZO_INFO_OS "." LZO_INFO_OS_POSIX +#else +# define __LZO_INFOSTR_OSNAME LZO_INFO_OS +#endif +#if defined(__LZO_INFOSTR_LIBC) +#elif defined(LZO_INFO_LIBC) +# define __LZO_INFOSTR_LIBC "." LZO_INFO_LIBC +#else +# define __LZO_INFOSTR_LIBC "" +#endif +#if defined(__LZO_INFOSTR_CCVER) +#elif defined(LZO_INFO_CCVER) +# define __LZO_INFOSTR_CCVER " " LZO_INFO_CCVER +#else +# define __LZO_INFOSTR_CCVER "" +#endif +#define LZO_INFO_STRING \ + LZO_INFO_ARCH __LZO_INFOSTR_MM __LZO_INFOSTR_PM __LZO_INFOSTR_ENDIAN \ + " " __LZO_INFOSTR_OSNAME __LZO_INFOSTR_LIBC " " LZO_INFO_CC __LZO_INFOSTR_CCVER +#if !(LZO_CFG_SKIP_LZO_TYPES) +#if (!(LZO_SIZEOF_SHORT+0 > 0 && LZO_SIZEOF_INT+0 > 0 && LZO_SIZEOF_LONG+0 > 0)) +# error "missing defines for sizes" +#endif +#if (!(LZO_SIZEOF_PTRDIFF_T+0 > 0 && LZO_SIZEOF_SIZE_T+0 > 0 && LZO_SIZEOF_VOID_P+0 > 0)) +# error "missing defines for sizes" +#endif +#define LZO_TYPEOF_CHAR 1u +#define LZO_TYPEOF_SHORT 2u +#define LZO_TYPEOF_INT 3u +#define LZO_TYPEOF_LONG 4u +#define LZO_TYPEOF_LONG_LONG 5u +#define LZO_TYPEOF___INT8 17u +#define LZO_TYPEOF___INT16 18u +#define LZO_TYPEOF___INT32 19u +#define LZO_TYPEOF___INT64 20u +#define LZO_TYPEOF___INT128 21u +#define LZO_TYPEOF___INT256 22u +#define LZO_TYPEOF___MODE_QI 33u +#define LZO_TYPEOF___MODE_HI 34u +#define LZO_TYPEOF___MODE_SI 35u +#define LZO_TYPEOF___MODE_DI 36u +#define LZO_TYPEOF___MODE_TI 37u +#define LZO_TYPEOF_CHAR_P 129u +#if !defined(lzo_llong_t) +#if (LZO_SIZEOF_LONG_LONG+0 > 0) +# if !(LZO_LANG_ASSEMBLER) + __lzo_gnuc_extension__ typedef long long lzo_llong_t__; + __lzo_gnuc_extension__ typedef unsigned long long lzo_ullong_t__; +# endif +# define lzo_llong_t lzo_llong_t__ +# define lzo_ullong_t lzo_ullong_t__ +#endif +#endif +#if !defined(lzo_int16e_t) +#if (LZO_CFG_PREFER_TYPEOF_ACC_INT16E_T == LZO_TYPEOF_SHORT) && (LZO_SIZEOF_SHORT != 2) +# undef LZO_CFG_PREFER_TYPEOF_ACC_INT16E_T +#endif +#if (LZO_SIZEOF_LONG == 2) && !(LZO_CFG_PREFER_TYPEOF_ACC_INT16E_T == LZO_TYPEOF_SHORT) +# define lzo_int16e_t long +# define lzo_uint16e_t unsigned long +# define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF_LONG +#elif (LZO_SIZEOF_INT == 2) && !(LZO_CFG_PREFER_TYPEOF_ACC_INT16E_T == LZO_TYPEOF_SHORT) +# define lzo_int16e_t int +# define lzo_uint16e_t unsigned int +# define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF_INT +#elif (LZO_SIZEOF_SHORT == 2) +# define lzo_int16e_t short int +# define lzo_uint16e_t unsigned short int +# define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF_SHORT +#elif 1 && !(LZO_CFG_TYPE_NO_MODE_HI) && (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x025f00ul) || LZO_CC_LLVM) +# if !(LZO_LANG_ASSEMBLER) + typedef int lzo_int16e_hi_t__ __attribute__((__mode__(__HI__))); + typedef unsigned int lzo_uint16e_hi_t__ __attribute__((__mode__(__HI__))); +# endif +# define lzo_int16e_t lzo_int16e_hi_t__ +# define lzo_uint16e_t lzo_uint16e_hi_t__ +# define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF___MODE_HI +#elif (LZO_SIZEOF___INT16 == 2) +# define lzo_int16e_t __int16 +# define lzo_uint16e_t unsigned __int16 +# define LZO_TYPEOF_LZO_INT16E_T LZO_TYPEOF___INT16 +#else +#endif +#endif +#if defined(lzo_int16e_t) +# define LZO_SIZEOF_LZO_INT16E_T 2 + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16e_t) == 2) + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16e_t) == LZO_SIZEOF_LZO_INT16E_T) +#endif +#if !defined(lzo_int32e_t) +#if (LZO_CFG_PREFER_TYPEOF_ACC_INT32E_T == LZO_TYPEOF_INT) && (LZO_SIZEOF_INT != 4) +# undef LZO_CFG_PREFER_TYPEOF_ACC_INT32E_T +#endif +#if (LZO_SIZEOF_LONG == 4) && !(LZO_CFG_PREFER_TYPEOF_ACC_INT32E_T == LZO_TYPEOF_INT) +# define lzo_int32e_t long int +# define lzo_uint32e_t unsigned long int +# define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF_LONG +#elif (LZO_SIZEOF_INT == 4) +# define lzo_int32e_t int +# define lzo_uint32e_t unsigned int +# define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF_INT +#elif (LZO_SIZEOF_SHORT == 4) +# define lzo_int32e_t short int +# define lzo_uint32e_t unsigned short int +# define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF_SHORT +#elif (LZO_SIZEOF_LONG_LONG == 4) +# define lzo_int32e_t lzo_llong_t +# define lzo_uint32e_t lzo_ullong_t +# define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF_LONG_LONG +#elif 1 && !(LZO_CFG_TYPE_NO_MODE_SI) && (LZO_CC_CLANG || (LZO_CC_GNUC >= 0x025f00ul) || LZO_CC_LLVM) && (__INT_MAX__+0 > 2147483647L) +# if !(LZO_LANG_ASSEMBLER) + typedef int lzo_int32e_si_t__ __attribute__((__mode__(__SI__))); + typedef unsigned int lzo_uint32e_si_t__ __attribute__((__mode__(__SI__))); +# endif +# define lzo_int32e_t lzo_int32e_si_t__ +# define lzo_uint32e_t lzo_uint32e_si_t__ +# define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF___MODE_SI +#elif 1 && !(LZO_CFG_TYPE_NO_MODE_SI) && (LZO_CC_GNUC >= 0x025f00ul) && defined(__AVR__) && (__LONG_MAX__+0 == 32767L) +# if !(LZO_LANG_ASSEMBLER) + typedef int lzo_int32e_si_t__ __attribute__((__mode__(__SI__))); + typedef unsigned int lzo_uint32e_si_t__ __attribute__((__mode__(__SI__))); +# endif +# define lzo_int32e_t lzo_int32e_si_t__ +# define lzo_uint32e_t lzo_uint32e_si_t__ +# define LZO_INT32_C(c) (c##LL) +# define LZO_UINT32_C(c) (c##ULL) +# define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF___MODE_SI +#elif (LZO_SIZEOF___INT32 == 4) +# define lzo_int32e_t __int32 +# define lzo_uint32e_t unsigned __int32 +# define LZO_TYPEOF_LZO_INT32E_T LZO_TYPEOF___INT32 +#else +#endif +#endif +#if defined(lzo_int32e_t) +# define LZO_SIZEOF_LZO_INT32E_T 4 + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32e_t) == 4) + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32e_t) == LZO_SIZEOF_LZO_INT32E_T) +#endif +#if !defined(lzo_int64e_t) +#if (LZO_SIZEOF___INT64 == 8) +# if (LZO_CC_BORLANDC) && !defined(LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T) +# define LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T LZO_TYPEOF___INT64 +# endif +#endif +#if (LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T == LZO_TYPEOF_LONG_LONG) && (LZO_SIZEOF_LONG_LONG != 8) +# undef LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T +#endif +#if (LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T == LZO_TYPEOF___INT64) && (LZO_SIZEOF___INT64 != 8) +# undef LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T +#endif +#if (LZO_SIZEOF_INT == 8) && (LZO_SIZEOF_INT < LZO_SIZEOF_LONG) +# define lzo_int64e_t int +# define lzo_uint64e_t unsigned int +# define LZO_TYPEOF_LZO_INT64E_T LZO_TYPEOF_INT +#elif (LZO_SIZEOF_LONG == 8) && !(LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T == LZO_TYPEOF_LONG_LONG) && !(LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T == LZO_TYPEOF___INT64) +# define lzo_int64e_t long int +# define lzo_uint64e_t unsigned long int +# define LZO_TYPEOF_LZO_INT64E_T LZO_TYPEOF_LONG +#elif (LZO_SIZEOF_LONG_LONG == 8) && !(LZO_CFG_PREFER_TYPEOF_ACC_INT64E_T == LZO_TYPEOF___INT64) +# define lzo_int64e_t lzo_llong_t +# define lzo_uint64e_t lzo_ullong_t +# define LZO_TYPEOF_LZO_INT64E_T LZO_TYPEOF_LONG_LONG +# if (LZO_CC_BORLANDC) +# define LZO_INT64_C(c) ((c) + 0ll) +# define LZO_UINT64_C(c) ((c) + 0ull) +# elif 0 +# define LZO_INT64_C(c) (__lzo_gnuc_extension__ (c##LL)) +# define LZO_UINT64_C(c) (__lzo_gnuc_extension__ (c##ULL)) +# else +# define LZO_INT64_C(c) (c##LL) +# define LZO_UINT64_C(c) (c##ULL) +# endif +#elif (LZO_SIZEOF___INT64 == 8) +# define lzo_int64e_t __int64 +# define lzo_uint64e_t unsigned __int64 +# define LZO_TYPEOF_LZO_INT64E_T LZO_TYPEOF___INT64 +# if (LZO_CC_BORLANDC) +# define LZO_INT64_C(c) ((c) + 0i64) +# define LZO_UINT64_C(c) ((c) + 0ui64) +# else +# define LZO_INT64_C(c) (c##i64) +# define LZO_UINT64_C(c) (c##ui64) +# endif +#else +#endif +#endif +#if defined(lzo_int64e_t) +# define LZO_SIZEOF_LZO_INT64E_T 8 + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64e_t) == 8) + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64e_t) == LZO_SIZEOF_LZO_INT64E_T) +#endif +#if !defined(lzo_int32l_t) +#if defined(lzo_int32e_t) +# define lzo_int32l_t lzo_int32e_t +# define lzo_uint32l_t lzo_uint32e_t +# define LZO_SIZEOF_LZO_INT32L_T LZO_SIZEOF_LZO_INT32E_T +# define LZO_TYPEOF_LZO_INT32L_T LZO_TYPEOF_LZO_INT32E_T +#elif (LZO_SIZEOF_INT >= 4) && (LZO_SIZEOF_INT < LZO_SIZEOF_LONG) +# define lzo_int32l_t int +# define lzo_uint32l_t unsigned int +# define LZO_SIZEOF_LZO_INT32L_T LZO_SIZEOF_INT +# define LZO_TYPEOF_LZO_INT32L_T LZO_SIZEOF_INT +#elif (LZO_SIZEOF_LONG >= 4) +# define lzo_int32l_t long int +# define lzo_uint32l_t unsigned long int +# define LZO_SIZEOF_LZO_INT32L_T LZO_SIZEOF_LONG +# define LZO_TYPEOF_LZO_INT32L_T LZO_SIZEOF_LONG +#else +# error "lzo_int32l_t" +#endif +#endif +#if 1 + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32l_t) >= 4) + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32l_t) == LZO_SIZEOF_LZO_INT32L_T) +#endif +#if !defined(lzo_int64l_t) +#if defined(lzo_int64e_t) +# define lzo_int64l_t lzo_int64e_t +# define lzo_uint64l_t lzo_uint64e_t +# define LZO_SIZEOF_LZO_INT64L_T LZO_SIZEOF_LZO_INT64E_T +# define LZO_TYPEOF_LZO_INT64L_T LZO_TYPEOF_LZO_INT64E_T +#else +#endif +#endif +#if defined(lzo_int64l_t) + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64l_t) >= 8) + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64l_t) == LZO_SIZEOF_LZO_INT64L_T) +#endif +#if !defined(lzo_int32f_t) +#if (LZO_SIZEOF_SIZE_T >= 8) +# define lzo_int32f_t lzo_int64l_t +# define lzo_uint32f_t lzo_uint64l_t +# define LZO_SIZEOF_LZO_INT32F_T LZO_SIZEOF_LZO_INT64L_T +# define LZO_TYPEOF_LZO_INT32F_T LZO_TYPEOF_LZO_INT64L_T +#else +# define lzo_int32f_t lzo_int32l_t +# define lzo_uint32f_t lzo_uint32l_t +# define LZO_SIZEOF_LZO_INT32F_T LZO_SIZEOF_LZO_INT32L_T +# define LZO_TYPEOF_LZO_INT32F_T LZO_TYPEOF_LZO_INT32L_T +#endif +#endif +#if 1 + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32f_t) >= 4) + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32f_t) == LZO_SIZEOF_LZO_INT32F_T) +#endif +#if !defined(lzo_int64f_t) +#if defined(lzo_int64l_t) +# define lzo_int64f_t lzo_int64l_t +# define lzo_uint64f_t lzo_uint64l_t +# define LZO_SIZEOF_LZO_INT64F_T LZO_SIZEOF_LZO_INT64L_T +# define LZO_TYPEOF_LZO_INT64F_T LZO_TYPEOF_LZO_INT64L_T +#else +#endif +#endif +#if defined(lzo_int64f_t) + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64f_t) >= 8) + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64f_t) == LZO_SIZEOF_LZO_INT64F_T) +#endif +#if !defined(lzo_intptr_t) +#if 1 && (LZO_OS_OS400 && (LZO_SIZEOF_VOID_P == 16)) +# define __LZO_INTPTR_T_IS_POINTER 1 +# if !(LZO_LANG_ASSEMBLER) + typedef char * lzo_intptr_t; + typedef char * lzo_uintptr_t; +# endif +# define lzo_intptr_t lzo_intptr_t +# define lzo_uintptr_t lzo_uintptr_t +# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_VOID_P +# define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_CHAR_P +#elif (LZO_CC_MSC && (_MSC_VER >= 1300) && (LZO_SIZEOF_VOID_P == 4) && (LZO_SIZEOF_INT == 4)) +# if !(LZO_LANG_ASSEMBLER) + typedef __w64 int lzo_intptr_t; + typedef __w64 unsigned int lzo_uintptr_t; +# endif +# define lzo_intptr_t lzo_intptr_t +# define lzo_uintptr_t lzo_uintptr_t +# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_INT +# define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_INT +#elif (LZO_SIZEOF_SHORT == LZO_SIZEOF_VOID_P) && (LZO_SIZEOF_INT > LZO_SIZEOF_VOID_P) +# define lzo_intptr_t short +# define lzo_uintptr_t unsigned short +# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_SHORT +# define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_SHORT +#elif (LZO_SIZEOF_INT >= LZO_SIZEOF_VOID_P) && (LZO_SIZEOF_INT < LZO_SIZEOF_LONG) +# define lzo_intptr_t int +# define lzo_uintptr_t unsigned int +# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_INT +# define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_INT +#elif (LZO_SIZEOF_LONG >= LZO_SIZEOF_VOID_P) +# define lzo_intptr_t long +# define lzo_uintptr_t unsigned long +# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_LONG +# define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_LONG +#elif (LZO_SIZEOF_LZO_INT64L_T >= LZO_SIZEOF_VOID_P) +# define lzo_intptr_t lzo_int64l_t +# define lzo_uintptr_t lzo_uint64l_t +# define LZO_SIZEOF_LZO_INTPTR_T LZO_SIZEOF_LZO_INT64L_T +# define LZO_TYPEOF_LZO_INTPTR_T LZO_TYPEOF_LZO_INT64L_T +#else +# error "lzo_intptr_t" +#endif +#endif +#if 1 + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_intptr_t) >= sizeof(void *)) + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_intptr_t) == sizeof(lzo_uintptr_t)) +#endif +#if !defined(lzo_word_t) +#if defined(LZO_WORDSIZE) && (LZO_WORDSIZE+0 > 0) +#if (LZO_WORDSIZE == LZO_SIZEOF_LZO_INTPTR_T) && !(__LZO_INTPTR_T_IS_POINTER) +# define lzo_word_t lzo_uintptr_t +# define lzo_sword_t lzo_intptr_t +# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_LZO_INTPTR_T +# define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_LZO_INTPTR_T +#elif (LZO_WORDSIZE == LZO_SIZEOF_LONG) +# define lzo_word_t unsigned long +# define lzo_sword_t long +# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_LONG +# define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_LONG +#elif (LZO_WORDSIZE == LZO_SIZEOF_INT) +# define lzo_word_t unsigned int +# define lzo_sword_t int +# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_INT +# define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_INT +#elif (LZO_WORDSIZE == LZO_SIZEOF_SHORT) +# define lzo_word_t unsigned short +# define lzo_sword_t short +# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_SHORT +# define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_SHORT +#elif (LZO_WORDSIZE == 1) +# define lzo_word_t unsigned char +# define lzo_sword_t signed char +# define LZO_SIZEOF_LZO_WORD_T 1 +# define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF_CHAR +#elif (LZO_WORDSIZE == LZO_SIZEOF_LZO_INT64L_T) +# define lzo_word_t lzo_uint64l_t +# define lzo_sword_t lzo_int64l_t +# define LZO_SIZEOF_LZO_WORD_T LZO_SIZEOF_LZO_INT64L_T +# define LZO_TYPEOF_LZO_WORD_T LZO_SIZEOF_LZO_INT64L_T +#elif (LZO_ARCH_SPU) && (LZO_CC_GNUC) +#if 0 +# if !(LZO_LANG_ASSEMBLER) + typedef unsigned lzo_word_t __attribute__((__mode__(__V16QI__))); + typedef int lzo_sword_t __attribute__((__mode__(__V16QI__))); +# endif +# define lzo_word_t lzo_word_t +# define lzo_sword_t lzo_sword_t +# define LZO_SIZEOF_LZO_WORD_T 16 +# define LZO_TYPEOF_LZO_WORD_T LZO_TYPEOF___MODE_V16QI +#endif +#else +# error "lzo_word_t" +#endif +#endif +#endif +#if 1 && defined(lzo_word_t) + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_word_t) == LZO_WORDSIZE) + LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_sword_t) == LZO_WORDSIZE) +#endif +#if 1 +#define lzo_int8_t signed char +#define lzo_uint8_t unsigned char +#define LZO_SIZEOF_LZO_INT8_T 1 +#define LZO_TYPEOF_LZO_INT8_T LZO_TYPEOF_CHAR +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int8_t) == 1) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int8_t) == sizeof(lzo_uint8_t)) +#endif +#if defined(lzo_int16e_t) +#define lzo_int16_t lzo_int16e_t +#define lzo_uint16_t lzo_uint16e_t +#define LZO_SIZEOF_LZO_INT16_T LZO_SIZEOF_LZO_INT16E_T +#define LZO_TYPEOF_LZO_INT16_T LZO_TYPEOF_LZO_INT16E_T +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16_t) == 2) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int16_t) == sizeof(lzo_uint16_t)) +#endif +#if defined(lzo_int32e_t) +#define lzo_int32_t lzo_int32e_t +#define lzo_uint32_t lzo_uint32e_t +#define LZO_SIZEOF_LZO_INT32_T LZO_SIZEOF_LZO_INT32E_T +#define LZO_TYPEOF_LZO_INT32_T LZO_TYPEOF_LZO_INT32E_T +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32_t) == 4) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int32_t) == sizeof(lzo_uint32_t)) +#endif +#if defined(lzo_int64e_t) +#define lzo_int64_t lzo_int64e_t +#define lzo_uint64_t lzo_uint64e_t +#define LZO_SIZEOF_LZO_INT64_T LZO_SIZEOF_LZO_INT64E_T +#define LZO_TYPEOF_LZO_INT64_T LZO_TYPEOF_LZO_INT64E_T +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64_t) == 8) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int64_t) == sizeof(lzo_uint64_t)) +#endif +#if 1 +#define lzo_int_least32_t lzo_int32l_t +#define lzo_uint_least32_t lzo_uint32l_t +#define LZO_SIZEOF_LZO_INT_LEAST32_T LZO_SIZEOF_LZO_INT32L_T +#define LZO_TYPEOF_LZO_INT_LEAST32_T LZO_TYPEOF_LZO_INT32L_T +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least32_t) >= 4) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least32_t) == sizeof(lzo_uint_least32_t)) +#endif +#if defined(lzo_int64l_t) +#define lzo_int_least64_t lzo_int64l_t +#define lzo_uint_least64_t lzo_uint64l_t +#define LZO_SIZEOF_LZO_INT_LEAST64_T LZO_SIZEOF_LZO_INT64L_T +#define LZO_TYPEOF_LZO_INT_LEAST64_T LZO_TYPEOF_LZO_INT64L_T +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least64_t) >= 8) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_least64_t) == sizeof(lzo_uint_least64_t)) +#endif +#if 1 +#define lzo_int_fast32_t lzo_int32f_t +#define lzo_uint_fast32_t lzo_uint32f_t +#define LZO_SIZEOF_LZO_INT_FAST32_T LZO_SIZEOF_LZO_INT32F_T +#define LZO_TYPEOF_LZO_INT_FAST32_T LZO_TYPEOF_LZO_INT32F_T +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast32_t) >= 4) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast32_t) == sizeof(lzo_uint_fast32_t)) +#endif +#if defined(lzo_int64f_t) +#define lzo_int_fast64_t lzo_int64f_t +#define lzo_uint_fast64_t lzo_uint64f_t +#define LZO_SIZEOF_LZO_INT_FAST64_T LZO_SIZEOF_LZO_INT64F_T +#define LZO_TYPEOF_LZO_INT_FAST64_T LZO_TYPEOF_LZO_INT64F_T +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast64_t) >= 8) +LZO_COMPILE_TIME_ASSERT_HEADER(sizeof(lzo_int_fast64_t) == sizeof(lzo_uint_fast64_t)) +#endif +#if !defined(LZO_INT16_C) +# if (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_INT >= 2) +# define LZO_INT16_C(c) ((c) + 0) +# define LZO_UINT16_C(c) ((c) + 0U) +# elif (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_LONG >= 2) +# define LZO_INT16_C(c) ((c) + 0L) +# define LZO_UINT16_C(c) ((c) + 0UL) +# elif (LZO_SIZEOF_INT >= 2) +# define LZO_INT16_C(c) (c) +# define LZO_UINT16_C(c) (c##U) +# elif (LZO_SIZEOF_LONG >= 2) +# define LZO_INT16_C(c) (c##L) +# define LZO_UINT16_C(c) (c##UL) +# else +# error "LZO_INT16_C" +# endif +#endif +#if !defined(LZO_INT32_C) +# if (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_INT >= 4) +# define LZO_INT32_C(c) ((c) + 0) +# define LZO_UINT32_C(c) ((c) + 0U) +# elif (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_LONG >= 4) +# define LZO_INT32_C(c) ((c) + 0L) +# define LZO_UINT32_C(c) ((c) + 0UL) +# elif (LZO_SIZEOF_INT >= 4) +# define LZO_INT32_C(c) (c) +# define LZO_UINT32_C(c) (c##U) +# elif (LZO_SIZEOF_LONG >= 4) +# define LZO_INT32_C(c) (c##L) +# define LZO_UINT32_C(c) (c##UL) +# elif (LZO_SIZEOF_LONG_LONG >= 4) +# define LZO_INT32_C(c) (c##LL) +# define LZO_UINT32_C(c) (c##ULL) +# else +# error "LZO_INT32_C" +# endif +#endif +#if !defined(LZO_INT64_C) && defined(lzo_int64l_t) +# if (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_INT >= 8) +# define LZO_INT64_C(c) ((c) + 0) +# define LZO_UINT64_C(c) ((c) + 0U) +# elif (LZO_BROKEN_INTEGRAL_CONSTANTS) && (LZO_SIZEOF_LONG >= 8) +# define LZO_INT64_C(c) ((c) + 0L) +# define LZO_UINT64_C(c) ((c) + 0UL) +# elif (LZO_SIZEOF_INT >= 8) +# define LZO_INT64_C(c) (c) +# define LZO_UINT64_C(c) (c##U) +# elif (LZO_SIZEOF_LONG >= 8) +# define LZO_INT64_C(c) (c##L) +# define LZO_UINT64_C(c) (c##UL) +# else +# error "LZO_INT64_C" +# endif +#endif +#endif + +#endif /* already included */ + +/* vim:set ts=4 sw=4 et: */ diff --git a/tools/z64compress/src/enc/stretchy_buffer.h b/tools/z64compress/src/enc/stretchy_buffer.h new file mode 100644 index 0000000..cbd48a3 --- /dev/null +++ b/tools/z64compress/src/enc/stretchy_buffer.h @@ -0,0 +1,262 @@ +// stretchy_buffer.h - v1.03 - public domain - nothings.org/stb +// a vector<>-like dynamic array for C +// +// version history: +// 1.03 - compile as C++ maybe +// 1.02 - tweaks to syntax for no good reason +// 1.01 - added a "common uses" documentation section +// 1.0 - fixed bug in the version I posted prematurely +// 0.9 - rewrite to try to avoid strict-aliasing optimization +// issues, but won't compile as C++ +// +// Will probably not work correctly with strict-aliasing optimizations. +// +// The idea: +// +// This implements an approximation to C++ vector<> for C, in that it +// provides a generic definition for dynamic arrays which you can +// still access in a typesafe way using arr[i] or *(arr+i). However, +// it is simply a convenience wrapper around the common idiom of +// of keeping a set of variables (in a struct or globals) which store +// - pointer to array +// - the length of the "in-use" part of the array +// - the current size of the allocated array +// +// I find it to be the single most useful non-built-in-structure when +// programming in C (hash tables a close second), but to be clear +// it lacks many of the capabilities of C++ vector<>: there is no +// range checking, the object address isn't stable (see next section +// for details), the set of methods available is small (although +// the file stb.h has another implementation of stretchy buffers +// called 'stb_arr' which provides more methods, e.g. for insertion +// and deletion). +// +// How to use: +// +// Unlike other stb header file libraries, there is no need to +// define an _IMPLEMENTATION symbol. Every #include creates as +// much implementation is needed. +// +// stretchy_buffer.h does not define any types, so you do not +// need to #include it to before defining data types that are +// stretchy buffers, only in files that *manipulate* stretchy +// buffers. +// +// If you want a stretchy buffer aka dynamic array containing +// objects of TYPE, declare such an array as: +// +// TYPE *myarray = NULL; +// +// (There is no typesafe way to distinguish between stretchy +// buffers and regular arrays/pointers; this is necessary to +// make ordinary array indexing work on these objects.) +// +// Unlike C++ vector<>, the stretchy_buffer has the same +// semantics as an object that you manually malloc and realloc. +// The pointer may relocate every time you add a new object +// to it, so you: +// +// 1. can't take long-term pointers to elements of the array +// 2. have to return the pointer from functions which might expand it +// (either as a return value or by storing it to a ptr-to-ptr) +// +// Now you can do the following things with this array: +// +// sb_free(TYPE *a) free the array +// sb_count(TYPE *a) the number of elements in the array +// sb_push(TYPE *a, TYPE v) adds v on the end of the array, a la push_back +// sb_add(TYPE *a, int n) adds n uninitialized elements at end of array & returns pointer to first added +// sb_last(TYPE *a) returns an lvalue of the last item in the array +// a[n] access the nth (counting from 0) element of the array +// +// #define STRETCHY_BUFFER_NO_SHORT_NAMES to only export +// names of the form 'stb_sb_' if you have a name that would +// otherwise collide. +// +// Note that these are all macros and many of them evaluate +// their arguments more than once, so the arguments should +// be side-effect-free. +// +// Note that 'TYPE *a' in sb_push and sb_add must be lvalues +// so that the library can overwrite the existing pointer if +// the object has to be reallocated. +// +// In an out-of-memory condition, the code will try to +// set up a null-pointer or otherwise-invalid-pointer +// exception to happen later. It's possible optimizing +// compilers could detect this write-to-null statically +// and optimize away some of the code, but it should only +// be along the failure path. Nevertheless, for more security +// in the face of such compilers, #define STRETCHY_BUFFER_OUT_OF_MEMORY +// to a statement such as assert(0) or exit(1) or something +// to force a failure when out-of-memory occurs. +// +// Common use: +// +// The main application for this is when building a list of +// things with an unknown quantity, either due to loading from +// a file or through a process which produces an unpredictable +// number. +// +// My most common idiom is something like: +// +// SomeStruct *arr = NULL; +// while (something) +// { +// SomeStruct new_one; +// new_one.whatever = whatever; +// new_one.whatup = whatup; +// new_one.foobar = barfoo; +// sb_push(arr, new_one); +// } +// +// and various closely-related factorings of that. For example, +// you might have several functions to create/init new SomeStructs, +// and if you use the above idiom, you might prefer to make them +// return structs rather than take non-const-pointers-to-structs, +// so you can do things like: +// +// SomeStruct *arr = NULL; +// while (something) +// { +// if (case_A) { +// sb_push(arr, some_func1()); +// } else if (case_B) { +// sb_push(arr, some_func2()); +// } else { +// sb_push(arr, some_func3()); +// } +// } +// +// Note that the above relies on the fact that sb_push doesn't +// evaluate its second argument more than once. The macros do +// evaluate the *array* argument multiple times, and numeric +// arguments may be evaluated multiple times, but you can rely +// on the second argument of sb_push being evaluated only once. +// +// Of course, you don't have to store bare objects in the array; +// if you need the objects to have stable pointers, store an array +// of pointers instead: +// +// SomeStruct **arr = NULL; +// while (something) +// { +// SomeStruct *new_one = malloc(sizeof(*new_one)); +// new_one->whatever = whatever; +// new_one->whatup = whatup; +// new_one->foobar = barfoo; +// sb_push(arr, new_one); +// } +// +// How it works: +// +// A long-standing tradition in things like malloc implementations +// is to store extra data before the beginning of the block returned +// to the user. The stretchy buffer implementation here uses the +// same trick; the current-count and current-allocation-size are +// stored before the beginning of the array returned to the user. +// (This means you can't directly free() the pointer, because the +// allocated pointer is different from the type-safe pointer provided +// to the user.) +// +// The details are trivial and implementation is straightforward; +// the main trick is in realizing in the first place that it's +// possible to do this in a generic, type-safe way in C. +// +// Contributors: +// +// Timothy Wright (github:ZenToad) +// +// LICENSE +// +// See end of file for license information. + +#ifndef STB_STRETCHY_BUFFER_H_INCLUDED +#define STB_STRETCHY_BUFFER_H_INCLUDED + +#ifndef NO_STRETCHY_BUFFER_SHORT_NAMES +#define sb_free stb_sb_free +#define sb_push stb_sb_push +#define sb_count stb_sb_count +#define sb_add stb_sb_add +#define sb_last stb_sb_last +#endif + +#define stb_sb_free(a) ((a) ? free(stb__sbraw(a)),0 : 0) +#define stb_sb_push(a,v) (stb__sbmaybegrow(a,1), (a)[stb__sbn(a)++] = (v)) +#define stb_sb_count(a) ((a) ? stb__sbn(a) : 0) +#define stb_sb_add(a,n) (stb__sbmaybegrow(a,n), stb__sbn(a)+=(n), &(a)[stb__sbn(a)-(n)]) +#define stb_sb_last(a) ((a)[stb__sbn(a)-1]) + +#define stb__sbraw(a) ((int *) (a) - 2) +#define stb__sbm(a) stb__sbraw(a)[0] +#define stb__sbn(a) stb__sbraw(a)[1] + +#define stb__sbneedgrow(a,n) ((a)==0 || stb__sbn(a)+(n) >= stb__sbm(a)) +#define stb__sbmaybegrow(a,n) (stb__sbneedgrow(a,(n)) ? stb__sbgrow(a,n) : 0) +#define stb__sbgrow(a,n) (*((void **)&(a)) = stb__sbgrowf((a), (n), sizeof(*(a)))) + +#include <stdlib.h> + +static void * stb__sbgrowf(void *arr, int increment, int itemsize) +{ + int dbl_cur = arr ? 2*stb__sbm(arr) : 0; + int min_needed = stb_sb_count(arr) + increment; + int m = dbl_cur > min_needed ? dbl_cur : min_needed; + int *p = (int *) realloc(arr ? stb__sbraw(arr) : 0, itemsize * m + sizeof(int)*2); + if (p) { + if (!arr) + p[1] = 0; + p[0] = m; + return p+2; + } else { + #ifdef STRETCHY_BUFFER_OUT_OF_MEMORY + STRETCHY_BUFFER_OUT_OF_MEMORY ; + #endif + return (void *) (2*sizeof(int)); // try to force a NULL pointer exception later + } +} +#endif // STB_STRETCHY_BUFFER_H_INCLUDED + + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ diff --git a/tools/z64compress/src/enc/ucl.c b/tools/z64compress/src/enc/ucl.c new file mode 100644 index 0000000..59b6936 --- /dev/null +++ b/tools/z64compress/src/enc/ucl.c @@ -0,0 +1,50 @@ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include "ucl/ucl.h" + +int +uclenc( + void *_src + , unsigned src_sz + , void *_dst + , unsigned *dst_sz + , void *_ctx +) +{ + unsigned char *src = _src; + unsigned char *dst = _dst; + int r; + int level = 10; + ucl_uint result_sz; + + int hlen = 8; /* header length; required due to MM's archives */ + memset(dst, 0, hlen); + memcpy(dst, "UCL0", 4); + dst[4] = (src_sz >> 24); + dst[5] = (src_sz >> 16); + dst[6] = (src_sz >> 8); + dst[7] = (src_sz >> 0); + + r = ucl_nrv2b_99_compress( + src /* in */ + , src_sz /* in size */ + , dst + hlen /* out */ + , &result_sz /* out size */ + , NULL /* callback */ + , level /* level */ + , NULL /* conf */ + , NULL /* result */ + ); + + if (r != UCL_E_OK) + { + fprintf(stderr, "[!] fatal compression error %d\n", r); + exit(EXIT_FAILURE); + } + + *dst_sz = result_sz + hlen; + + return 0; +} + diff --git a/tools/z64compress/src/enc/ucl/comp/n2_99.ch b/tools/z64compress/src/enc/ucl/comp/n2_99.ch new file mode 100644 index 0000000..06c5c64 --- /dev/null +++ b/tools/z64compress/src/enc/ucl/comp/n2_99.ch @@ -0,0 +1,651 @@ +/* n2_99.ch -- implementation of the NRV2[BDE]-99 compression algorithms + + This file is part of the UCL data compression library. + + Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The UCL library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The UCL library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the UCL library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/ucl/ + */ + + + +#define HAVE_MEMCMP 1 +#define HAVE_MEMCPY 1 +#define HAVE_MEMMOVE 1 +#define HAVE_MEMSET 1 + + +#include "../ucl_conf.h" +#include "../ucl.h" + +#include <stdlib.h> +#include <string.h> +#include <stddef.h> +#include <assert.h> + + +/*********************************************************************** +// +************************************************************************/ + +#define SWD_USE_MALLOC 1 +#if (ACC_OS_DOS16) +#define SWD_HMASK (s->hmask) +#define HEAD2_VAR +#define IF_HEAD2(s) if (s->use_head2) +#else +#define SWD_HMASK (UCL_UINT32_C(65535)) +#define IF_HEAD2(s) +#endif +#define SWD_N (8*1024*1024ul) /* max. size of ring buffer */ +#define SWD_F 2048 /* upper limit for match length */ +#define SWD_THRESHOLD 1 /* lower limit for match length */ + +#if defined(NRV2B) +# define UCL_COMPRESS_T ucl_nrv2b_t +# define ucl_swd_t ucl_nrv2b_swd_t +# define ucl_nrv_99_compress ucl_nrv2b_99_compress +# define M2_MAX_OFFSET 0xd00 +#elif defined(NRV2D) +# define UCL_COMPRESS_T ucl_nrv2d_t +# define ucl_swd_t ucl_nrv2d_swd_t +# define ucl_nrv_99_compress ucl_nrv2d_99_compress +# define M2_MAX_OFFSET 0x500 +#elif defined(NRV2E) +# define UCL_COMPRESS_T ucl_nrv2e_t +# define ucl_swd_t ucl_nrv2e_swd_t +# define ucl_nrv_99_compress ucl_nrv2e_99_compress +# define M2_MAX_OFFSET 0x500 +#else +# error +#endif +#define ucl_swd_p ucl_swd_t * __UCL_MMODEL + +#include "ucl_mchw.ch" + + +/*********************************************************************** +// start-step-stop prefix coding +************************************************************************/ + +static void code_prefix_ss11(UCL_COMPRESS_T *c, ucl_uint32 i) +{ + if (i >= 2) + { + ucl_uint32 t = 4; + i += 2; + do { + t <<= 1; + } while (i >= t); + t >>= 1; + do { + t >>= 1; + bbPutBit(c, (i & t) ? 1 : 0); + bbPutBit(c, 0); + } while (t > 2); + } + bbPutBit(c, (unsigned)i & 1); + bbPutBit(c, 1); +} + + +#if defined(NRV2D) || defined(NRV2E) +static void code_prefix_ss12(UCL_COMPRESS_T *c, ucl_uint32 i) +{ + if (i >= 2) + { + ucl_uint32 t = 2; + do { + i -= t; + t <<= 2; + } while (i >= t); + do { + t >>= 1; + bbPutBit(c, (i & t) ? 1 : 0); + bbPutBit(c, 0); + t >>= 1; + bbPutBit(c, (i & t) ? 1 : 0); + } while (t > 2); + } + bbPutBit(c, (unsigned)i & 1); + bbPutBit(c, 1); +} +#endif + + +static void +code_match(UCL_COMPRESS_T *c, ucl_uint m_len, const ucl_uint m_off) +{ + unsigned m_low = 0; + + while (m_len > c->conf.max_match) + { + code_match(c, c->conf.max_match - 3, m_off); + m_len -= c->conf.max_match - 3; + } + + c->match_bytes += m_len; + if (m_len > c->result[3]) + c->result[3] = m_len; + if (m_off > c->result[1]) + c->result[1] = m_off; + + bbPutBit(c, 0); + +#if defined(NRV2B) + if (m_off == c->last_m_off) + { + bbPutBit(c, 0); + bbPutBit(c, 1); + } + else + { + code_prefix_ss11(c, 1 + ((m_off - 1) >> 8)); + bbPutByte(c, (unsigned)m_off - 1); + } + m_len = m_len - 1 - (m_off > M2_MAX_OFFSET); + if (m_len >= 4) + { + bbPutBit(c,0); + bbPutBit(c,0); + code_prefix_ss11(c, m_len - 4); + } + else + { + bbPutBit(c, m_len > 1); + bbPutBit(c, (unsigned)m_len & 1); + } +#elif defined(NRV2D) + m_len = m_len - 1 - (m_off > M2_MAX_OFFSET); + assert(m_len > 0); + m_low = (m_len >= 4) ? 0u : (unsigned) m_len; + if (m_off == c->last_m_off) + { + bbPutBit(c, 0); + bbPutBit(c, 1); + bbPutBit(c, m_low > 1); + bbPutBit(c, m_low & 1); + } + else + { + code_prefix_ss12(c, 1 + ((m_off - 1) >> 7)); + bbPutByte(c, ((((unsigned)m_off - 1) & 0x7f) << 1) | ((m_low > 1) ? 0 : 1)); + bbPutBit(c, m_low & 1); + } + if (m_len >= 4) + code_prefix_ss11(c, m_len - 4); +#elif defined(NRV2E) + m_len = m_len - 1 - (m_off > M2_MAX_OFFSET); + assert(m_len > 0); + m_low = (m_len <= 2); + if (m_off == c->last_m_off) + { + bbPutBit(c, 0); + bbPutBit(c, 1); + bbPutBit(c, m_low); + } + else + { + code_prefix_ss12(c, 1 + ((m_off - 1) >> 7)); + bbPutByte(c, ((((unsigned)m_off - 1) & 0x7f) << 1) | (m_low ^ 1)); + } + if (m_low) + bbPutBit(c, (unsigned)m_len - 1); + else if (m_len <= 4) + { + bbPutBit(c, 1); + bbPutBit(c, (unsigned)m_len - 3); + } + else + { + bbPutBit(c, 0); + code_prefix_ss11(c, m_len - 5); + } +#else +# error +#endif + + c->last_m_off = m_off; + (void)m_low; +} + + +static void +code_run(UCL_COMPRESS_T *c, const ucl_bytep ii, ucl_uint lit) +{ + if (lit == 0) + return; + c->lit_bytes += lit; + if (lit > c->result[5]) + c->result[5] = lit; + do { + bbPutBit(c, 1); + bbPutByte(c, *ii++); + } while (--lit > 0); +} + + +/*********************************************************************** +// +************************************************************************/ + +static int +len_of_coded_match(UCL_COMPRESS_T *c, ucl_uint m_len, ucl_uint m_off) +{ + int b; + if (m_len < 2 || (m_len == 2 && (m_off > M2_MAX_OFFSET)) + || m_off > c->conf.max_offset) + return -1; + assert(m_off > 0); + + m_len = m_len - 2 - (m_off > M2_MAX_OFFSET); + + if (m_off == c->last_m_off) + b = 1 + 2; + else + { +#if defined(NRV2B) + b = 1 + 10; + m_off = (m_off - 1) >> 8; + while (m_off > 0) + { + b += 2; + m_off >>= 1; + } +#elif defined(NRV2D) || defined(NRV2E) + b = 1 + 9; + m_off = (m_off - 1) >> 7; + while (m_off > 0) + { + b += 3; + m_off >>= 2; + } +#else +# error +#endif + } + +#if defined(NRV2B) || defined(NRV2D) + b += 2; + if (m_len < 3) + return b; + m_len -= 3; +#elif defined(NRV2E) + b += 2; + if (m_len < 2) + return b; + if (m_len < 4) + return b + 1; + m_len -= 4; +#else +# error +#endif + do { + b += 2; + m_len >>= 1; + } while (m_len > 0); + + return b; +} + + +/*********************************************************************** +// +************************************************************************/ + +#if !defined(NDEBUG) +static +void assert_match( const ucl_swd_p swd, ucl_uint m_len, ucl_uint m_off ) +{ + const UCL_COMPRESS_T *c = swd->c; + ucl_uint d_off; + + assert(m_len >= 2); + if (m_off <= (ucl_uint) (c->bp - c->in)) + { + assert(c->bp - m_off + m_len < c->ip); + assert(ucl_memcmp(c->bp, c->bp - m_off, m_len) == 0); + } + else + { + assert(swd->dict != NULL); + d_off = m_off - (ucl_uint) (c->bp - c->in); + assert(d_off <= swd->dict_len); + if (m_len > d_off) + { + assert(ucl_memcmp(c->bp, swd->dict_end - d_off, d_off) == 0); + assert(c->in + m_len - d_off < c->ip); + assert(ucl_memcmp(c->bp + d_off, c->in, m_len - d_off) == 0); + } + else + { + assert(ucl_memcmp(c->bp, swd->dict_end - d_off, m_len) == 0); + } + } +} +#else +# define assert_match(a,b,c) ((void)0) +#endif + + +#if defined(SWD_BEST_OFF) + +static void +better_match ( const ucl_swd_p swd, ucl_uint *m_len, ucl_uint *m_off ) +{ +} + +#endif + + +/*********************************************************************** +// +************************************************************************/ + +UCL_PUBLIC(int) +ucl_nrv_99_compress ( const ucl_bytep in, ucl_uint in_len, + ucl_bytep out, ucl_uintp out_len, + ucl_progress_callback_p cb, + int level, + const struct ucl_compress_config_p conf, + ucl_uintp result) +{ + const ucl_bytep ii; + ucl_uint lit; + ucl_uint m_len, m_off; + UCL_COMPRESS_T c_buffer; + UCL_COMPRESS_T * const c = &c_buffer; +#undef s +#if defined(SWD_USE_MALLOC) + ucl_swd_t the_swd = {0}; +# define s (&the_swd) +#else +// static ucl_swd_p s = 0; +#endif + ucl_uint result_buffer[16]; + int r; + + struct swd_config_t + { + unsigned try_lazy; + ucl_uint good_length; + ucl_uint max_lazy; + ucl_uint nice_length; + ucl_uint max_chain; + ucl_uint32 flags; + ucl_uint32 max_offset; + }; + const struct swd_config_t *sc; + static const struct swd_config_t swd_config[10] = { +#define F SWD_F + /* faster compression */ + { 0, 0, 0, 8, 4, 0, 48*1024L }, + { 0, 0, 0, 16, 8, 0, 48*1024L }, + { 0, 0, 0, 32, 16, 0, 48*1024L }, + { 1, 4, 4, 16, 16, 0, 48*1024L }, + { 1, 8, 16, 32, 32, 0, 48*1024L }, + { 1, 8, 16, 128, 128, 0, 48*1024L }, + { 2, 8, 32, 128, 256, 0, 128*1024L }, + { 2, 32, 128, F, 2048, 1, 128*1024L }, + { 2, 32, 128, F, 2048, 1, 256*1024L }, + { 2, F, F, F, 4096, 1, SWD_N } + /* max. compression */ +#undef F + }; + + if (level < 1 || level > 10) + return UCL_E_INVALID_ARGUMENT; + sc = &swd_config[level - 1]; + + memset(c, 0, sizeof(*c)); + memset(&c->conf, 0xff, sizeof(c->conf)); + c->ip = c->in = in; + c->in_end = in + in_len; + c->out = out; + if (cb && cb->callback) + c->cb = cb; + cb = NULL; + c->result = result ? result : (ucl_uintp) result_buffer; + result = NULL; + ucl_memset(c->result, 0, 16*sizeof(*c->result)); + c->result[0] = c->result[2] = c->result[4] = UCL_UINT_MAX; + if (conf) + ucl_memcpy(&c->conf, conf, sizeof(c->conf)); + conf = NULL; + r = bbConfig(c, 0, 8); + if (r == 0) + r = bbConfig(c, c->conf.bb_endian, c->conf.bb_size); + if (r != 0) + return UCL_E_INVALID_ARGUMENT; + c->bb_op = out; + + ii = c->ip; /* point to start of literal run */ + lit = 0; + +#if !defined(s) + if (!s) + s = (ucl_swd_p) ucl_malloc(ucl_sizeof(*s)); + if (!s) + return UCL_E_OUT_OF_MEMORY; + memset(s, 0, ucl_sizeof(*s)); +#endif + s->f = UCL_MIN((ucl_uint)SWD_F, c->conf.max_match); + s->n = UCL_MIN((ucl_uint)SWD_N, sc->max_offset); + s->hmask = UCL_UINT32_C(65535); +#ifdef HEAD2_VAR + s->use_head2 = 1; +#if defined(ACC_MM_AHSHIFT) + if (ACC_MM_AHSHIFT != 3) { + s->hmask = 16 * 1024 - 1; + s->use_head2 = 0; + } +#endif +#endif + if (c->conf.max_offset != UCL_UINT_MAX) + s->n = UCL_MIN(SWD_N, c->conf.max_offset); + if (in_len < s->n) + s->n = UCL_MAX(in_len, 256); + if (s->f < 8 || s->n < 256) + return UCL_E_INVALID_ARGUMENT; + r = init_match(c,s,NULL,0,sc->flags); + if (r == UCL_E_OK && (SWD_HSIZE - 1 != s->hmask)) + r = UCL_E_ERROR; + if (r != UCL_E_OK) + { +#if !defined(s) + ucl_free(s); +#endif + return r; + } + if (sc->max_chain > 0) + s->max_chain = sc->max_chain; + if (sc->nice_length > 0) + s->nice_length = sc->nice_length; + if (c->conf.max_match < s->nice_length) + s->nice_length = c->conf.max_match; + + if (c->cb) + (*c->cb->callback)(0,0,-1,c->cb->user); + + c->last_m_off = 1; + r = find_match(c,s,0,0); + if (r != UCL_E_OK) + return r; + while (c->look > 0) + { + ucl_uint ahead; + ucl_uint max_ahead; + int l1, l2; + + c->codesize = (ucl_uint) (c->bb_op - out); + + m_len = c->m_len; + m_off = c->m_off; + + assert(c->bp == c->ip - c->look); + assert(c->bp >= in); + if (lit == 0) + ii = c->bp; + assert(ii + lit == c->bp); + assert(s->b_char == *(c->bp)); + + if (m_len < 2 || (m_len == 2 && (m_off > M2_MAX_OFFSET)) + || m_off > c->conf.max_offset) + { + /* a literal */ + lit++; + s->max_chain = sc->max_chain; + r = find_match(c,s,1,0); + assert(r == 0); + continue; + } + + /* a match */ +#if defined(SWD_BEST_OFF) + if (s->use_best_off) + better_match(s,&m_len,&m_off); +#endif + assert_match(s,m_len,m_off); + + /* shall we try a lazy match ? */ + ahead = 0; + if (sc->try_lazy <= 0 || m_len >= sc->max_lazy || m_off == c->last_m_off) + { + /* no */ + l1 = 0; + max_ahead = 0; + } + else + { + /* yes, try a lazy match */ + l1 = len_of_coded_match(c,m_len,m_off); + assert(l1 > 0); + max_ahead = UCL_MIN((ucl_uint)sc->try_lazy, m_len - 1); + } + + while (ahead < max_ahead && c->look > m_len) + { + if (m_len >= sc->good_length) + s->max_chain = sc->max_chain >> 2; + else + s->max_chain = sc->max_chain; + r = find_match(c,s,1,0); + ahead++; + + assert(r == 0); + assert(c->look > 0); + assert(ii + lit + ahead == c->bp); + + if (c->m_len < 2) + continue; +#if defined(SWD_BEST_OFF) + if (s->use_best_off) + better_match(s,&c->m_len,&c->m_off); +#endif + l2 = len_of_coded_match(c,c->m_len,c->m_off); + if (l2 < 0) + continue; +#if 1 + if (l1 + (int)(ahead + c->m_len - m_len) * 5 > l2 + (int)(ahead) * 9) +#else + if (l1 > l2) +#endif + { + c->lazy++; + assert_match(s,c->m_len,c->m_off); + +#if 0 + if (l3 > 0) + { + /* code previous run */ + code_run(c,ii,lit); + lit = 0; + /* code shortened match */ + code_match(c,ahead,m_off); + } + else +#endif + { + lit += ahead; + assert(ii + lit == c->bp); + } + goto lazy_match_done; + } + } + + assert(ii + lit + ahead == c->bp); + + /* 1 - code run */ + code_run(c,ii,lit); + lit = 0; + + /* 2 - code match */ + code_match(c,m_len,m_off); + s->max_chain = sc->max_chain; + r = find_match(c,s,m_len,1+ahead); + assert(r == 0); + +lazy_match_done: ; + } + + /* store final run */ + code_run(c,ii,lit); + + /* EOF */ + bbPutBit(c, 0); +#if defined(NRV2B) + code_prefix_ss11(c, UCL_UINT32_C(0x1000000)); + bbPutByte(c, 0xff); +#elif defined(NRV2D) || defined(NRV2E) + code_prefix_ss12(c, UCL_UINT32_C(0x1000000)); + bbPutByte(c, 0xff); +#else +# error +#endif + bbFlushBits(c, 0); + + assert(c->textsize == in_len); + c->codesize = (ucl_uint) (c->bb_op - out); + *out_len = (ucl_uint) (c->bb_op - out); + if (c->cb) + (*c->cb->callback)(c->textsize,c->codesize,4,c->cb->user); + +#if 0 + printf("%7ld %7ld -> %7ld %7ld %7ld %ld (max: %d %d %d)\n", + (long) c->textsize, (long) in_len, (long) c->codesize, + c->match_bytes, c->lit_bytes, c->lazy, + c->result[1], c->result[3], c->result[5]); +#endif + assert(c->lit_bytes + c->match_bytes == in_len); + + swd_exit(s); +#if !defined(s) + ucl_free(s); +#endif + return UCL_E_OK; +#undef s +} + + +/* +vi:ts=4:et +*/ + diff --git a/tools/z64compress/src/enc/ucl/comp/n2b_99.c b/tools/z64compress/src/enc/ucl/comp/n2b_99.c new file mode 100644 index 0000000..e3b11cc --- /dev/null +++ b/tools/z64compress/src/enc/ucl/comp/n2b_99.c @@ -0,0 +1,38 @@ +/* n2b_99.c -- implementation of the NRV2B-99 compression algorithm + + This file is part of the UCL data compression library. + + Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The UCL library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The UCL library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the UCL library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/ucl/ + */ + + + +#define NRV2B +#include "n2_99.ch" +#undef NRV2B + + +/* +vi:ts=4:et +*/ + diff --git a/tools/z64compress/src/enc/ucl/comp/ucl_mchw.ch b/tools/z64compress/src/enc/ucl/comp/ucl_mchw.ch new file mode 100644 index 0000000..c462576 --- /dev/null +++ b/tools/z64compress/src/enc/ucl/comp/ucl_mchw.ch @@ -0,0 +1,312 @@ +/* ucl_mchw.ch -- matching functions using a window + + This file is part of the UCL data compression library. + + Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The UCL library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The UCL library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the UCL library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/ucl/ + */ + + +/*********************************************************************** +// +************************************************************************/ + +typedef struct +{ + int init; + + ucl_uint look; /* bytes in lookahead buffer */ + + ucl_uint m_len; + ucl_uint m_off; + + ucl_uint last_m_len; + ucl_uint last_m_off; + + const ucl_bytep bp; + const ucl_bytep ip; + const ucl_bytep in; + const ucl_bytep in_end; + ucl_bytep out; + + ucl_uint32 bb_b; + unsigned bb_k; + unsigned bb_c_endian; + unsigned bb_c_s; + unsigned bb_c_s8; + ucl_bytep bb_p; + ucl_bytep bb_op; + + struct ucl_compress_config_t conf; + ucl_uintp result; + + ucl_progress_callback_p cb; + + ucl_uint textsize; /* text size counter */ + ucl_uint codesize; /* code size counter */ + ucl_uint printcount; /* counter for reporting progress every 1K bytes */ + + /* some stats */ + unsigned long lit_bytes; + unsigned long match_bytes; + unsigned long rep_bytes; + unsigned long lazy; +} +UCL_COMPRESS_T; + + + +#if (ACC_OS_TOS && (ACC_CC_PUREC || ACC_CC_TURBOC)) +/* the cast is needed to work around a code generation bug */ +#define getbyte(c) ((c).ip < (c).in_end ? (int) (unsigned) *((c).ip)++ : (-1)) +#else +#define getbyte(c) ((c).ip < (c).in_end ? *((c).ip)++ : (-1)) +#endif + +#include "ucl_swd.ch" + + + +/*********************************************************************** +// +************************************************************************/ + +static int +init_match ( UCL_COMPRESS_T *c, ucl_swd_t *s, + const ucl_bytep dict, ucl_uint dict_len, + ucl_uint32 flags ) +{ + int r; + + assert(!c->init); + c->init = 1; + + s->c = c; + + c->last_m_len = c->last_m_off = 0; + + c->textsize = c->codesize = c->printcount = 0; + c->lit_bytes = c->match_bytes = c->rep_bytes = 0; + c->lazy = 0; + + r = swd_init(s,dict,dict_len); + if (r != UCL_E_OK) + { + swd_exit(s); + return r; + } + + s->use_best_off = (flags & 1) ? 1 : 0; + return UCL_E_OK; +} + + +/*********************************************************************** +// +************************************************************************/ + +static int +find_match ( UCL_COMPRESS_T *c, ucl_swd_t *s, + ucl_uint this_len, ucl_uint skip ) +{ + assert(c->init); + + if (skip > 0) + { + assert(this_len >= skip); + swd_accept(s, this_len - skip); + c->textsize += this_len - skip + 1; + } + else + { + assert(this_len <= 1); + c->textsize += this_len - skip; + } + + s->m_len = SWD_THRESHOLD; +#ifdef SWD_BEST_OFF + if (s->use_best_off) + memset(s->best_pos,0,sizeof(s->best_pos)); +#endif + swd_findbest(s); + c->m_len = s->m_len; +#if defined(__UCL_CHECKER) + /* s->m_off may be uninitialized if we didn't find a match, + * but then its value will never be used. + */ + c->m_off = (s->m_len == SWD_THRESHOLD) ? 0 : s->m_off; +#else + c->m_off = s->m_off; +#endif + + swd_getbyte(s); + + if (s->b_char < 0) + { + c->look = 0; + c->m_len = 0; + swd_exit(s); + } + else + { + c->look = s->look + 1; + } + c->bp = c->ip - c->look; + +#if 0 + /* brute force match search */ + if (c->m_len > SWD_THRESHOLD && c->m_len + 1 <= c->look) + { + const ucl_bytep ip = c->bp; + const ucl_bytep m = c->bp - c->m_off; + const ucl_bytep in = c->in; + + if (ip - in > s->n) + in = ip - s->n; + for (;;) + { + while (*in != *ip) + in++; + if (in == ip) + break; + if (in != m) + if (memcmp(in,ip,c->m_len+1) == 0) + printf("%p %p %p %5d\n",in,ip,m,c->m_len); + in++; + } + } +#endif + + if (c->cb && c->textsize > c->printcount) + { + (*c->cb->callback)(c->textsize,c->codesize,3,c->cb->user); + c->printcount += 1024; + } + + return UCL_E_OK; +} + + +/*********************************************************************** +// bit buffer +************************************************************************/ + +static int bbConfig(UCL_COMPRESS_T *c, int endian, int bitsize) +{ + if (endian != -1) + { + if (endian != 0) + return UCL_E_ERROR; + c->bb_c_endian = endian; + } + if (bitsize != -1) + { + if (bitsize != 8 && bitsize != 16 && bitsize != 32) + return UCL_E_ERROR; + c->bb_c_s = bitsize; + c->bb_c_s8 = bitsize / 8; + } + c->bb_b = 0; c->bb_k = 0; + c->bb_p = NULL; + c->bb_op = NULL; + return UCL_E_OK; +} + + +static void bbWriteBits(UCL_COMPRESS_T *c) +{ + ucl_bytep p = c->bb_p; + ucl_uint32 b = c->bb_b; + + p[0] = UCL_BYTE(b >> 0); + if (c->bb_c_s >= 16) + { + p[1] = UCL_BYTE(b >> 8); + if (c->bb_c_s == 32) + { + p[2] = UCL_BYTE(b >> 16); + p[3] = UCL_BYTE(b >> 24); + } + } +} + + +static void bbPutBit(UCL_COMPRESS_T *c, unsigned bit) +{ + assert(bit == 0 || bit == 1); + assert(c->bb_k <= c->bb_c_s); + + if (c->bb_k < c->bb_c_s) + { + if (c->bb_k == 0) + { + assert(c->bb_p == NULL); + c->bb_p = c->bb_op; + c->bb_op += c->bb_c_s8; + } + assert(c->bb_p != NULL); + assert(c->bb_p + c->bb_c_s8 <= c->bb_op); + + c->bb_b = (c->bb_b << 1) + bit; + c->bb_k++; + } + else + { + assert(c->bb_p != NULL); + assert(c->bb_p + c->bb_c_s8 <= c->bb_op); + + bbWriteBits(c); + c->bb_p = c->bb_op; + c->bb_op += c->bb_c_s8; + c->bb_b = bit; + c->bb_k = 1; + } +} + + +static void bbPutByte(UCL_COMPRESS_T *c, unsigned b) +{ + /**printf("putbyte %p %p %x (%d)\n", op, bb_p, x, bb_k);*/ + assert(c->bb_p == NULL || c->bb_p + c->bb_c_s8 <= c->bb_op); + *c->bb_op++ = UCL_BYTE(b); +} + + +static void bbFlushBits(UCL_COMPRESS_T *c, unsigned filler_bit) +{ + if (c->bb_k > 0) + { + assert(c->bb_k <= c->bb_c_s); + while (c->bb_k != c->bb_c_s) + bbPutBit(c, filler_bit); + bbWriteBits(c); + c->bb_k = 0; + } + c->bb_p = NULL; +} + + + +/* +vi:ts=4:et +*/ + diff --git a/tools/z64compress/src/enc/ucl/comp/ucl_swd.ch b/tools/z64compress/src/enc/ucl/comp/ucl_swd.ch new file mode 100644 index 0000000..8b82941 --- /dev/null +++ b/tools/z64compress/src/enc/ucl/comp/ucl_swd.ch @@ -0,0 +1,686 @@ +/* ucl_swd.c -- sliding window dictionary + + This file is part of the UCL data compression library. + + Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The UCL library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The UCL library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the UCL library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/ucl/ + */ + + +#if (UCL_UINT_MAX < UCL_0xffffffffL) +# error "UCL_UINT_MAX" +#endif + + +/*********************************************************************** +// +************************************************************************/ + +/* unsigned type for dictionary access - don't waste memory here */ +#if (0UL + SWD_N + SWD_F + SWD_F < 0UL + USHRT_MAX) + typedef unsigned short swd_uint; +# define SWD_UINT_MAX USHRT_MAX +#else + typedef ucl_uint swd_uint; +# define SWD_UINT_MAX UCL_UINT_MAX +#endif +#define swd_uintp swd_uint __UCL_MMODEL * +#define SWD_UINT(x) ((swd_uint)(x)) + + +#ifndef SWD_MAX_CHAIN +# define SWD_MAX_CHAIN 2048 +#endif +#define SWD_HSIZE (SWD_HMASK + 1) + +#if !defined(HEAD3) +#if 1 +# define HEAD3(b,p) \ + (((0x9f5f*(((((ucl_uint32)b[p]<<5)^b[p+1])<<5)^b[p+2]))>>5) & SWD_HMASK) +#else +# define HEAD3(b,p) \ + (((0x9f5f*(((((ucl_uint32)b[p+2]<<5)^b[p+1])<<5)^b[p]))>>5) & SWD_HMASK) +#endif +#endif + +#if !defined(HEAD2) +#if (SWD_THRESHOLD == 1) +# if 1 && defined(UA_GET2) +# define HEAD2(b,p) UA_GET2(&(b[p])) +# else +# define HEAD2(b,p) (b[p] ^ ((unsigned)b[p+1]<<8)) +# endif +# define NIL2 SWD_UINT_MAX +#endif +#endif + + +#if defined(__UCL_CHECKER) + /* malloc arrays of the exact size to detect any overrun */ +# ifndef SWD_USE_MALLOC +# define SWD_USE_MALLOC +# endif +#endif + + +typedef struct +{ +/* public - "built-in" */ + ucl_uint n; + ucl_uint f; + ucl_uint threshold; + ucl_uint hmask; + +/* public - configuration */ + ucl_uint max_chain; + ucl_uint nice_length; + ucl_bool use_best_off; + ucl_uint lazy_insert; + +/* public - output */ + ucl_uint m_len; + ucl_uint m_off; + ucl_uint look; + int b_char; +#if defined(SWD_BEST_OFF) + ucl_uint best_off[ SWD_BEST_OFF ]; +#endif + +/* semi public */ + UCL_COMPRESS_T *c; + ucl_uint m_pos; +#if defined(SWD_BEST_OFF) + ucl_uint best_pos[ SWD_BEST_OFF ]; +#endif + +/* private */ + const ucl_bytep dict; + const ucl_bytep dict_end; + ucl_uint dict_len; + +/* private */ + ucl_uint ip; /* input pointer (lookahead) */ + ucl_uint bp; /* buffer pointer */ + ucl_uint rp; /* remove pointer */ + ucl_uint b_size; + + ucl_bytep b_wrap; + + ucl_uint node_count; + ucl_uint first_rp; + +#if defined(SWD_USE_MALLOC) + ucl_bytep b; + swd_uintp head3; + swd_uintp succ3; + swd_uintp best3; + swd_uintp llen3; +#ifdef HEAD2 + swd_uintp head2; +#ifdef HEAD2_VAR + int use_head2; +#endif +#endif +#else + unsigned char b [ SWD_N + SWD_F + SWD_F ]; + swd_uint head3 [ SWD_HSIZE ]; + swd_uint succ3 [ SWD_N + SWD_F ]; + swd_uint best3 [ SWD_N + SWD_F ]; + swd_uint llen3 [ SWD_HSIZE ]; +#ifdef HEAD2 + swd_uint head2 [ UCL_UINT32_C(65536) ]; +#endif +#endif +} +ucl_swd_t; + + +/* Access macro for head3. + * head3[key] may be uninitialized if the list is emtpy, + * but then its value will never be used. + */ +#if defined(__UCL_CHECKER) +# define s_get_head3(s,key) \ + ((s->llen3[key] == 0) ? SWD_UINT_MAX : s->head3[key]) +#else +# define s_get_head3(s,key) s->head3[key] +#endif + + +/*********************************************************************** +// +************************************************************************/ + +static +void swd_initdict(ucl_swd_t *s, const ucl_bytep dict, ucl_uint dict_len) +{ + s->dict = s->dict_end = NULL; + s->dict_len = 0; + + if (!dict || dict_len <= 0) + return; + if (dict_len > s->n) + { + dict += dict_len - s->n; + dict_len = s->n; + } + + s->dict = dict; + s->dict_len = dict_len; + s->dict_end = dict + dict_len; + ucl_memcpy(s->b,dict,dict_len); + s->ip = dict_len; +} + + +static +void swd_insertdict(ucl_swd_t *s, ucl_uint node, ucl_uint len) +{ + ucl_uint key; + + s->node_count = s->n - len; + s->first_rp = node; + + while (len-- > 0) + { + key = HEAD3(s->b,node); + s->succ3[node] = s_get_head3(s,key); + s->head3[key] = SWD_UINT(node); + s->best3[node] = SWD_UINT(s->f + 1); + s->llen3[key]++; + assert(s->llen3[key] <= s->n); + +#ifdef HEAD2 + IF_HEAD2(s) { + key = HEAD2(s->b,node); + s->head2[key] = SWD_UINT(node); + } +#endif + + node++; + } +} + + +/*********************************************************************** +// +************************************************************************/ + +static +int swd_init(ucl_swd_t *s, const ucl_bytep dict, ucl_uint dict_len) +{ +#if defined(SWD_USE_MALLOC) + s->b = NULL; + s->head3 = NULL; + s->succ3 = NULL; + s->best3 = NULL; + s->llen3 = NULL; +#ifdef HEAD2 + s->head2 = NULL; +#endif +#endif + + if (s->n == 0) + s->n = SWD_N; + if (s->f == 0) + s->f = SWD_F; + s->threshold = SWD_THRESHOLD; + if (s->n > SWD_N || s->f > SWD_F) + return UCL_E_INVALID_ARGUMENT; + +#if defined(SWD_USE_MALLOC) + s->b = (ucl_bytep) ucl_alloc(1, s->n + s->f + s->f); + s->head3 = (swd_uintp) ucl_alloc(SWD_HSIZE, sizeof(*s->head3)); + s->succ3 = (swd_uintp) ucl_alloc(s->n + s->f, sizeof(*s->succ3)); + s->best3 = (swd_uintp) ucl_alloc(s->n + s->f, sizeof(*s->best3)); + s->llen3 = (swd_uintp) ucl_alloc(SWD_HSIZE, sizeof(*s->llen3)); + if (!s->b || !s->head3 || !s->succ3 || !s->best3 || !s->llen3) + return UCL_E_OUT_OF_MEMORY; +#ifdef HEAD2 + IF_HEAD2(s) { + s->head2 = (swd_uintp) ucl_alloc(UCL_UINT32_C(65536), sizeof(*s->head2)); + if (!s->head2) + return UCL_E_OUT_OF_MEMORY; + } +#endif +#endif + + /* defaults */ + s->max_chain = SWD_MAX_CHAIN; + s->nice_length = s->f; + s->use_best_off = 0; + s->lazy_insert = 0; + + s->b_size = s->n + s->f; + if (s->b_size + s->f >= SWD_UINT_MAX) + return UCL_E_ERROR; + s->b_wrap = s->b + s->b_size; + s->node_count = s->n; + + ucl_memset(s->llen3, 0, (ucl_uint)sizeof(s->llen3[0]) * SWD_HSIZE); +#ifdef HEAD2 + IF_HEAD2(s) { +#if 1 + ucl_memset(s->head2, 0xff, (ucl_uint)sizeof(s->head2[0]) * UCL_UINT32_C(65536)); + assert(s->head2[0] == NIL2); +#else + ucl_uint32 i; + for (i = 0; i < UCL_UINT32_C(65536); i++) + s->head2[i] = NIL2; +#endif + } +#endif + + s->ip = 0; + swd_initdict(s,dict,dict_len); + s->bp = s->ip; + s->first_rp = s->ip; + + assert(s->ip + s->f <= s->b_size); +#if 1 + s->look = (ucl_uint) (s->c->in_end - s->c->ip); + if (s->look > 0) + { + if (s->look > s->f) + s->look = s->f; + ucl_memcpy(&s->b[s->ip],s->c->ip,s->look); + s->c->ip += s->look; + s->ip += s->look; + } +#else + s->look = 0; + while (s->look < s->f) + { + int c; + if ((c = getbyte(*(s->c))) < 0) + break; + s->b[s->ip] = UCL_BYTE(c); + s->ip++; + s->look++; + } +#endif + if (s->ip == s->b_size) + s->ip = 0; + + if (s->look >= 2 && s->dict_len > 0) + swd_insertdict(s,0,s->dict_len); + + s->rp = s->first_rp; + if (s->rp >= s->node_count) + s->rp -= s->node_count; + else + s->rp += s->b_size - s->node_count; + +#if defined(__UCL_CHECKER) + /* initialize memory for the first few HEAD3 (if s->ip is not far + * enough ahead to do this job for us). The value doesn't matter. */ + if (s->look < 3) + ucl_memset(&s->b[s->bp+s->look],0,3); +#endif + + return UCL_E_OK; +} + + +static +void swd_exit(ucl_swd_t *s) +{ +#if defined(SWD_USE_MALLOC) + /* free in reverse order of allocations */ +# ifdef HEAD2 + ucl_free(s->head2); s->head2 = NULL; +#endif + ucl_free(s->llen3); s->llen3 = NULL; + ucl_free(s->best3); s->best3 = NULL; + ucl_free(s->succ3); s->succ3 = NULL; + ucl_free(s->head3); s->head3 = NULL; + ucl_free(s->b); s->b = NULL; +#else + //ACC_UNUSED(s); +#endif +} + + +#define swd_pos2off(s,pos) \ + (s->bp > (pos) ? s->bp - (pos) : s->b_size - ((pos) - s->bp)) + + +/*********************************************************************** +// +************************************************************************/ + +static +void swd_getbyte(ucl_swd_t *s) +{ + int c; + + if ((c = getbyte(*(s->c))) < 0) + { + if (s->look > 0) + --s->look; +#if defined(__UCL_CHECKER) + /* initialize memory - value doesn't matter */ + s->b[s->ip] = 0; + if (s->ip < s->f) + s->b_wrap[s->ip] = 0; +#endif + } + else + { + s->b[s->ip] = UCL_BYTE(c); + if (s->ip < s->f) + s->b_wrap[s->ip] = UCL_BYTE(c); + } + if (++s->ip == s->b_size) + s->ip = 0; + if (++s->bp == s->b_size) + s->bp = 0; + if (++s->rp == s->b_size) + s->rp = 0; +} + + +/*********************************************************************** +// remove node from lists +************************************************************************/ + +static +void swd_remove_node(ucl_swd_t *s, ucl_uint node) +{ + if (s->node_count == 0) + { + ucl_uint key; + +#ifdef UCL_DEBUG + if (s->first_rp != UCL_UINT_MAX) + { + if (node != s->first_rp) + printf("Remove %5u: %5u %5u %5u %5u %6u %6u\n", + node, s->rp, s->ip, s->bp, s->first_rp, + s->ip - node, s->ip - s->bp); + assert(node == s->first_rp); + s->first_rp = UCL_UINT_MAX; + } +#endif + + key = HEAD3(s->b,node); + assert(s->llen3[key] > 0); + --s->llen3[key]; + +#ifdef HEAD2 + IF_HEAD2(s) { + key = HEAD2(s->b,node); + assert(s->head2[key] != NIL2); + if ((ucl_uint) s->head2[key] == node) + s->head2[key] = NIL2; + } +#endif + } + else + --s->node_count; +} + + +/*********************************************************************** +// +************************************************************************/ + +static +void swd_accept(ucl_swd_t *s, ucl_uint n) +{ + assert(n <= s->look); + + if (n > 0) do + { + ucl_uint key; + + swd_remove_node(s,s->rp); + + /* add bp into HEAD3 */ + key = HEAD3(s->b,s->bp); + s->succ3[s->bp] = s_get_head3(s,key); + s->head3[key] = SWD_UINT(s->bp); + s->best3[s->bp] = SWD_UINT(s->f + 1); + s->llen3[key]++; + assert(s->llen3[key] <= s->n); + +#ifdef HEAD2 + IF_HEAD2(s) { + /* add bp into HEAD2 */ + key = HEAD2(s->b,s->bp); + s->head2[key] = SWD_UINT(s->bp); + } +#endif + + swd_getbyte(s); + } while (--n > 0); +} + + +/*********************************************************************** +// +************************************************************************/ + +static +void swd_search(ucl_swd_t *s, ucl_uint node, ucl_uint cnt) +{ + const ucl_bytep p1; + const ucl_bytep p2; + const ucl_bytep px; + ucl_uint m_len = s->m_len; + const ucl_bytep b = s->b; + const ucl_bytep bp = s->b + s->bp; + const ucl_bytep bx = s->b + s->bp + s->look; + unsigned char scan_end1; + + assert(s->m_len > 0); + + scan_end1 = bp[m_len - 1]; + for ( ; cnt-- > 0; node = s->succ3[node]) + { + p1 = bp; + p2 = b + node; + px = bx; + + assert(m_len < s->look); + + if ( +#if 1 + p2[m_len - 1] == scan_end1 && + p2[m_len] == p1[m_len] && +#endif + p2[0] == p1[0] && + p2[1] == p1[1]) + { + ucl_uint i; + assert(ucl_memcmp(bp,&b[node],3) == 0); + +#if 0 && defined(UA_GET4) + p1 += 3; p2 += 3; + while (p1 < px && UA_GET4(p1) == UA_GET4(p2)) + p1 += 4, p2 += 4; + while (p1 < px && *p1 == *p2) + p1 += 1, p2 += 1; +#else + p1 += 2; p2 += 2; + do {} while (++p1 < px && *p1 == *++p2); +#endif + i = (ucl_uint) (p1 - bp); + +#ifdef UCL_DEBUG + if (ucl_memcmp(bp,&b[node],i) != 0) + printf("%5ld %5ld %02x%02x %02x%02x\n", + (long)s->bp, (long) node, + bp[0], bp[1], b[node], b[node+1]); +#endif + assert(ucl_memcmp(bp,&b[node],i) == 0); + +#if defined(SWD_BEST_OFF) + if (i < SWD_BEST_OFF) + { + if (s->best_pos[i] == 0) + s->best_pos[i] = node + 1; + } +#endif + if (i > m_len) + { + s->m_len = m_len = i; + s->m_pos = node; + if (m_len == s->look) + return; + if (m_len >= s->nice_length) + return; + if (m_len > (ucl_uint) s->best3[node]) + return; + scan_end1 = bp[m_len - 1]; + } + } + } +} + + +/*********************************************************************** +// +************************************************************************/ + +#ifdef HEAD2 + +static +ucl_bool swd_search2(ucl_swd_t *s) +{ + ucl_uint key; + + assert(s->look >= 2); + assert(s->m_len > 0); + + key = s->head2[ HEAD2(s->b,s->bp) ]; + if (key == NIL2) + return 0; +#ifdef UCL_DEBUG + if (ucl_memcmp(&s->b[s->bp],&s->b[key],2) != 0) + printf("%5ld %5ld %02x%02x %02x%02x\n", (long)s->bp, (long)key, + s->b[s->bp], s->b[s->bp+1], s->b[key], s->b[key+1]); +#endif + assert(ucl_memcmp(&s->b[s->bp],&s->b[key],2) == 0); +#if defined(SWD_BEST_OFF) + if (s->best_pos[2] == 0) + s->best_pos[2] = key + 1; +#endif + + if (s->m_len < 2) + { + s->m_len = 2; + s->m_pos = key; + } + return 1; +} + +#endif + + +/*********************************************************************** +// +************************************************************************/ + +static +void swd_findbest(ucl_swd_t *s) +{ + ucl_uint key; + ucl_uint cnt, node; + ucl_uint len; + + assert(s->m_len > 0); + + /* get current head, add bp into HEAD3 */ + key = HEAD3(s->b,s->bp); + node = s->succ3[s->bp] = s_get_head3(s,key); + cnt = s->llen3[key]++; + assert(s->llen3[key] <= s->n + s->f); + if (cnt > s->max_chain && s->max_chain > 0) + cnt = s->max_chain; + s->head3[key] = SWD_UINT(s->bp); + + s->b_char = s->b[s->bp]; + len = s->m_len; + if (s->m_len >= s->look) + { + if (s->look == 0) + s->b_char = -1; + s->m_off = 0; + s->best3[s->bp] = SWD_UINT(s->f + 1); + } + else + { +#if defined(HEAD2_VAR) + if (s->use_head2) { + if (swd_search2(s) && s->look >= 3) + swd_search(s,node,cnt); + } else { + if (s->look >= 3) + swd_search(s,node,cnt); + } +#elif defined(HEAD2) + if (swd_search2(s) && s->look >= 3) + swd_search(s,node,cnt); +#else + if (s->look >= 3) + swd_search(s,node,cnt); +#endif + if (s->m_len > len) + s->m_off = swd_pos2off(s,s->m_pos); + s->best3[s->bp] = SWD_UINT(s->m_len); + +#if defined(SWD_BEST_OFF) + if (s->use_best_off) + { + int i; + for (i = 2; i < SWD_BEST_OFF; i++) + if (s->best_pos[i] > 0) + s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); + else + s->best_off[i] = 0; + } +#endif + } + + swd_remove_node(s,s->rp); + +#ifdef HEAD2 + /* add bp into HEAD2 */ + IF_HEAD2(s) { + key = HEAD2(s->b,s->bp); + s->head2[key] = SWD_UINT(s->bp); + } +#endif +} + + +#undef HEAD3 +#undef HEAD2 +#undef IF_HEAD2 +#undef s_get_head3 + + +/* +vi:ts=4:et +*/ + diff --git a/tools/z64compress/src/enc/ucl/getbit.h b/tools/z64compress/src/enc/ucl/getbit.h new file mode 100644 index 0000000..36ef48c --- /dev/null +++ b/tools/z64compress/src/enc/ucl/getbit.h @@ -0,0 +1,64 @@ +/* getbit.h -- bit-buffer access + + This file is part of the UCL data compression library. + + Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The UCL library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The UCL library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the UCL library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/ucl/ + */ + + +/*********************************************************************** +// +************************************************************************/ + +#if 1 +#define getbit_8(bb, src, ilen) \ + (((bb = bb & 0x7f ? bb*2 : ((unsigned)src[ilen++]*2+1)) >> 8) & 1) +#elif 1 +#define getbit_8(bb, src, ilen) \ + (bb*=2,bb&0xff ? (bb>>8)&1 : ((bb=src[ilen++]*2+1)>>8)&1) +#else +#define getbit_8(bb, src, ilen) \ + (((bb*=2, (bb&0xff ? bb : (bb=src[ilen++]*2+1,bb))) >> 8) & 1) +#endif + + +#define getbit_le16(bb, src, ilen) \ + (bb*=2,bb&0xffff ? (bb>>16)&1 : (ilen+=2,((bb=(src[ilen-2]+src[ilen-1]*256u)*2+1)>>16)&1)) + + +#if 1 && (ACC_ENDIAN_LITTLE_ENDIAN) && defined(UA_GET4) +#define getbit_le32(bb, bc, src, ilen) \ + (bc > 0 ? ((bb>>--bc)&1) : (bc=31,\ + bb=UA_GET4((src)+ilen),ilen+=4,(bb>>31)&1)) +#else +#define getbit_le32(bb, bc, src, ilen) \ + (bc > 0 ? ((bb>>--bc)&1) : (bc=31,\ + bb=src[ilen]+src[ilen+1]*0x100+src[ilen+2]*UCL_UINT32_C(0x10000)+src[ilen+3]*UCL_UINT32_C(0x1000000),\ + ilen+=4,(bb>>31)&1)) +#endif + + +/* +vi:ts=4:et +*/ + diff --git a/tools/z64compress/src/enc/ucl/n2b_d.c b/tools/z64compress/src/enc/ucl/n2b_d.c new file mode 100644 index 0000000..0dc3590 --- /dev/null +++ b/tools/z64compress/src/enc/ucl/n2b_d.c @@ -0,0 +1,179 @@ +/* n2b_d.c -- implementation of the NRV2B decompression algorithm + + This file is part of the UCL data compression library. + + Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The UCL library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The UCL library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the UCL library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/ucl/ + */ + + +/*********************************************************************** +// actual implementation used by a recursive #include +************************************************************************/ + +#ifdef getbit + +#ifdef SAFE +#define fail(x,r) if (x) { *dst_len = olen; return r; } +#else +#define fail(x,r) +#endif + +{ + ucl_uint32 bb = 0; +#ifdef TEST_OVERLAP + ucl_uint ilen = src_off, olen = 0, last_m_off = 1; +#else + ucl_uint ilen = 0, olen = 0, last_m_off = 1; +#endif +#ifdef SAFE + const ucl_uint oend = *dst_len; +#endif + //ACC_UNUSED(wrkmem); + +#ifdef TEST_OVERLAP + src_len += src_off; + fail(oend >= src_len, UCL_E_OVERLAP_OVERRUN); +#endif + + for (;;) + { + ucl_uint m_off, m_len; + + while (getbit(bb)) + { + fail(ilen >= src_len, UCL_E_INPUT_OVERRUN); + fail(olen >= oend, UCL_E_OUTPUT_OVERRUN); +#ifdef TEST_OVERLAP + fail(olen > ilen, UCL_E_OVERLAP_OVERRUN); + olen++; ilen++; +#else + dst[olen++] = src[ilen++]; +#endif + } + m_off = 1; + do { + m_off = m_off*2 + getbit(bb); + fail(ilen >= src_len, UCL_E_INPUT_OVERRUN); + fail(m_off > UCL_UINT32_C(0xffffff) + 3, UCL_E_LOOKBEHIND_OVERRUN); + } while (!getbit(bb)); + if (m_off == 2) + { + m_off = last_m_off; + } + else + { + fail(ilen >= src_len, UCL_E_INPUT_OVERRUN); + m_off = (m_off-3)*256 + src[ilen++]; + if (m_off == UCL_UINT32_C(0xffffffff)) + break; + last_m_off = ++m_off; + } + m_len = getbit(bb); + m_len = m_len*2 + getbit(bb); + if (m_len == 0) + { + m_len++; + do { + m_len = m_len*2 + getbit(bb); + fail(ilen >= src_len, UCL_E_INPUT_OVERRUN); + fail(m_len >= oend, UCL_E_OUTPUT_OVERRUN); + } while (!getbit(bb)); + m_len += 2; + } + m_len += (m_off > 0xd00); + fail(olen + m_len > oend, UCL_E_OUTPUT_OVERRUN); + fail(m_off > olen, UCL_E_LOOKBEHIND_OVERRUN); +#ifdef TEST_OVERLAP + olen += m_len + 1; + fail(olen > ilen, UCL_E_OVERLAP_OVERRUN); +#else + { + const ucl_bytep m_pos; + m_pos = dst + olen - m_off; + dst[olen++] = *m_pos++; + do dst[olen++] = *m_pos++; while (--m_len > 0); + } +#endif + } + *dst_len = olen; + return ilen == src_len ? UCL_E_OK : (ilen < src_len ? UCL_E_INPUT_NOT_CONSUMED : UCL_E_INPUT_OVERRUN); +} + +#undef fail + +#endif /* getbit */ + + +/*********************************************************************** +// decompressor entries for the different bit-buffer sizes +************************************************************************/ + +#ifndef getbit + +#include "ucl_conf.h" +#include "ucl.h" +#include "getbit.h" + + +UCL_PUBLIC(int) +ucl_nrv2b_decompress_8 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ) +{ +#define getbit(bb) getbit_8(bb,src,ilen) +#include "n2b_d.c" +#undef getbit +} + +#if 0 +UCL_PUBLIC(int) +ucl_nrv2b_decompress_le16 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ) +{ +#define getbit(bb) getbit_le16(bb,src,ilen) +#include "n2b_d.c" +#undef getbit +} + + +UCL_PUBLIC(int) +ucl_nrv2b_decompress_le32 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ) +{ + unsigned bc = 0; +#define getbit(bb) getbit_le32(bb,bc,src,ilen) +#include "n2b_d.c" +#undef getbit +} +#endif /* 0 */ + + +#endif /* !getbit */ + + +/* +vi:ts=4:et +*/ + diff --git a/tools/z64compress/src/enc/ucl/ucl.h b/tools/z64compress/src/enc/ucl/ucl.h new file mode 100644 index 0000000..f136d4a --- /dev/null +++ b/tools/z64compress/src/enc/ucl/ucl.h @@ -0,0 +1,249 @@ +/* ucl.h -- prototypes for the UCL data compression library + + This file is part of the UCL data compression library. + + Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The UCL library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The UCL library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the UCL library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/ucl/ + */ + + +#ifndef __UCL_H_INCLUDED +#define __UCL_H_INCLUDED + +#ifndef __UCLCONF_H_INCLUDED +#include "uclconf.h" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +/*********************************************************************** +// Compression fine-tuning configuration. +// +// Pass a NULL pointer to the compression functions for default values. +// Otherwise set all values to -1 [i.e. initialize the struct by a +// `memset(x,0xff,sizeof(x))'] and then set the required values. +************************************************************************/ + +struct ucl_compress_config_t +{ + int bb_endian; + int bb_size; + ucl_uint max_offset; + ucl_uint max_match; + int s_level; + int h_level; + int p_level; + int c_flags; + ucl_uint m_size; +}; + +#define ucl_compress_config_p ucl_compress_config_t __UCL_MMODEL * + + +/*********************************************************************** +// compressors +// +// Pass NULL for `cb' (no progress callback), `conf' (default compression +// configuration) and `result' (no statistical result). +************************************************************************/ + +UCL_EXTERN(int) +ucl_nrv2b_99_compress ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_progress_callback_p cb, + int level, + const struct ucl_compress_config_p conf, + ucl_uintp result ); + +UCL_EXTERN(int) +ucl_nrv2d_99_compress ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_progress_callback_p cb, + int level, + const struct ucl_compress_config_p conf, + ucl_uintp result ); + +UCL_EXTERN(int) +ucl_nrv2e_99_compress ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_progress_callback_p cb, + int level, + const struct ucl_compress_config_p conf, + ucl_uintp result ); + + +/*********************************************************************** +// decompressors +// +// Always pass NULL for `wrkmem'. This parameter is for symetry +// with my other compression libaries and is not used in UCL - +// UCL does not need any additional memory (or even local stack space) +// for decompression. +************************************************************************/ + +UCL_EXTERN(int) +ucl_nrv2b_decompress_8 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2b_decompress_le16 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2b_decompress_le32 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2b_decompress_safe_8 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2b_decompress_safe_le16 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2b_decompress_safe_le32 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); + +UCL_EXTERN(int) +ucl_nrv2d_decompress_8 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2d_decompress_le16 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2d_decompress_le32 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2d_decompress_safe_8 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2d_decompress_safe_le16 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2d_decompress_safe_le32 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); + +UCL_EXTERN(int) +ucl_nrv2e_decompress_8 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2e_decompress_le16 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2e_decompress_le32 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2e_decompress_safe_8 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2e_decompress_safe_le16 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2e_decompress_safe_le32 ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); + + +/*********************************************************************** +// assembler decompressors [TO BE ADDED] +************************************************************************/ + + +/*********************************************************************** +// test an overlapping in-place decompression within a buffer: +// - try a virtual decompression from &buf[src_off] -> &buf[0] +// - no data is actually written +// - only the bytes at buf[src_off..src_off+src_len-1] will get accessed +// +// NOTE: always pass NULL for `wrkmem' - see above. +************************************************************************/ + +UCL_EXTERN(int) +ucl_nrv2b_test_overlap_8 ( const ucl_bytep buf, ucl_uint src_off, + ucl_uint src_len, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2b_test_overlap_le16 ( const ucl_bytep buf, ucl_uint src_off, + ucl_uint src_len, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2b_test_overlap_le32 ( const ucl_bytep buf, ucl_uint src_off, + ucl_uint src_len, ucl_uintp dst_len, + ucl_voidp wrkmem ); + +UCL_EXTERN(int) +ucl_nrv2d_test_overlap_8 ( const ucl_bytep buf, ucl_uint src_off, + ucl_uint src_len, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2d_test_overlap_le16 ( const ucl_bytep buf, ucl_uint src_off, + ucl_uint src_len, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2d_test_overlap_le32 ( const ucl_bytep buf, ucl_uint src_off, + ucl_uint src_len, ucl_uintp dst_len, + ucl_voidp wrkmem ); + +UCL_EXTERN(int) +ucl_nrv2e_test_overlap_8 ( const ucl_bytep buf, ucl_uint src_off, + ucl_uint src_len, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2e_test_overlap_le16 ( const ucl_bytep buf, ucl_uint src_off, + ucl_uint src_len, ucl_uintp dst_len, + ucl_voidp wrkmem ); +UCL_EXTERN(int) +ucl_nrv2e_test_overlap_le32 ( const ucl_bytep buf, ucl_uint src_off, + ucl_uint src_len, ucl_uintp dst_len, + ucl_voidp wrkmem ); + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* already included */ + diff --git a/tools/z64compress/src/enc/ucl/ucl_conf.h b/tools/z64compress/src/enc/ucl/ucl_conf.h new file mode 100644 index 0000000..79f5c6b --- /dev/null +++ b/tools/z64compress/src/enc/ucl/ucl_conf.h @@ -0,0 +1,220 @@ +/* ucl_conf.h -- main internal configuration file for the the UCL library + + This file is part of the UCL data compression library. + + Copyright (C) 1996-2004 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The UCL library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The UCL library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the UCL library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/ucl/ + */ + + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the library and is subject + to change. + */ + + +#ifndef __UCL_CONF_H +#define __UCL_CONF_H + + +/*********************************************************************** +// +************************************************************************/ + +#if defined(__UCLCONF_H_INCLUDED) +# error "include this file first" +#endif +#include "uclconf.h" + +#if !defined(__UCL_MMODEL_HUGE) && defined(HAVE_MEMCMP) +# define ucl_memcmp(a,b,c) memcmp(a,b,c) +#endif +#if !defined(__UCL_MMODEL_HUGE) && defined(HAVE_MEMCPY) +# define ucl_memcpy(a,b,c) memcpy(a,b,c) +#endif +#if !defined(__UCL_MMODEL_HUGE) && defined(HAVE_MEMMOVE) +# define ucl_memmove(a,b,c) memmove(a,b,c) +#endif +#if !defined(__UCL_MMODEL_HUGE) && defined(HAVE_MEMSET) +# define ucl_memset(a,b,c) memset(a,b,c) +#endif +#if 0 /* WANT_ACC */ +#if defined(UCL_HAVE_CONFIG_H) +# define ACC_CONFIG_NO_HEADER 1 +#endif +#define __ACCLIB_FUNCNAME(f) error_do_not_use_acclib +#include "acc/acc.h" + +#if (ACC_CC_MSC && (_MSC_VER >= 1300)) + /* avoid `-Wall' warnings in system header files */ +# pragma warning(disable: 4820) + /* avoid warnings about inlining */ +# pragma warning(disable: 4710 4711) +#endif + +#if defined(__UCL_MMODEL_HUGE) && (!ACC_HAVE_MM_HUGE_PTR) +# error "this should not happen - check defines for __huge" +#endif + +#if (ACC_OS_DOS16 + 0 != UCL_OS_DOS16 + 0) +# error "DOS16" +#endif +#if (ACC_OS_OS216 + 0 != UCL_OS_OS216 + 0) +# error "OS216" +#endif +#if (ACC_OS_WIN16 + 0 != UCL_OS_WIN16 + 0) +# error "WIN16" +#endif +#if (ACC_OS_DOS32 + 0 != UCL_OS_DOS32 + 0) +# error "DOS32" +#endif +#if (ACC_OS_OS2 + 0 != UCL_OS_OS2 + 0) +# error "DOS32" +#endif +#if (ACC_OS_WIN32 + 0 != UCL_OS_WIN32 + 0) +# error "WIN32" +#endif +#if (ACC_OS_WIN64 + 0 != UCL_OS_WIN64 + 0) +# error "WIN64" +#endif + + +#include "acc/acc_incd.h" +#if (ACC_OS_DOS16 || ACC_OS_OS216 || ACC_OS_WIN16) +# include "acc/acc_ince.h" +# include "acc/acc_inci.h" +#endif + +#undef NDEBUG +#if !defined(UCL_DEBUG) +# define NDEBUG 1 +#endif +#include <assert.h> + + +#if (ACC_OS_DOS16 || ACC_OS_OS216 || ACC_OS_WIN16) && (ACC_CC_BORLANDC) +# if (__BORLANDC__ >= 0x0450) /* v4.00 */ +# pragma option -h /* enable fast huge pointers */ +# else +# pragma option -h- /* disable fast huge pointers - compiler bug */ +# endif +#endif +#endif /* WANT_ACC */ + + +/*********************************************************************** +// +************************************************************************/ + +#if 1 +# define UCL_BYTE(x) ((unsigned char) (x)) +#else +# define UCL_BYTE(x) ((unsigned char) ((x) & 0xff)) +#endif +#if 0 +# define UCL_USHORT(x) ((unsigned short) (x)) +#else +# define UCL_USHORT(x) ((unsigned short) ((x) & 0xffff)) +#endif + +#define UCL_MAX(a,b) ((a) >= (b) ? (a) : (b)) +#define UCL_MIN(a,b) ((a) <= (b) ? (a) : (b)) +#define UCL_MAX3(a,b,c) ((a) >= (b) ? UCL_MAX(a,c) : UCL_MAX(b,c)) +#define UCL_MIN3(a,b,c) ((a) <= (b) ? UCL_MIN(a,c) : UCL_MIN(b,c)) + +#define ucl_sizeof(type) ((ucl_uint) (sizeof(type))) + +#define UCL_HIGH(array) ((ucl_uint) (sizeof(array)/sizeof(*(array)))) + +/* this always fits into 16 bits */ +#define UCL_SIZE(bits) (1u << (bits)) +#define UCL_MASK(bits) (UCL_SIZE(bits) - 1) + +#define UCL_LSIZE(bits) (1ul << (bits)) +#define UCL_LMASK(bits) (UCL_LSIZE(bits) - 1) + +#define UCL_USIZE(bits) ((ucl_uint) 1 << (bits)) +#define UCL_UMASK(bits) (UCL_USIZE(bits) - 1) + +/* Maximum value of a signed/unsigned type. + Do not use casts, avoid overflows ! */ +#define UCL_STYPE_MAX(b) (((1l << (8*(b)-2)) - 1l) + (1l << (8*(b)-2))) +#define UCL_UTYPE_MAX(b) (((1ul << (8*(b)-1)) - 1ul) + (1ul << (8*(b)-1))) + + +/*********************************************************************** +// compiler and architecture specific stuff +************************************************************************/ + +/* Some defines that indicate if memory can be accessed at unaligned + * memory addresses. You should also test that this is actually faster + * even if it is allowed by your system. + */ + +#undef UA_GET2 +#undef UA_SET2 +#undef UA_GET4 +#undef UA_SET4 +#if 1 && (ACC_ARCH_AMD64 || ACC_ARCH_IA32) +# define UA_GET2(p) (* (const ucl_ushortp) (p)) +# define UA_SET2(p) (* (ucl_ushortp) (p)) +# define UA_GET4(p) (* (const acc_uint32e_t *) (p)) +# define UA_SET4(p) (* (acc_uint32e_t *) (p)) +#elif 0 && (ACC_ARCH_M68K) && (ACC_CC_GNUC >= 0x020900ul) + typedef struct { unsigned short v; } __ucl_ua2_t __attribute__((__aligned__(1))); + typedef struct { unsigned long v; } __ucl_ua4_t __attribute__((__aligned__(1))); +# define UA_GET2(p) (((const __ucl_ua2_t *)(p))->v) +# define UA_SET2(p) (((__ucl_ua2_t *)(p))->v) +# define UA_GET4(p) (((const __ucl_ua4_t *)(p))->v) +# define UA_SET4(p) (((__ucl_ua4_t *)(p))->v) +#endif + + +/*********************************************************************** +// some globals +************************************************************************/ + +__UCL_EXTERN_C int __ucl_init_done; +UCL_EXTERN(const ucl_bytep) ucl_copyright(void); + + +/*********************************************************************** +// ANSI C preprocessor macros +************************************************************************/ + +#define _UCL_STRINGIZE(x) #x +#define _UCL_MEXPAND(x) _UCL_STRINGIZE(x) + + +/*********************************************************************** +// +************************************************************************/ + +//#include "ucl_ptr.h" + + +#endif /* already included */ + +/* +vi:ts=4:et +*/ + diff --git a/tools/z64compress/src/enc/ucl/uclconf.h b/tools/z64compress/src/enc/ucl/uclconf.h new file mode 100644 index 0000000..ab18ca1 --- /dev/null +++ b/tools/z64compress/src/enc/ucl/uclconf.h @@ -0,0 +1,490 @@ +/* uclconf.h -- configuration for the UCL data compression library + + This file is part of the UCL data compression library. + + Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer + Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer + All Rights Reserved. + + The UCL library is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + The UCL library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the UCL library; see the file COPYING. + If not, write to the Free Software Foundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + Markus F.X.J. Oberhumer + <markus@oberhumer.com> + http://www.oberhumer.com/opensource/ucl/ + */ + + +#ifndef __UCLCONF_H_INCLUDED +#define __UCLCONF_H_INCLUDED + +#define UCL_VERSION 0x010300L +#define UCL_VERSION_STRING "1.03" +#define UCL_VERSION_DATE "Jul 20 2004" + +/* internal Autoconf configuration file - only used when building UCL */ +#if defined(UCL_HAVE_CONFIG_H) +# include <config.h> +#endif +#include <limits.h> + +#ifdef __cplusplus +extern "C" { +#endif + + + +/*********************************************************************** +// UCL requires a conforming <limits.h> +************************************************************************/ + +#if !defined(CHAR_BIT) || (CHAR_BIT != 8) +# error "invalid CHAR_BIT" +#endif +#if !defined(UCHAR_MAX) || !defined(UINT_MAX) || !defined(ULONG_MAX) +# error "check your compiler installation" +#endif +#if (USHRT_MAX < 1) || (UINT_MAX < 1) || (ULONG_MAX < 1) +# error "your limits.h macros are broken" +#endif + +/* workaround a compiler bug under hpux 10.20 */ +#define UCL_0xffffL 65535ul +#define UCL_0xffffffffL 4294967295ul + +#if !defined(UCL_UINT32_C) +# if (UINT_MAX < UCL_0xffffffffL) +# define UCL_UINT32_C(c) c ## UL +# else +# define UCL_UINT32_C(c) ((c) + 0U) +# endif +#endif + + +/*********************************************************************** +// architecture defines +************************************************************************/ + +#if (defined(__CYGWIN__) || defined(__CYGWIN32__)) && defined(__GNUC__) +# define UCL_OS_CYGWIN 1 +#elif defined(__EMX__) && defined(__GNUC__) +# define UCL_OS_EMX 1 +#elif defined(__BORLANDC__) && defined(__DPMI32__) && (__BORLANDC__ >= 0x0460) +# define UCL_OS_DOS32 1 +#elif defined(__BORLANDC__) && defined(__DPMI16__) +# define UCL_OS_DOS16 1 +#elif defined(__ZTC__) && defined(DOS386) +# define UCL_OS_DOS32 1 +#elif defined(__OS2__) || defined(__OS2V2__) +# if (UINT_MAX == UCL_0xffffL) +# define UCL_OS_OS216 1 +# elif (UINT_MAX == UCL_0xffffffffL) +# define UCL_OS_OS2 1 +# else +# error "check your limits.h header" +# endif +#elif defined(__WIN64__) || defined(_WIN64) || defined(WIN64) +# define UCL_OS_WIN64 1 +#elif defined(__WIN32__) || defined(_WIN32) || defined(WIN32) || defined(__WINDOWS_386__) +# define UCL_OS_WIN32 1 +#elif defined(__MWERKS__) && defined(__INTEL__) +# define UCL_OS_WIN32 1 +#elif defined(__WINDOWS__) || defined(_WINDOWS) || defined(_Windows) +# if (UINT_MAX == UCL_0xffffL) +# define UCL_OS_WIN16 1 +# elif (UINT_MAX == UCL_0xffffffffL) +# define UCL_OS_WIN32 1 +# else +# error "check your limits.h header" +# endif +#elif defined(__DOS__) || defined(__MSDOS__) || defined(_MSDOS) || defined(MSDOS) || (defined(__PACIFIC__) && defined(DOS)) +# if (UINT_MAX == UCL_0xffffL) +# define UCL_OS_DOS16 1 +# elif (UINT_MAX == UCL_0xffffffffL) +# define UCL_OS_DOS32 1 +# else +# error "check your limits.h header" +# endif +#elif defined(__WATCOMC__) +# if defined(__NT__) && (UINT_MAX == UCL_0xffffL) + /* wcl: NT host defaults to DOS target */ +# define UCL_OS_DOS16 1 +# elif defined(__NT__) && (__WATCOMC__ < 1100) + /* wcl386: Watcom C 11 defines _WIN32 */ +# define UCL_OS_WIN32 1 +# else +# error "please specify a target using the -bt compiler option" +# endif +#elif defined(__palmos__) +# if (UINT_MAX == UCL_0xffffL) +# define UCL_OS_PALMOS 1 +# else +# error "check your limits.h header" +# endif +#elif defined(__TOS__) || defined(__atarist__) +# define UCL_OS_TOS 1 +#elif defined(macintosh) +# define UCL_OS_MACCLASSIC 1 +#elif defined(__VMS) +# define UCL_OS_VMS 1 +#else +# define UCL_OS_POSIX 1 +#endif + +/* memory checkers */ +#if !defined(__UCL_CHECKER) +# if defined(__BOUNDS_CHECKING_ON) +# define __UCL_CHECKER 1 +# elif defined(__CHECKER__) +# define __UCL_CHECKER 1 +# elif defined(__INSURE__) +# define __UCL_CHECKER 1 +# elif defined(__PURIFY__) +# define __UCL_CHECKER 1 +# endif +#endif + +/* fix ancient compiler versions */ +#if (UINT_MAX == UCL_0xffffL) +#if (defined(__MSDOS__) && defined(__TURBOC__) && (__TURBOC__ < 0x0410)) || (defined(MSDOS) && defined(_MSC_VER) && (_MSC_VER < 700)) +# if !defined(__cdecl) +# define __cdecl cdecl +# endif +# if !defined(__far) +# define __far far +# endif +# if !defined(__huge) +# define __huge huge +# endif +# if !defined(__near) +# define __near near +# endif +#endif +#endif + + +/*********************************************************************** +// integral and pointer types +************************************************************************/ + +/* Integral types with 32 bits or more */ +#if !defined(UCL_UINT32_MAX) +# if (UINT_MAX >= UCL_0xffffffffL) + typedef unsigned int ucl_uint32; + typedef int ucl_int32; +# define UCL_UINT32_MAX UINT_MAX +# define UCL_INT32_MAX INT_MAX +# define UCL_INT32_MIN INT_MIN +# elif (ULONG_MAX >= UCL_0xffffffffL) + typedef unsigned long ucl_uint32; + typedef long ucl_int32; +# define UCL_UINT32_MAX ULONG_MAX +# define UCL_INT32_MAX LONG_MAX +# define UCL_INT32_MIN LONG_MIN +# else +# error "ucl_uint32" +# endif +#endif + +/* ucl_uint is used like size_t */ +#if !defined(UCL_UINT_MAX) +# if (UINT_MAX >= UCL_0xffffffffL) + typedef unsigned int ucl_uint; + typedef int ucl_int; +# define UCL_UINT_MAX UINT_MAX +# define UCL_INT_MAX INT_MAX +# define UCL_INT_MIN INT_MIN +# elif (ULONG_MAX >= UCL_0xffffffffL) + typedef unsigned long ucl_uint; + typedef long ucl_int; +# define UCL_UINT_MAX ULONG_MAX +# define UCL_INT_MAX LONG_MAX +# define UCL_INT_MIN LONG_MIN +# else +# error "ucl_uint" +# endif +#endif + +/* Memory model that allows to access memory at offsets of ucl_uint. */ +#if !defined(__UCL_MMODEL) +# if (UCL_UINT_MAX <= UINT_MAX) +# define __UCL_MMODEL +# elif defined(UCL_OS_DOS16) || defined(UCL_OS_OS216) || defined(UCL_OS_WIN16) +# define __UCL_MMODEL_HUGE 1 +# define __UCL_MMODEL __huge +# define ucl_uintptr_t unsigned long +# else +# define __UCL_MMODEL +# endif +#endif + +/* no typedef here because of const-pointer issues */ +#define ucl_bytep unsigned char __UCL_MMODEL * +#define ucl_charp char __UCL_MMODEL * +#define ucl_voidp void __UCL_MMODEL * +#define ucl_shortp short __UCL_MMODEL * +#define ucl_ushortp unsigned short __UCL_MMODEL * +#define ucl_uint32p ucl_uint32 __UCL_MMODEL * +#define ucl_int32p ucl_int32 __UCL_MMODEL * +#define ucl_uintp ucl_uint __UCL_MMODEL * +#define ucl_intp ucl_int __UCL_MMODEL * +#define ucl_voidpp ucl_voidp __UCL_MMODEL * +#define ucl_bytepp ucl_bytep __UCL_MMODEL * +/* deprecated - use `ucl_bytep' instead of `ucl_byte *' */ +#define ucl_byte unsigned char __UCL_MMODEL + +typedef int ucl_bool; + + +/*********************************************************************** +// function types +************************************************************************/ + +/* name mangling */ +#if !defined(__UCL_EXTERN_C) +# ifdef __cplusplus +# define __UCL_EXTERN_C extern "C" +# else +# define __UCL_EXTERN_C extern +# endif +#endif + +/* calling convention */ +#if !defined(__UCL_CDECL) +# if defined(__GNUC__) || defined(__HIGHC__) || defined(__NDPC__) +# define __UCL_CDECL +# elif defined(UCL_OS_DOS16) || defined(UCL_OS_OS216) || defined(UCL_OS_WIN16) +# define __UCL_CDECL __far __cdecl +# elif defined(UCL_OS_DOS32) || defined(UCL_OS_OS2) || defined(UCL_OS_WIN32) || defined(UCL_OS_WIN64) +# define __UCL_CDECL __cdecl +# else +# define __UCL_CDECL +# endif +#endif + +/* DLL export information */ +#if !defined(__UCL_EXPORT1) +# define __UCL_EXPORT1 +#endif +#if !defined(__UCL_EXPORT2) +# define __UCL_EXPORT2 +#endif + +/* __cdecl calling convention for public C and assembly functions */ +#if !defined(UCL_PUBLIC) +# define UCL_PUBLIC(_rettype) __UCL_EXPORT1 _rettype __UCL_EXPORT2 __UCL_CDECL +#endif +#if !defined(UCL_EXTERN) +# define UCL_EXTERN(_rettype) __UCL_EXTERN_C UCL_PUBLIC(_rettype) +#endif +#if !defined(UCL_PRIVATE) +# define UCL_PRIVATE(_rettype) static _rettype __UCL_CDECL +#endif + +/* C++ exception specification for extern "C" function types */ +#if !defined(__cplusplus) +# undef UCL_NOTHROW +# define UCL_NOTHROW +#elif !defined(UCL_NOTHROW) +# define UCL_NOTHROW +#endif + +/* function types */ +typedef int +(__UCL_CDECL *ucl_compress_t) ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); + +typedef int +(__UCL_CDECL *ucl_decompress_t) ( const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); + +typedef int +(__UCL_CDECL *ucl_optimize_t) ( ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem ); + +typedef int +(__UCL_CDECL *ucl_compress_dict_t)(const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem, + const ucl_bytep dict, ucl_uint dict_len ); + +typedef int +(__UCL_CDECL *ucl_decompress_dict_t)(const ucl_bytep src, ucl_uint src_len, + ucl_bytep dst, ucl_uintp dst_len, + ucl_voidp wrkmem, + const ucl_bytep dict, ucl_uint dict_len ); + +/* a progress indicator callback function */ +typedef struct +{ + void (__UCL_CDECL *callback) (ucl_uint, ucl_uint, int, ucl_voidp); + ucl_voidp user; +} +ucl_progress_callback_t; +#define ucl_progress_callback_p ucl_progress_callback_t __UCL_MMODEL * + + +/*********************************************************************** +// error codes and prototypes +************************************************************************/ + +/* Error codes for the compression/decompression functions. Negative + * values are errors, positive values will be used for special but + * normal events. + */ +#define UCL_E_OK 0 +#define UCL_E_ERROR (-1) +#define UCL_E_INVALID_ARGUMENT (-2) +#define UCL_E_OUT_OF_MEMORY (-3) +/* compression errors */ +#define UCL_E_NOT_COMPRESSIBLE (-101) +/* decompression errors */ +#define UCL_E_INPUT_OVERRUN (-201) +#define UCL_E_OUTPUT_OVERRUN (-202) +#define UCL_E_LOOKBEHIND_OVERRUN (-203) +#define UCL_E_EOF_NOT_FOUND (-204) +#define UCL_E_INPUT_NOT_CONSUMED (-205) +#define UCL_E_OVERLAP_OVERRUN (-206) + + +/* ucl_init() should be the first function you call. + * Check the return code ! + * + * ucl_init() is a macro to allow checking that the library and the + * compiler's view of various types are consistent. + */ +#define ucl_init() __ucl_init2(UCL_VERSION,(int)sizeof(short),(int)sizeof(int),\ + (int)sizeof(long),(int)sizeof(ucl_uint32),(int)sizeof(ucl_uint),\ + (int)-1,(int)sizeof(char *),(int)sizeof(ucl_voidp),\ + (int)sizeof(ucl_compress_t)) +UCL_EXTERN(int) __ucl_init2(ucl_uint32,int,int,int,int,int,int,int,int,int); + +/* version functions (useful for shared libraries) */ +UCL_EXTERN(ucl_uint32) ucl_version(void); +UCL_EXTERN(const char *) ucl_version_string(void); +UCL_EXTERN(const char *) ucl_version_date(void); +UCL_EXTERN(const ucl_charp) _ucl_version_string(void); +UCL_EXTERN(const ucl_charp) _ucl_version_date(void); + +/* string functions */ +UCL_EXTERN(int) +ucl_memcmp(const ucl_voidp _s1, const ucl_voidp _s2, ucl_uint _len); +UCL_EXTERN(ucl_voidp) +ucl_memcpy(ucl_voidp _dest, const ucl_voidp _src, ucl_uint _len); +UCL_EXTERN(ucl_voidp) +ucl_memmove(ucl_voidp _dest, const ucl_voidp _src, ucl_uint _len); +UCL_EXTERN(ucl_voidp) +ucl_memset(ucl_voidp _s, int _c, ucl_uint _len); + +/* checksum functions */ +UCL_EXTERN(ucl_uint32) +ucl_adler32(ucl_uint32 _adler, const ucl_bytep _buf, ucl_uint _len); +UCL_EXTERN(ucl_uint32) +ucl_crc32(ucl_uint32 _c, const ucl_bytep _buf, ucl_uint _len); +UCL_EXTERN(const ucl_uint32p) +ucl_get_crc32_table(void); + +/* memory allocation hooks */ +typedef ucl_voidp (__UCL_CDECL *ucl_malloc_hook_t) (ucl_uint); +typedef void (__UCL_CDECL *ucl_free_hook_t) (ucl_voidp); +UCL_EXTERN(void) +ucl_set_malloc_hooks(ucl_malloc_hook_t, ucl_free_hook_t); +UCL_EXTERN(void) +ucl_get_malloc_hooks(ucl_malloc_hook_t*, ucl_free_hook_t*); + +#ifndef UCL_SAFE_ALLOC +#define UCL_SAFE_ALLOC 1 +#include <stdio.h> +#include <stdlib.h> + +/* safe calloc */ +static +inline +void * +calloc_safe(size_t nmemb, size_t size) +{ + void *result; + + result = calloc(nmemb, size); + + if (!result) + { + fprintf(stderr, "[!] memory error\n"); + exit(EXIT_FAILURE); + } + + return result; +} + +/* safe malloc */ +static +inline +void * +malloc_safe(size_t size) +{ + void *result; + + result = malloc(size); + + if (!result) + { + fprintf(stderr, "[!] memory error\n"); + exit(EXIT_FAILURE); + } + + return result; +} +#endif /* UCL_SAFE_ALLOC */ + +/* memory allocation functions */ +#if 0 +UCL_EXTERN(ucl_voidp) ucl_malloc(ucl_uint); +UCL_EXTERN(ucl_voidp) ucl_alloc(ucl_uint, ucl_uint); +UCL_EXTERN(void) ucl_free(ucl_voidp); +#else +# define ucl_malloc(a) (malloc_safe(a)) +# define ucl_alloc(a, b) (calloc_safe(a, b)) +# define ucl_free(a) (free(a)) +#endif + + +/* misc. */ +UCL_EXTERN(ucl_bool) ucl_assert(int _expr); +UCL_EXTERN(int) _ucl_config_check(void); +typedef union { ucl_bytep p; ucl_uint u; } __ucl_pu_u; +typedef union { ucl_bytep p; ucl_uint32 u32; } __ucl_pu32_u; + +/* align a char pointer on a boundary that is a multiple of `size' */ +UCL_EXTERN(unsigned) __ucl_align_gap(const ucl_voidp _ptr, ucl_uint _size); +#define UCL_PTR_ALIGN_UP(_ptr,_size) \ + ((_ptr) + (ucl_uint) __ucl_align_gap((const ucl_voidp)(_ptr),(ucl_uint)(_size))) + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* already included */ + diff --git a/tools/z64compress/src/enc/yar.c b/tools/z64compress/src/enc/yar.c new file mode 100644 index 0000000..823b342 --- /dev/null +++ b/tools/z64compress/src/enc/yar.c @@ -0,0 +1,450 @@ +/* <z64.me> yar.c: decode and encode MM yaz archives */ + +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> +#include <string.h> + +#define FERR(x) { \ + fprintf(stderr, x); \ + fprintf(stderr, "\n"); \ + exit(EXIT_FAILURE); \ +} + +/* surely an archive won't exceed 64 MB */ +#define YAR_MAX (1024 * 1024 * 64) + +/* align out address before writing compressed file */ +#define FILE_ALIGN \ + while ((outSz % align)) \ + { \ + out[outSz] = 0; \ + outSz += 1; \ + } + +struct yarFile +{ + int idx; /* original index in list */ + int ofs; /* global offset of file */ +}; + +static +unsigned int +u32b(void *src) +{ + unsigned char *arr = src; + + return (arr[0] << 24) | (arr[1] << 16) | (arr[2] << 8) | arr[3]; +} + +static +void +u32wr(void *dst, unsigned int src) +{ + unsigned char *arr = dst; + + arr[0] = src >> 24; + arr[1] = src >> 16; + arr[2] = src >> 8; + arr[3] = src; +} + +static +void +progress(const char *name, int progress, int end) +{ + fprintf( + stderr + , "\r""repacking '%s' %d/%d: " + , name + , progress + , end + ); +} + +/* reencode yar archive */ +/* returns 0 on success, pointer to error message otherwise */ +char * +yar_reencode( + unsigned char *src /* source archive */ + , unsigned int sz /* source archive size */ + , unsigned char *dst /* destination archive */ + , unsigned int *dst_sz /* destination archive size */ + , int align /* compressed file alignment */ + + , const char *name /* name of archive (0 = hide progress) */ + , const char *codec /* the expected encoding header "Yaz0" */ + , void *imm /* intermediate buffer for conversion */ + , void *ctx /* compression context (if applicable) */ + + /* decompresses file; return non-zero on fail; optional + * if files are already decompressed (up to user to know) + */ + , int decode(void *src, void *dst, unsigned dstSz, unsigned *srcSz) + + /* compress file; returns non-zero on fail; optional if + * files are desired to be left decompressed + */ + , int encode(void *src, unsigned srcSz, void *dst, unsigned *dstSz, void *ctx) + + /* test if file has been previously encoded; optional */ + , int exist(void *src, unsigned srcSz, void *dst, unsigned *dstSz) +) +{ + unsigned char *ss; + unsigned char *out; + unsigned int end; + unsigned int end_out; + unsigned int outSz = 0; + int progress_end; + struct yarFile *list = 0; + struct yarFile *item; + int list_num; + + assert(src); + assert(sz); + assert(dst_sz); + assert(dst); + assert(align >= 0); + assert((align & 3) == 0); /* cannot have alignment smaller than 4 */ + + out = dst; + + end = 0; + + ss = src; + item = list; + do + { + unsigned ofs; + unsigned uncompSz; + unsigned OG_encSz; + unsigned char *b; + + ofs = u32b(ss) + end; + + /* first entry points to end of list, and first file */ + if (!end) + { + end = ofs; + outSz = end; + + /* allocate file list */ + list_num = (end / 4) + 1; + list = calloc(list_num, sizeof(*list)); + if (!list) + return "memory error"; + item = list; + + FILE_ALIGN + + /* output file may be aligned differently */ + end_out = outSz; + + progress_end = end / 4; + } + + /* b now points to compressed file */ + b = src + ofs; + + /* update progress display */ + if (name) + progress(name, (ss - src) / 4, progress_end); + + /* there should be room for 4-byte codec and 4-byte size */ + if (b + 4 >= src + sz) + break; + + /* decompressed file size is second word */ + uncompSz = u32b(b + 4); + + /* yaz-encoded file */ + if (!memcmp(b, codec, 4)) + { + unsigned char *fout = out + outSz; + unsigned encSz; + + /* user doesn't want encoded data */ + if (!encode) + { + imm = fout; + encSz = uncompSz; + } + + /* decode 'b' only if user provided decoder */ + if (decode) + { + if (decode(b, imm, uncompSz, &OG_encSz)) + return "decoder error"; + } + /* if no decoder is provided, direct copy */ + else + memcpy(imm, b + 0x10, uncompSz); + + /* encode only if user wants that */ + if (encode) + { + /* if no exist function has been provided, or + * if it hasn't been encoded yet, encode it + */ + if (!exist || !exist(imm, uncompSz, fout, &encSz)) + { + if (encode(imm, uncompSz, fout, &encSz, ctx)) + return "encoder error"; + } + } + + /* point current entry to new file location */ + if (ss > src) + u32wr(out + (ss - src), outSz - end_out); + + /* first entry follows different rules */ + else + u32wr(out + (ss - src), end_out); + + /* advance out_sz to immediately after current file */ + outSz += encSz; + + /* align output */ + FILE_ALIGN + } + + /* end of list */ + else if (u32b(b) == 0) + break; + + /* unknown codec */ + else + { + char *errmsg = (char*)out; + char srep[16]; + sprintf(srep, "%08x", u32b(b)); + sprintf( + errmsg + , "unknown codec 0x%s encountered at %08X!\n" + , srep + , ofs + ); + return errmsg; + } + + ss += 4; + item += 1; + + } while (ss - src < end); + + /* update progress display */ + if (name) + progress(name, progress_end, progress_end); + + /* point final entry to end (four 00 bytes) */ + u32wr(out + (ss - src), outSz - end_out); + memset(out + outSz, 0, 16); + outSz += 4; + + /* in case list end changed due to padding, make multiple * + * end-of-list markers throughout the alignment space */ + if (end_out > end) + { + unsigned i; + unsigned last = u32b(out + (end - 4)); + for (i = 0; i < (end_out - end) / 4; ++i) + { + u32wr(out + end + i * 4, last); + } + } + + /* align final output size to 16 */ + if (outSz & 15) + outSz += 16 - (outSz & 15); + + /* if new file was constructed, note its size */ + *dst_sz = outSz; + + /* cleanup */ + free(list); + + /* success */ + return 0; +} + +#ifdef YAR_MAIN_TEST +/* + * + * usage example (writes decompressed archive) + * + */ + +/* yaz decoder, courtesy of spinout182 */ +static +int spinout_yaz_dec(void *_src, void *_dst, int dstSz) +{ + unsigned char *src = _src; + unsigned char *dst = _dst; + + int srcPlace = 0, dstPlace = 0; /*current read/write positions*/ + + unsigned int validBitCount = 0; /*number of valid bits left in "code" byte*/ + unsigned char currCodeByte = 0; + + int uncompressedSize = dstSz; + + src += 0x10; + + while(dstPlace < uncompressedSize) + { + /*read new "code" byte if the current one is used up*/ + if(!validBitCount) + { + currCodeByte = src[srcPlace]; + ++srcPlace; + validBitCount = 8; + } + + if(currCodeByte & 0x80) + { + /*direct copy*/ + dst[dstPlace] = src[srcPlace]; + dstPlace++; + srcPlace++; + } + else + { + /*RLE part*/ + unsigned char byte1 = src[srcPlace]; + unsigned char byte2 = src[srcPlace + 1]; + srcPlace += 2; + + unsigned int dist = ((byte1 & 0xF) << 8) | byte2; + unsigned int copySource = dstPlace - (dist + 1); + + unsigned int numBytes = byte1 >> 4; + if(numBytes) + numBytes += 2; + else + { + numBytes = src[srcPlace] + 0x12; + srcPlace++; + } + + /*copy run*/ + int i; + for(i = 0; i < numBytes; ++i) + { + dst[dstPlace] = dst[copySource]; + copySource++; + dstPlace++; + } + } + + /*use next bit from "code" byte*/ + currCodeByte <<= 1; + validBitCount-=1; + } + + return 0; +} + + +/* encodes decompressed data, storing result in dst */ +static +int encode(void *src, int srcSz, void *_dst, int *dstSz, void *ctx) +{ + unsigned char *dst = _dst; + +/* header */ + /* codec */ + memcpy(dst, "raw0", 4); + + /* decompressed size */ + u32wr(dst + 4, srcSz); + + /* 8 more bytes of padding */ + memset(dst + 8, 0, 8); + +/* contents */ + /* direct copy (data left unencoded; you could encode here though) */ + memcpy(dst + 0x10, src, srcSz); + *dstSz = srcSz + 0x10; + + return 0; +} + +/* checks if data has already been encoded */ +/* if it does, dst is filled with that data and 1 is returned */ +/* 0 is returned otherwise */ +static +int exist(void *src, int srcSz, void *dst, int *dstSz) +{ + return 0; +} + +/* unsafe but it's a test program so it's fine */ +static +unsigned char * +file_read(char *fn, unsigned *sz) +{ + FILE *fp; + unsigned char *raw; + + assert(fn); + assert(sz); + + fp = fopen(fn, "rb"); + if (!fp) + FERR("failed to open file for reading"); + + fseek(fp, 0, SEEK_END); + *sz = ftell(fp); + + if (!sz) + FERR("read file size == 0"); + + fseek(fp, 0, SEEK_SET); + raw = malloc(*sz); + if (!raw) + FERR("memory error"); + + if (fread(raw, 1, *sz, fp) != *sz) + FERR("file read error"); + + fclose(fp); + return raw; +} + +int main(int argc, char *argv[]) +{ + unsigned char *raw; + unsigned int raw_sz; + + unsigned char *out; + unsigned char *imm; + unsigned int out_sz = 0; + + if (argc != 2) + FERR("args: unyar in.yar > out.yar"); + + raw = file_read(argv[1], &raw_sz); + fprintf(stderr, "input file %s:\n", argv[1]); + + /* surely an archive won't exceed 64 MB */ + out = malloc(1024 * 1024 * 64); + imm = malloc(1024 * 1024 * 64); + + yar_reencode( + raw, raw_sz, out, &out_sz, 12, "Yaz0", imm + , spinout_yaz_dec + , encode + , exist + ); + + /* write output to stdout */ + fwrite(out, 1, out_sz, stdout); + + free(raw); + free(out); + free(imm); +} + +#endif /* YAR_MAIN_TEST */ + diff --git a/tools/z64compress/src/enc/yar.h b/tools/z64compress/src/enc/yar.h new file mode 100644 index 0000000..0889094 --- /dev/null +++ b/tools/z64compress/src/enc/yar.h @@ -0,0 +1,36 @@ +/* <z64.me> yar.c: decode and encode MM yaz archives */ + +#ifndef Z64YAR_H_INCLUDED +#define Z64YAR_H_INCLUDED + +/* reencode yar archive */ +/* returns 0 on success, pointer to error message otherwise */ +char * +yar_reencode( + unsigned char *src /* source archive */ + , unsigned int sz /* source archive size */ + , unsigned char *dst /* destination archive */ + , unsigned int *dst_sz /* destination archive size */ + , int align /* compressed file alignment */ + + , const char *name /* name of archive (0 = hide progress) */ + , const char *codec /* the expected encoding header "Yaz0" */ + , void *imm /* intermediate buffer for conversion */ + , void *ctx /* compression context (if applicable) */ + + /* decompresses file; return non-zero on fail; optional + * if files are already decompressed (up to user to know) + */ + , int decode(void *src, void *dst, unsigned dstSz, unsigned *srcSz) + + /* compress file; returns non-zero on fail; optional if + * files are desired to be left decompressed + */ + , int encode(void *src, unsigned srcSz, void *dst, unsigned *dstSz, void *ctx) + + /* test if file has been previously encoded; optional */ + , int exist(void *src, unsigned srcSz, void *dst, unsigned *dstSz) +); + +#endif /* Z64YAR_H_INCLUDED */ + diff --git a/tools/z64compress/src/enc/yaz.c b/tools/z64compress/src/enc/yaz.c new file mode 100644 index 0000000..a6897a7 --- /dev/null +++ b/tools/z64compress/src/enc/yaz.c @@ -0,0 +1,464 @@ +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <string.h> +#include "stretchy_buffer.h" + +struct yazCtx +{ + uint16_t *c; + uint32_t *cmds; + uint16_t *ctrl; + uint8_t *raws; + uint8_t *ctl; + uint8_t *back; + int *return_data; +}; + +void yazCtx_free(void *_ctx) +{ + struct yazCtx *ctx = _ctx; + + if (!ctx) + return; + + free(ctx->return_data); + sb_free(ctx->c); + sb_free(ctx->raws); + sb_free(ctx->ctrl); + sb_free(ctx->cmds); + sb_free(ctx->ctl); + sb_free(ctx->back); +} + +void *yazCtx_new(void) +{ + struct yazCtx *ctx = calloc(1, sizeof(*ctx)); + + if (!ctx) + return 0; + + /* allocate everything */ + ctx->c = sb_add(ctx->c, 32); + ctx->return_data = malloc(2 * sizeof(*ctx->return_data)); + ctx->raws = sb_add(ctx->raws, 32); + ctx->ctrl = sb_add(ctx->ctrl, 32); + ctx->cmds = sb_add(ctx->cmds, 32); + ctx->ctl = sb_add(ctx->ctl , 32); + ctx->back = sb_add(ctx->back, 32); + + return ctx; +} + +// MIO0 encoding +#define MIx 0 + +#define min(MINA, MINB) ( ( (MINA)<(MINB) ) ? (MINA) : (MINB) ) +#define max(MAXA, MAXB) ( ( (MAXA)>(MAXB) ) ? (MAXA) : (MAXB) ) + +#define U32b(u32X) ((u32X)[0]<<24|(u32X)[1]<<16|(u32X)[2]<<8|(u32X)[3]) +#define U16b(u32X) ((u32X)[0]<<8|(u32X)[1]) +#define U32wr(u32DST,u32SRC) (*(u32DST+0))=((u32SRC)>>24)&0xFF,\ + (*(u32DST+1))=((u32SRC)>>16)&0xFF,\ + (*(u32DST+2))=((u32SRC)>>8)&0xFF,\ + (*(u32DST+3))=((u32SRC)>>0)&0xFF +#define U16wr(u16DST,u16SRC) (*(u16DST+0))=((u16SRC)>>8)&0xFF,\ + (*(u16DST+1))=((u16SRC)>>0)&0xFF + +static uint16_t *_enc_next_cpy(struct yazCtx *ctx, uint8_t *back) { + stb__sbn(ctx->c)=0; // initialize count to 0 + int x; + for (x=0; x < (sb_count(back) & (0xFFFFFFFE)); x += 2) { + sb_push(ctx->c, (back[x]<<8) | back[x+1]); + } + return ctx->c; +} + +static uint32_t _enc_z_from_tables(struct yazCtx *ctx, uint8_t *ctl, uint8_t *back, uint8_t *values, uint8_t *output, int dec_s, const char *mode) { + //_enc_next_cpy(NULL); + uint8_t *b=ctl, *v=values; + uint16_t *c = _enc_next_cpy(ctx, back); + uint32_t bit=0x10000, output_position=0; + // if dec_s declared, will keep accurate track + while (dec_s > 0) { + // get next bit + if (bit > 0xFFFF) { + bit = b[0]; + b++; + output[output_position++] = bit & 0xFF; + bit |= 0x100; + } + // catch end of control commands + if (bit & 0x80) { + output[output_position++] = v[0]; + v++; + dec_s--; + } else { + uint16_t val=c[0]; + c++; + output[output_position++] = ((val>>8)&0xFF); + output[output_position++] = ((val)&0xFF); + + // decrement dec_s accurately with length + val>>=12; + val&=0xF; + if(MIx) + dec_s--; + else if(val==0) { + val = v[0]; + v++; + output[output_position++]=val; + val+=16; + } + dec_s -= val+2; + } + bit <<= 1; + } + return output_position; +} + +static int _enc_find(struct yazCtx *ctx, uint8_t *array, uint8_t *needle, int needle_len, int start_index, int source_length) { + while(start_index < (source_length - needle_len + 1)) { + int r, index = -1; + for(r=start_index; r < (source_length - needle_len + 1); r++) { + if(array[r]==needle[0]) { + index=r; + break; + } + } + + // if we did not find even the first element, the search has failed + if (index == -1) + return -1; + + int i, p; + // check for needle + for (i = 0, p = index; i < needle_len; i++, p++) { + if (array[p] != needle[i]) + break; + } + if(i==needle_len) { + // needle was found + return index; + } + // continue to search for needle + start_index = index + 1; + } + return -1; +} + +static int *_enc_search(struct yazCtx *ctx, uint8_t *data, uint32_t pos, uint32_t sz, uint32_t cap/*=0x111*/) { + int *return_data = ctx->return_data; + // this is necessary unless pos is signed, so let's play it safe + int mp = (pos>0x1000)?(pos-0x1000):0; + int ml = min(cap, sz - pos); + if(ml<3) { + return_data[0]=return_data[1]=0; + return return_data; + } + int + hitp = 0, + hitl = 3, + hl = -1 + ; + + if (mp < pos) { + hl = _enc_find(ctx, data+mp, data+pos, hitl, 0, pos + hitl - mp); + while (hl < (pos - mp)) { + while ((hitl < ml) && (data[pos + hitl] == data[mp + hl + hitl]) ) { + hitl += 1; + } + mp += hl; + hitp = mp; + if (hitl == ml) { + return_data[0] = hitp; + return_data[1] = hitl; + return return_data; + } + mp += 1; + hitl += 1; + if (mp >= pos) + break; + hl = _enc_find(ctx, data+mp, data+pos, hitl, 0, pos + hitl - mp); + } + } + + // if length < 4, return miss + if (hitl < 4) + hitl = 1; + + return_data[0] = hitp; + return_data[1] = hitl-1; + return return_data; +} + +static +uint32_t encode(struct yazCtx *ctx, uint8_t *data, uint32_t data_size, uint8_t *output, const char *mode) { + uint32_t + cap=0x111, + sz=data_size, + pos=0, + flag=0x80000000 + ; + // initialize count of each to 0 + stb__sbn(ctx->raws)=0; + stb__sbn(ctx->ctrl)=0; + stb__sbn(ctx->cmds)=0; + + sb_push(ctx->cmds, 0); + + if(data_size==0) { + memcpy(output, mode, 4); + int i; + for(i=4; i<16; i++) + output[i]=0x00; + return 16; + } + while(pos<sz) { + int *search_return = _enc_search(ctx, data, pos, sz, cap); + + int hitp = search_return[0]; + int hitl = search_return[1]; + + if (hitl < 3) { + // push a raw if copying isn't possible + sb_push(ctx->raws, data[pos]); + ctx->cmds[sb_count(ctx->cmds)-1] |= flag; + pos += 1; + } else { + search_return = _enc_search(ctx, data, pos+1, sz, cap); + int tstp = search_return[0]; + int tstl = search_return[1]; + + if ((hitl + 1) < tstl) { + sb_push(ctx->raws, data[pos]); + ctx->cmds[sb_count(ctx->cmds)-1] |= flag; + pos += 1; + flag >>= 1; + if (flag == 0) { + flag = 0x80000000; + sb_push(ctx->cmds, 0); + } + hitl = tstl; + hitp = tstp; + } + int e = pos - hitp - 1; + pos += hitl; + // handle MIx first, then Yax conditions + if (cap == 0x12) { + hitl -= 3; + sb_push(ctx->ctrl, (hitl<<12) | e); + } else if (hitl < 0x12) { + hitl -= 2; + sb_push(ctx->ctrl, (hitl<<12)|e); + } else { + sb_push(ctx->ctrl, e); + sb_push(ctx->raws, hitl - 0x12); + } + } + // advance the flag and refill if required + flag >>= 1; + if (flag == 0) { + flag = 0x80000000; + sb_push(ctx->cmds, 0);//cmds.push_back(0); + } + } + + // if no cmds in final word, delete it + if (flag == 0x80000000) { + stb__sbn(ctx->cmds) -= 1;//cmds.erase(cmds.end()-1); + } + + // block and stream differentiation + // Yay is block, Yaz is stream + int mode_block=1, mode_stream=1; // temporary, for testing + mode_block=!strcmp(mode,"Yay0"); + if (mode_block ) { + uint32_t l = (sb_count(ctx->cmds) << 2) + 16; + uint32_t o = (sb_count(ctx->ctrl) << 1) + l; + memcpy(output, mode, 4); + U32wr(output+4, sz); + U32wr(output+8, l); + U32wr(output+12, o); + + uint32_t output_position = 16; + uint32_t x; + for (x=0; x<sb_count(ctx->cmds); x++) { + U32wr(output+output_position, ctx->cmds[x]); + output_position+=4; + } + for (x=0; x<sb_count(ctx->ctrl); x++) { + U16wr(output+output_position, ctx->ctrl[x]); + output_position+=2; + } + for (x=0; x<sb_count(ctx->raws); x++) { + output[output_position++] = ctx->raws[x]; + } + return output_position; + } else if(mode_stream) { + memcpy(output, mode, 4); + U32wr(output+4, sz); + U32wr(output+8, 0); + U32wr(output+12, 0); + + uint32_t output_position = 0; + stb__sbn(ctx->ctl)=0; // initialize count to 0 + stb__sbn(ctx->back)=0; // initialize count to 0 + uint32_t x; + for (x=0; x < sb_count(ctx->cmds); x++) { + sb_push(ctx->ctl, (ctx->cmds[x]>>24)&0xFF); + sb_push(ctx->ctl, (ctx->cmds[x]>>16)&0xFF); + sb_push(ctx->ctl, (ctx->cmds[x]>>8)&0xFF); + sb_push(ctx->ctl, (ctx->cmds[x])&0xFF); + } + for (x=0; x < sb_count(ctx->ctrl); x++) { + sb_push(ctx->back, (ctx->ctrl[x]>>8)&0xFF); + sb_push(ctx->back, (ctx->ctrl[x])&0xFF); + } + output_position = _enc_z_from_tables(ctx, ctx->ctl, ctx->back, ctx->raws, output+16, data_size, mode); + return 16 + output_position; + } + return 0; +} + + +int +yazenc( + void *_src + , unsigned src_sz + , void *_dst + , unsigned *dst_sz + , void *_ctx +) +{ + unsigned char *src = _src; + unsigned char *dst = _dst; + if (!_ctx) + return 1; + *dst_sz = encode(_ctx, src, src_sz, dst, "Yaz0"); + return 0; +} + +/* yaz decoder, courtesy of spinout182 */ +int +yazdec(void *_src, void *_dst, unsigned dstSz, unsigned *srcSz) +{ + unsigned char *src = _src; + unsigned char *dst = _dst; + + int srcPlace = 0, dstPlace = 0; /*current read/write positions*/ + + unsigned int validBitCount = 0; /*number of valid bits left in "code" byte*/ + unsigned char currCodeByte = 0; + + int uncompressedSize = dstSz; + + src += 0x10; + + while(dstPlace < uncompressedSize) + { + /*read new "code" byte if the current one is used up*/ + if(!validBitCount) + { + currCodeByte = src[srcPlace]; + ++srcPlace; + validBitCount = 8; + } + + if(currCodeByte & 0x80) + { + /*direct copy*/ + dst[dstPlace] = src[srcPlace]; + dstPlace++; + srcPlace++; + } + else + { + /*RLE part*/ + unsigned char byte1 = src[srcPlace]; + unsigned char byte2 = src[srcPlace + 1]; + srcPlace += 2; + + unsigned int dist = ((byte1 & 0xF) << 8) | byte2; + unsigned int copySource = dstPlace - (dist + 1); + + unsigned int numBytes = byte1 >> 4; + if(numBytes) + numBytes += 2; + else + { + numBytes = src[srcPlace] + 0x12; + srcPlace++; + } + + /*copy run*/ + int i; + for(i = 0; i < numBytes; ++i) + { + dst[dstPlace] = dst[copySource]; + copySource++; + dstPlace++; + } + } + + /*use next bit from "code" byte*/ + currCodeByte <<= 1; + validBitCount-=1; + } + + if (srcSz) + *srcSz = srcPlace; + + return 0; +} + +#ifdef YAZ_MAIN_TEST + +#define FERR(x) { \ + fprintf(stderr, x); \ + fprintf(stderr, "\n"); \ + exit(EXIT_FAILURE); \ +} + +int main(int argc, char* argv[]) +{ + FILE *fp; + struct yazCtx *ctx; + unsigned size; + + if(argc < 2) + FERR("args: yazenc in.raw > out.yaz"); + + fp = fopen(argv[1], "rb"); + if(fp == NULL) + FERR("failed to open file"); + + fseek(fp, 0, SEEK_END); + size = ftell(fp); + fseek(fp, 0, SEEK_SET); + + fprintf(stderr, "input file size: %d\n", size); + + void *buf = malloc(size); + void *outbuf = malloc( (size + 64) * 2); + + if (fread(buf, 1, size, fp) != size) + FERR("failed to read file"); + + fclose(fp); + + ctx = yazCtx_new(); + if (yazenc(buf, size, outbuf, &size, ctx)) + FERR("encoding error"); + + if (fwrite(outbuf, 1, size, stdout) != size) + FERR("failed to write stdout"); + + yazCtx_free(ctx); + free(buf); + free(outbuf); + return EXIT_SUCCESS; +} +#endif /* YAZ_MAIN_TEST */ + + diff --git a/tools/z64compress/src/enc/zx7.c b/tools/z64compress/src/enc/zx7.c new file mode 100644 index 0000000..4b4fdb0 --- /dev/null +++ b/tools/z64compress/src/enc/zx7.c @@ -0,0 +1,37 @@ +#if 0 +#include "zx7/zx7.h" +#include "zx7/optimize.c" +#include "zx7/compress.c" +#include "zx7/zx7.c" + +int +zx7enc( + void *_src + , unsigned src_sz + , void *_dst + , unsigned *dst_sz + , void *_ctx +) +{ + unsigned char *src = _src; + unsigned char *dst = _dst; + + int hlen = 8; /* header length; required due to MM's archives */ + memset(dst, 0, hlen); + memcpy(dst, "ZX70", 4); + dst[4] = (src_sz >> 24); + dst[5] = (src_sz >> 16); + dst[6] = (src_sz >> 8); + dst[7] = (src_sz >> 0); + + *dst_sz = ZX7Compress(src, src_sz, dst + hlen); + + if (!*dst_sz) + return 1; + + *dst_sz += hlen; + + return 0; +} +#endif + diff --git a/tools/z64compress/src/enc/zx7/compress.c b/tools/z64compress/src/enc/zx7/compress.c new file mode 100644 index 0000000..1df625e --- /dev/null +++ b/tools/z64compress/src/enc/zx7/compress.c @@ -0,0 +1,160 @@ +/* + * (c) Copyright 2012-2016 by Einar Saukas. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * The name of its author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "zx7.h" + +#if !TARGET_PRIZM + +#ifdef __cplusplus +extern "C" { +#endif + +#include <stdlib.h> + +static unsigned char* c_output_data; +static unsigned int c_output_index; +static unsigned int c_bit_index; +static int c_bit_mask; + +static inline void c_write_byte(int value) { + c_output_data[c_output_index++] = value; +} + +static void c_write_bit(int value) { + if (c_bit_mask == 0) { + c_bit_mask = 128; + c_bit_index = c_output_index; + c_write_byte(0); + } + if (value > 0) { + c_output_data[c_bit_index] |= c_bit_mask; + } + c_bit_mask >>= 1; +} + +static void write_elias_gamma(int value) { + int i; + + for (i = 2; i <= value; i <<= 1) { + c_write_bit(0); + } + while ((i >>= 1) > 0) { + c_write_bit(value & i); + } +} + +unsigned char *compress( + Optimal *optimal + , unsigned char *input_data + , unsigned int input_size + , long skip + , unsigned int *output_size + , unsigned char *dst +) +{ + unsigned int input_index; + unsigned int input_prev; + int offset1; + int mask; + int i; + + /* calculate and allocate output buffer */ + input_index = input_size-1; + *output_size = (optimal[input_index].bits+18+7)/8 + 3; + unsigned char *ret = dst; + if (!ret) { + return 0; + } + + c_output_data = ret + 3; + + /* un-reverse optimal sequence */ + optimal[input_index].bits = 0; + while (input_index != skip) { + input_prev = input_index - (optimal[input_index].len > 0 ? optimal[input_index].len : 1); + optimal[input_prev].bits = input_index; + input_index = input_prev; + } + + c_output_index = 0; + c_bit_mask = 0; + + /* first byte is always literal */ + c_write_byte(input_data[input_index]); + + /* process remaining bytes */ + while ((input_index = optimal[input_index].bits) > 0) { + if (optimal[input_index].len == 0) { + + /* literal indicator */ + c_write_bit(0); + + /* literal value */ + c_write_byte(input_data[input_index]); + + } else { + + /* sequence indicator */ + c_write_bit(1); + + /* sequence length */ + write_elias_gamma(optimal[input_index].len-1); + + /* sequence offset */ + offset1 = optimal[input_index].offset-1; + if (offset1 < 128) { + c_write_byte(offset1); + } else { + offset1 -= 128; + c_write_byte((offset1 & 127) | 128); + for (mask = 1024; mask > 127; mask >>= 1) { + c_write_bit(offset1 & mask); + } + } + } + } + + /* sequence indicator */ + c_write_bit(1); + + /* end marker > MAX_LEN */ + for (i = 0; i < 16; i++) { + c_write_bit(0); + } + c_write_bit(1); + + // decompressed size is first three bytes + ret[0] = (input_size & 0xFF0000) >> 16; + ret[1] = (input_size & 0x00FF00) >> 8; + ret[2] = (input_size & 0x0000FF); + + return ret; +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/z64compress/src/enc/zx7/dzx7.c b/tools/z64compress/src/enc/zx7/dzx7.c new file mode 100644 index 0000000..5909f31 --- /dev/null +++ b/tools/z64compress/src/enc/zx7/dzx7.c @@ -0,0 +1,138 @@ +/* + * (c) Copyright 2015 by Einar Saukas. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * The name of its author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "zx7.h" + +#ifdef __cplusplus +extern "C" { +#endif + +static unsigned char *d_input_data; +static unsigned char *d_output_data; +static unsigned int d_input_index; +static unsigned int d_output_index; +static unsigned int d_input_size; +static int bit_mask; +static int bit_value; + +static +int d_read_byte(void) { + return d_input_data[d_input_index++]; +} + +static +int d_read_bit(void) { + bit_mask >>= 1; + if (bit_mask == 0) { + bit_mask = 128; + bit_value = d_read_byte(); + } + return bit_value & bit_mask ? 1 : 0; +} + +static +int read_elias_gamma(void) { + int i; + int value; + + i = 0; + while (!d_read_bit()) { + i++; + } + if (i > 15) { + return -1; + } + value = 1; + while (i--) { + value = value << 1 | d_read_bit(); + } + return value; +} + +int read_offset(void) { + int value; + int i; + + value = d_read_byte(); + if (value < 128) { + return value; + } else { + i = d_read_bit(); + i = i << 1 | d_read_bit(); + i = i << 1 | d_read_bit(); + i = i << 1 | d_read_bit(); + return ((value & 127) | (i << 7)) + 128; + } +} + +static +void d_write_byte(int value) { + d_output_data[d_output_index++] = value; +} + +void d_write_bytes(int offset, int length) { + int i; + while (length-- > 0) { + i = d_output_index-offset; + d_write_byte(d_output_data[i]); + } +} + +unsigned int ZX7GetDecompressedSize(unsigned char* compressedData) { + return compressedData[0] * 65536 + compressedData[1] * 256 + compressedData[2]; +} + +int ZX7Decompress(unsigned char* srcData, unsigned char* destData, unsigned int destLength) { + if (destLength < ZX7GetDecompressedSize(srcData) || !srcData || !destData) { + return -1; + } + + int length; + + d_input_data = srcData + 3; + d_output_data = destData; + + d_input_size = 0; + d_input_index = 0; + d_output_index = 0; + bit_mask = 0; + + d_write_byte(d_read_byte()); + while (1) { + if (!d_read_bit()) { + d_write_byte(d_read_byte()); + } else { + length = read_elias_gamma()+1; + if (length == 0) { + return 0; + } + d_write_bytes(read_offset()+1, length); + } + } +} + +#ifdef __cplusplus +} +#endif diff --git a/tools/z64compress/src/enc/zx7/optimize.c b/tools/z64compress/src/enc/zx7/optimize.c new file mode 100644 index 0000000..e0d5939 --- /dev/null +++ b/tools/z64compress/src/enc/zx7/optimize.c @@ -0,0 +1,167 @@ +/* + * (c) Copyright 2012-2016 by Einar Saukas. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * The name of its author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "zx7.h" + +#if !TARGET_PRIZM + +#ifdef __cplusplus +extern "C" { +#endif + + +#include <stdlib.h> +#include <string.h> /* memset */ + +/* reusable memory (free using zx7_shutdown()) */ +static unsigned int *min = 0; +static unsigned int *max = 0; +static unsigned int *matches = 0; +static unsigned int *match_slots = 0; +static Optimal *optimal = 0; + +void +zx7_shutdown(void) +{ + if (min) + free(min); + if (max) + free(max); + if (matches) + free(matches); + if (match_slots) + free(match_slots); + if (optimal) + free(optimal); +} + +static int elias_gamma_bits(int value) { + int bits; + + bits = 1; + while (value > 1) { + bits += 2; + value >>= 1; + } + return bits; +} + +static int count_bits(int offset, int len) { + return 1 + (offset > 128 ? 12 : 8) + elias_gamma_bits(len-1); +} + +Optimal *optimize( + unsigned char *input_data + , unsigned int input_size + , unsigned long skip +) { + + unsigned int *match; + int match_index; + int offset; + unsigned int len; + unsigned int best_len; + unsigned int bits; + unsigned int i; + + /* allocate all data structures at once */ + if (!min) + min = malloc((MAX_OFFSET+1) * sizeof(*min)); + if (!max) + max = malloc((MAX_OFFSET+1) * sizeof(*max)); + if (!matches) + matches = malloc(256 * 256 * sizeof(*matches)); + if (!match_slots) + match_slots = malloc(input_size * sizeof(*match_slots)); + if (!optimal) + optimal = malloc(input_size * sizeof(*optimal)); + + if (!min || !max || !matches || !match_slots || !optimal) + return 0; + + memset(min, 0, (MAX_OFFSET+1) * sizeof(*min)); + memset(max, 0, (MAX_OFFSET+1) * sizeof(*max)); + memset(matches, 0, 256 * 256 * sizeof(*matches)); + memset(match_slots, 0, input_size * sizeof(*match_slots)); + memset(optimal, 0, input_size * sizeof(*optimal)); + + /* index skipped bytes */ + for (i = 1; i <= skip; i++) { + match_index = input_data[i-1] << 8 | input_data[i]; + match_slots[i] = matches[match_index]; + matches[match_index] = i; + } + + /* first byte is always literal */ + optimal[skip].bits = 8; + + /* process remaining bytes */ + for (; i < input_size; i++) { + + optimal[i].bits = optimal[i-1].bits + 9; + match_index = input_data[i-1] << 8 | input_data[i]; + best_len = 1; + for (match = &matches[match_index]; *match != 0 && best_len < MAX_LEN; match = &match_slots[*match]) { + offset = i - *match; + if (offset > MAX_OFFSET) { + *match = 0; + break; + } + + for (len = 2; len <= MAX_LEN && i >= skip+len; len++) { + if (len > best_len) { + best_len = len; + bits = optimal[i-len].bits + count_bits(offset, len); + if (optimal[i].bits > bits) { + optimal[i].bits = bits; + optimal[i].offset = offset; + optimal[i].len = len; + } + } else if (max[offset] != 0 && i+1 == max[offset]+len) { + len = i-min[offset]; + if (len > best_len) { + len = best_len; + } + } + if (i < offset+len || input_data[i-len] != input_data[i-len-offset]) { + break; + } + } + min[offset] = i+1-len; + max[offset] = i; + } + match_slots[i] = matches[match_index]; + matches[match_index] = i; + } + + return optimal; +} + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/z64compress/src/enc/zx7/zx7.c b/tools/z64compress/src/enc/zx7/zx7.c new file mode 100644 index 0000000..06f65d3 --- /dev/null +++ b/tools/z64compress/src/enc/zx7/zx7.c @@ -0,0 +1,46 @@ +/* + * (c) Copyright 2012-2016 by Einar Saukas. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * The name of its author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "zx7.h" + +#if !TARGET_PRIZM + +#ifdef __cplusplus +extern "C" { +#endif + +// ZX7 Compress the given data, outData is malloc'd and the return value is the length (first 3 bytes of data will be 24-bit size result for convenience) +unsigned int ZX7Compress(unsigned char *srcData, unsigned int inLength, unsigned char *outData) { + unsigned int output_size; + compress(optimize(srcData, inLength, 0), srcData, inLength, 0, &output_size, outData); + + return output_size; +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/z64compress/src/enc/zx7/zx7.h b/tools/z64compress/src/enc/zx7/zx7.h new file mode 100644 index 0000000..a3a4e6c --- /dev/null +++ b/tools/z64compress/src/enc/zx7/zx7.h @@ -0,0 +1,66 @@ +/* + * (c) Copyright 2012-2016 by Einar Saukas. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * The name of its author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + +#if !TARGET_PRIZM + +typedef struct optimal_t { + unsigned int bits; + int offset; + int len; +} Optimal; + +#define MAX_OFFSET 2176 /* range 1..2176 */ +#define MAX_LEN 65536 /* range 2..65536 */ + +Optimal *optimize(unsigned char *input_data, unsigned int input_size, unsigned long skip); + +unsigned char *compress(Optimal *optimal, unsigned char *input_data, unsigned int input_size, long skip, unsigned int *output_size, unsigned char *dst); + +// THOMAS : added these for my use: + +// ZX7 Compress the given data, outData is malloc'd and the return value is the length (first 3 bytes of data will be 24-bit size result for convenience) +unsigned int ZX7Compress(unsigned char *srcData, unsigned int inLength, unsigned char *outData); + +#endif + +// Get decompressed size of ZX7Compress'd data +unsigned int ZX7GetDecompressedSize(unsigned char* compressedData); + +// Decompress the given data. Returns 0 with no errors +int ZX7Decompress(unsigned char* srcData, unsigned char* destData, unsigned int destLength); + +/* free reusable buffers */ +void +zx7_shutdown(void); + +#ifdef __cplusplus +} +#endif diff --git a/tools/z64compress/src/main.c b/tools/z64compress/src/main.c new file mode 100644 index 0000000..bd04405 --- /dev/null +++ b/tools/z64compress/src/main.c @@ -0,0 +1,379 @@ +#include <ctype.h> +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "wow.h" +#include "rom.h" + +FILE* printer; + +static void compress(struct rom *rom, int start, int end) +{ + rom_dma_compress(rom, start, end, 1); +} + +static void skip(struct rom *rom, int start, int end) +{ + rom_dma_compress(rom, start, end, 0); +} + +static void repack(struct rom *rom, int start, int end) +{ + rom_dma_repack( + rom + , start + , end + , "yaz" /* old codec */ + , 0 /* new codec */ + ); +} + +static void do_pattern( + struct rom *rom + , const char *str + , void func(struct rom *rom, int start, int end) +) +{ + const char *Ostr = str; + int last_int = -1; + int last_op = 0; + int cur; + int len; + + while (*str) + { + if (*str == '\'' || *str == '"') + { + ++str; + continue; + } + + /* calculate length of current token */ + len = strspn(str, "0123456789xXaAbBcCdDeEfF"); /* allow hex */ + if (!len) /* no len, assume it's an operator */ + len = 1; + + /* is a number or variable */ + if (isdigit(*str) || !strncmp(str, "END", 3)) + { + /* 'END' is shorthand for last entry */ + if (!strncmp(str, "END", 3)) + { + cur = rom_dma_num(rom); + str += 2; + } + + /* otherwise, it's a number */ + else + sscanf(str, "%i", &cur); + + if (cur < last_int) + die( + "invalid pattern '%s'; " + "values are not in ascending order" + , Ostr + ); + + /* apply operations on item(s) */ + if (last_op == '-') + func(rom, last_int, cur); + else + func(rom, cur, cur); + + /* prevents processing this item + * again when 'through' is used + */ + cur += 1; + } + + /* 'through' or 'single item', respectively */ + else if (*str == '-' || *str == ',') + { + if (last_int < 0) + die( + "invalid pattern '%s'; " + "pattern does not begin with number" + , Ostr + ); + last_op = *str; + } + + /* unknown character encountered */ + else + { + die( + "invalid pattern '%s'; " + "encountered unknown operator '%c'" + , Ostr + , *str + ); + } + + /* advance */ + str += len; + last_int = cur; + } +} + +static void usage(void) +{ + /* compression examples for users to adapt to their needs */ + fprintf(printer, "\n"); + fprintf(printer, " compressing oot debug\n"); + fprintf(printer, " --in \"path/to/in.z64\"\n"); + fprintf(printer, " --out \"path/to/out.z64\"\n"); + fprintf(printer, " --mb 32\n"); + fprintf(printer, " --codec yaz\n"); + fprintf(printer, " --cache \"path/to/cache\"\n"); + fprintf(printer, " --dma \"0x12F70,1548\"\n"); + fprintf(printer, " --compress \"9-14,28-END\"\n"); + fprintf(printer, " --threads 4\n"); + fprintf(printer, "\n"); + fprintf(printer, " compressing oot ntsc 1.0\n"); + fprintf(printer, " --in \"path/to/in.z64\"\n"); + fprintf(printer, " --out \"path/to/out.z64\"\n"); + fprintf(printer, " --mb 32\n"); + fprintf(printer, " --codec yaz\n"); + fprintf(printer, " --cache \"path/to/cache\"\n"); + fprintf(printer, " --dma \"0x7430,1526\"\n"); + fprintf(printer, " --compress \"10-14,27-END\"\n"); + fprintf(printer, " --threads 4\n"); + fprintf(printer, "\n"); + fprintf(printer, " compressing mm usa\n"); + fprintf(printer, " --in \"path/to/in.z64\"\n"); + fprintf(printer, " --out \"path/to/out.z64\"\n"); + fprintf(printer, " --mb 32\n"); + fprintf(printer, " --codec yaz\n"); + fprintf(printer, " --cache \"path/to/cache\"\n"); + fprintf(printer, " --dma \"0x1A500,1568\"\n"); + fprintf(printer, " --compress \"10-14,23,24,31-END\"\n"); + fprintf(printer, " --skip \"1127\"\n"); + fprintf(printer, " --repack \"15-20,22\"\n"); + fprintf(printer, " --threads 4\n"); + fprintf(printer, "\n"); + fprintf(printer, " arguments\n"); + fprintf(printer, " --in uncompressed input rom\n"); + fprintf(printer, "\n"); + fprintf(printer, " --out compressed output rom\n"); + fprintf(printer, "\n"); + fprintf(printer, " --matching attempt matching compression at the cost of\n"); + fprintf(printer, " some optimizations and reduced performance\n"); + fprintf(printer, "\n"); + fprintf(printer, " --mb how many mb the compressed rom should be\n"); + fprintf(printer, "\n"); + fprintf(printer, " --codec currently supported codecs\n"); + fprintf(printer, " yaz\n"); + fprintf(printer, " ucl\n"); + fprintf(printer, " lzo\n"); + fprintf(printer, " aplib\n"); + fprintf(printer, " * to use non-yaz codecs, find patches\n"); + fprintf(printer, " and code on my z64enc repo\n"); + fprintf(printer, "\n"); + fprintf(printer, " --cache is optional and won't be created if\n"); + fprintf(printer, " no path is specified (having a cache\n"); + fprintf(printer, " makes subsequent compressions faster)\n"); + fprintf(printer, " * pro-tip: linux users who don't want a\n"); + fprintf(printer, " cache to persist across power cycles\n"); + fprintf(printer, " can use the path \"/tmp/z64compress\"\n"); + fprintf(printer, "\n"); + fprintf(printer, " --dma specify dmadata address and count\n"); + fprintf(printer, "\n"); + fprintf(printer, " --compress enable compression on specified files\n"); + fprintf(printer, "\n"); + fprintf(printer, " --skip disable compression on specified files\n"); + fprintf(printer, "\n"); + fprintf(printer, " --repack handles Majora's Mask archives\n"); + fprintf(printer, "\n"); + fprintf(printer, " --threads optional multithreading;\n"); + fprintf(printer, " exclude this argument to disable it\n"); + fprintf(printer, "\n"); + fprintf(printer, " --only-stdout reserve stderr for errors and print\n"); + fprintf(printer, " everything else to stdout\n"); + fprintf(printer, "\n"); + fprintf(printer, " arguments are executed as they\n"); + fprintf(printer, " are parsed, so order matters!\n"); + fprintf(printer, "\n"); +} + +wow_main +{ + struct rom *rom = 0; + const char *Ain = 0; + const char *Aout = 0; + const char *Adma = 0; + const char *Acodec = 0; + const char *Acache = 0; + int Amb = 0; + int Athreads = 0; + bool Amatching = false; + bool Aonly_stdout = false; + wow_main_argv; + + printer = stderr; + for (int i = 1; i < argc; ++i) + { + if (!strcmp(argv[i], "--only-stdout")) + { + setvbuf(stdout, NULL, _IONBF, 0); + printer = stdout; + } + } + + fprintf(printer, "welcome to z64compress 1.0.2 <z64.me>\n"); + + if (argc <= 1) + { + usage(); + return EXIT_FAILURE; + } + + /* hacky argument handling */ + for (int i = 1; i < argc; i += 2) + { + const char *arg = argv[i]; + + /* arguments that do not require additional parameters */ + + if(!strcmp(arg, "--only-stdout")) + { + if (Aonly_stdout) + die("--only-stdout arg provided more than once"); + // handled above + Aonly_stdout = true; + i--; + continue; + } + else if (!strcmp(arg, "--matching")) + { + if (Amatching) + die("--matching arg provided more than once"); + Amatching = true; + i--; + continue; + } + + /* arguments with additional parameters */ + + const char *next = argv[i + 1]; + + if (!next) + die("%s missing parameter", arg); + + if (!strcmp(arg, "--in")) + { + if (Ain) + die("--in arg provided more than once"); + Ain = next; + rom = rom_new(Ain); + } + else if (!strcmp(arg, "--out")) + { + if (Aout) + die("--out arg provided more than once"); + Aout = next; + } + else if (!strcmp(arg, "--cache")) + { + if (Acache) + die("--cache arg provided more than once"); + Acache = next; + rom_set_cache(rom, Acache); + } + else if (!strcmp(arg, "--codec")) + { + if (Acodec) + die("--codec arg provided more than once"); + if (!Ain) + die("--dma arg provided before --in arg"); + Acodec = next; + rom_set_codec(rom, Acodec); + } + else if (!strcmp(arg, "--dma")) + { + int num; + int start = 0; + + if (!Acodec) + die("--dma arg provided before --codec arg"); + if (!Ain) + die("--dma arg provided before --in arg"); + if (Adma) + die("--dma arg provided more than once"); + Adma = next; + if (sscanf(Adma, "%i,%i", &start, &num) != 2) + die("--dma bad formatting '%s'", Adma); + rom_dma(rom, start, num, Amatching); + } + else if (!strcmp(arg, "--mb")) + { + if (Amb) + die("--mb arg provided more than once"); + if (sscanf(next, "%i", &Amb) != 1) + die("--mb could not get value from string '%s'", next); + if (Amb <= 0) + die("--mb invalid value %d", Amb); + } + else if (!strcmp(arg, "--compress")) + { + if (!Adma) + die("--compress arg provided before --dma arg"); + do_pattern(rom, next, compress); + } + else if (!strcmp(arg, "--skip")) + { + if (!Adma) + die("--skip arg provided before --dma arg"); + do_pattern(rom, next, skip); + } + else if (!strcmp(arg, "--repack")) + { + if (!Adma) + die("--repack arg provided before --dma arg"); + if (!Acodec) + die("--repack arg provided before --codec arg"); + do_pattern(rom, next, repack); + } + else if(!strcmp(arg, "--threads")) + { + if (Athreads) + die("--threads arg provided more than once"); + if (sscanf(next, "%i", &Athreads) != 1) + die("--threads could not get value from string '%s'", next); + if (Athreads < 0) + die("--threads invalid value %d", Athreads); + } + else + { + die("unknown argument '%s'", arg); + } + } + + #define ARG_ZERO_TEST(TEST, NAME) \ + if (!(TEST)) \ + die("no " NAME " arg provided") + + ARG_ZERO_TEST(Ain , "--in" ); + ARG_ZERO_TEST(Aout , "--out" ); + ARG_ZERO_TEST(Acodec, "--codec"); + + #undef ARG_ZERO_TEST + + /* finished initializing dma settings */ + rom_dma_ready(rom, Amatching); + + /* compress rom */ + rom_compress(rom, Amb, Athreads, Amatching); + fprintf(printer, "rom compressed successfully!\n"); + + /* write compressed rom */ + rom_save(rom, Aout); + fprintf(printer, "compressed rom written successfully!\n"); + + /* cleanup */ + rom_free(rom); + + return EXIT_SUCCESS; +} + diff --git a/tools/z64compress/src/n64crc.c b/tools/z64compress/src/n64crc.c new file mode 100644 index 0000000..a34d646 --- /dev/null +++ b/tools/z64compress/src/n64crc.c @@ -0,0 +1,197 @@ +/* snesrc - SNES Recompiler + * + * Mar 23, 2010: addition by spinout to actually fix CRC if it is incorrect + * + * Copyright notice for this file: + * Copyright (C) 2005 Parasyte + * + * Based on uCON64's N64 checksum algorithm by Andreas Sterbenz + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <assert.h> + +#define ROL(i, b) (((i) << (b)) | ((i) >> (32 - (b)))) +#define BYTES2LONG(b) ( (b)[0] << 24 | \ + (b)[1] << 16 | \ + (b)[2] << 8 | \ + (b)[3] ) + +#define N64_HEADER_SIZE 0x40 +#define N64_BC_SIZE (0x1000 - N64_HEADER_SIZE) + +#define N64_CRC1 0x10 +#define N64_CRC2 0x14 + +#define CHECKSUM_START 0x00001000 +#define CHECKSUM_LENGTH 0x00100000 +#define CHECKSUM_CIC6102 0xF8CA4DDC +#define CHECKSUM_CIC6103 0xA3886759 +#define CHECKSUM_CIC6105 0xDF26F436 +#define CHECKSUM_CIC6106 0x1FEA617A + + +static void gen_table(unsigned int crc_table[256]) +{ + unsigned int crc, poly; + int i, j; + + poly = 0xEDB88320; + for (i = 0; i < 256; i++) { + crc = i; + for (j = 8; j > 0; j--) { + if (crc & 1) crc = (crc >> 1) ^ poly; + else crc >>= 1; + } + crc_table[i] = crc; + } +} + + +static unsigned int crc32( + unsigned int crc_table[256] + , unsigned char *data + , int len +) +{ + unsigned int crc = ~0; + int i; + + for (i = 0; i < len; i++) { + crc = (crc >> 8) ^ crc_table[(crc ^ data[i]) & 0xFF]; + } + + return ~crc; +} + + +static int N64GetCIC(unsigned int crc_table[256], unsigned char *data) +{ + switch (crc32(crc_table, &data[N64_HEADER_SIZE], N64_BC_SIZE)) { + case 0x6170A4A1: return 6101; + case 0x90BB6CB5: return 6102; + case 0x0B050EE0: return 6103; + case 0x98BC2C86: return 6105; + case 0xACC8580A: return 6106; + } + + return 0; +} + + +static int N64CalcCRC( + unsigned int crc_table[256] + , unsigned int *crc + , unsigned char *data +) +{ + int bootcode, i; + unsigned int seed; + unsigned int t1, t2, t3; + unsigned int t4, t5, t6; + unsigned int r, d; + + switch ((bootcode = N64GetCIC(crc_table, data))) { + case 6101: + case 6102: + seed = CHECKSUM_CIC6102; + break; + case 6103: + seed = CHECKSUM_CIC6103; + break; + case 6105: + seed = CHECKSUM_CIC6105; + break; + case 6106: + seed = CHECKSUM_CIC6106; + break; + default: + return 1; + } + + t1 = t2 = t3 = t4 = t5 = t6 = seed; + + i = CHECKSUM_START; + while (i < (CHECKSUM_START + CHECKSUM_LENGTH)) { + d = BYTES2LONG(&data[i]); + if ((t6 + d) < t6) + t4++; + t6 += d; + t3 ^= d; + r = ROL(d, (d & 0x1F)); + t5 += r; + if (t2 > d) + t2 ^= r; + else + t2 ^= t6 ^ d; + + if (bootcode == 6105) + t1 += BYTES2LONG(&data[N64_HEADER_SIZE + 0x0710 + (i & 0xFF)]) ^ d; + else + t1 += t5 ^ d; + + i += 4; + } + if (bootcode == 6103) { + crc[0] = (t6 ^ t4) + t3; + crc[1] = (t5 ^ t2) + t1; + } + else if (bootcode == 6106) { + crc[0] = (t6 * t4) + t3; + crc[1] = (t5 * t2) + t1; + } + else { + crc[0] = t6 ^ t4 ^ t3; + crc[1] = t5 ^ t2 ^ t1; + } + + return 0; +} + + +/* recalculate rom crc */ +void n64crc(void *rom) +{ + unsigned int crc_table[256]; + unsigned char CRC1[4]; + unsigned char CRC2[4]; + unsigned int crc[2]; + unsigned char *rom8 = rom; + + assert(rom); + + gen_table(crc_table); + + if (!N64CalcCRC(crc_table, crc, rom)) + { + unsigned int kk1 = crc[0]; + unsigned int kk2 = crc[1]; + int i; + + for (i = 0; i < 4; ++i) + { + CRC1[i] = (kk1 >> (24-8*i))&0xFF; + CRC2[i] = (kk2 >> (24-8*i))&0xFF; + } + + for (i = 0; i < 4; ++i) + *(rom8 + N64_CRC1 + i) = CRC1[i]; + + for (i = 0; i < 4; ++i) + *(rom8 + N64_CRC2 + i) = CRC2[i]; + } +} + diff --git a/tools/z64compress/src/n64crc.h b/tools/z64compress/src/n64crc.h new file mode 100644 index 0000000..b5342da --- /dev/null +++ b/tools/z64compress/src/n64crc.h @@ -0,0 +1,32 @@ +/* snesrc - SNES Recompiler + * + * Mar 23, 2010: addition by spinout to actually fix CRC if it is incorrect + * + * Copyright notice for this file: + * Copyright (C) 2005 Parasyte + * + * Based on uCON64's N64 checksum algorithm by Andreas Sterbenz + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef N64CRC_H_INCLUDED +#define N64CRC_H_INCLUDED + +/* recalculate rom crc */ +void n64crc(void *rom); + +#endif /* N64CRC_H_INCLUDED */ + diff --git a/tools/z64compress/src/rom.c b/tools/z64compress/src/rom.c new file mode 100644 index 0000000..008597b --- /dev/null +++ b/tools/z64compress/src/rom.c @@ -0,0 +1,1698 @@ +/* + * rom.c + * + * functions for compression magic reside herein + * + * z64me <z64.me> + * + */ + +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> +#include <string.h> +#include <stdarg.h> +#include <ctype.h> + +/* POSIX dependencies */ +#include <dirent.h> +#include <sys/stat.h> +#include <unistd.h> + +/* threading */ +#include <pthread.h> + +#include "enc/enc.h" /* file compression */ +#include "enc/yar.h" /* MM archive tools */ + +#include "sha1.h" /* sha1 helpers */ +#include "n64crc.h" /* n64crc() */ + +#include "wow.h" +#include "wow_dirent.h" /* XXX always #include after dirent.h */ +#undef fopen +#undef fread +#undef fwrite +#undef remove +#define fopen wow_fopen +#define fread wow_fread +#define fwrite wow_fwrite +#define remove wow_remove + +extern FILE* printer; + +#define SIZE_16MB (1024 * 1024 * 16) +#define SIZE_4MB (1024 * 1024 * 4) + +#define DMA_DELETED 0xffffffff /* aka UINT32_MAX */ + +#define DMASORT(ROM, FUNC) \ + qsort( \ + ROM->dma \ + , ROM->dma_num \ + , sizeof(*(ROM->dma)) \ + , FUNC \ + ) + +#define DMASORT_N(ROM, FUNC, NUM) \ + qsort( \ + ROM->dma \ + , NUM \ + , sizeof(*(ROM->dma)) \ + , FUNC \ + ) + +#define DMA_FOR_EACH \ +for (dma = rom->dma; (unsigned)(dma - rom->dma) < rom->dma_num; ++dma) + +#define PROGRESS_A_B (int)(dma - rom->dma), rom->dma_num + +#define ALIGN(x, n) (((x) + ((n)-1)) & ~((n)-1)) +#define ALIGN16(x) ALIGN(x, 16) +#define ALIGN8MB(x) ALIGN(x, 8 * 0x100000) + +/* + * + * private types + * + */ + + +struct encoder +{ + int (*encfunc)( + void *src + , unsigned src_sz + , void *dst + , unsigned *dst_sz + , void *_ctx + ); + void *(*ctx_new)(void); + void (*ctx_free)(void *); +}; + + +struct dma +{ + char *compname; /* name of compressed file */ + void *compbuf; /* cache-less compressed data */ + unsigned int index; /* original index location */ + int compress; /* entry can be compressed */ + int deleted; /* points to deleted file */ + unsigned compSz; /* cache-less compressed size */ + unsigned int start; /* start offset */ + unsigned int end; /* end offset */ + unsigned int Pstart; /* start of physical (P) data */ + unsigned int Pend; /* end of physical (P) data */ + unsigned int Ostart; /* original (O) start */ + unsigned int Oend; /* original (O) end */ +}; + + +struct rom +{ + char *fn; /* filename of loaded rom */ + char *codec; /* compression codec */ + char *cache; /* compression cache */ + unsigned char *data; /* raw rom data */ + unsigned int data_sz; /* size of rom data */ + unsigned int ofs; /* offset where rom_write() writes */ + int is_comp; /* non-0 if rom has been compressed */ + struct dma *dma; /* dma array */ + unsigned int dma_num; /* number of entries in dma array */ + unsigned char *dma_raw; /* pointer to raw dmadata */ + int dma_ready; /* non-zero after dma_ready() */ + + /* memory pools for things like compression */ + struct + { + void *mb16; /* 16 mb */ + void *mb4; /* 4 mb */ + } mem; +}; + + +struct fldr_item +{ + char *name; /* name */ + void *udata; /* udata */ +}; + + +struct folder +{ + struct fldr_item *item; /* item array */ + int num; /* number of items in array */ + struct fldr_item *active; /* active item */ +}; + + +struct compThread +{ + struct rom *rom; + void *data; + int (*encfunc)( + void *src + , unsigned src_sz + , void *dst + , unsigned *dst_sz + , void *_ctx + ); + const char *codec; + char *dot_codec; + struct folder *list; + int stride; /* number of entries to advance each time */ + int ofs; /* starting entry in list */ + int report; /* report progress to stderr (last thread only) */ + void *ctx; /* compression context */ + bool matching; + pthread_t pt; /* pthread */ +}; + +/* + * + * private functions + * + */ + + +/* get 32-bit value from raw data */ +static int get32(void *_data) +{ + unsigned char *data = _data; + + return (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; +} + + +/* get size of a file; returns 0 if fopen fails */ +static unsigned int file_size(const char *fn) +{ + FILE *fp; + unsigned int sz; + + fp = fopen(fn, "rb"); + if (!fp) + return 0; + + fseek(fp, 0, SEEK_END); + sz = ftell(fp); + fclose(fp); + + return sz; +} + +/* load a file into an existing buffer */ +static void *file_load_into( + const char *dir + , const char *fn + , unsigned int *sz + , void *dst +) +{ + FILE *fp; + + assert(fn); + assert(sz); + assert(dst); + + if (!dir) + dir = ""; + + *sz = 0; + + fp = fopen(fn, "rb"); + if (!fp) + die("failed to open '%s%s' for reading", dir, fn); + + fseek(fp, 0, SEEK_END); + *sz = ftell(fp); + + if (!*sz) + die("size of file '%s%s' is zero", dir, fn); + + fseek(fp, 0, SEEK_SET); + + if (fread(dst, 1, *sz, fp) != *sz) + die("failed to read contents of '%s%s'", dir, fn); + + fclose(fp); + + return dst; +} + +/* load a file */ +static void *file_load(const char *fn, unsigned int *sz) +{ + unsigned char *dst; + + assert(fn); + assert(sz); + + *sz = file_size(fn); + if (!*sz) + die("failed to get size of file '%s'", fn); + + dst = malloc_safe(*sz); + + return file_load_into(0, fn, sz, dst); +} + +/* write file */ +static unsigned int file_write( + const char *fn + , void *data + , unsigned int data_sz +) +{ + FILE *fp; + + assert(fn); + assert(data); + assert(data_sz); + + fp = fopen(fn, "wb"); + if (!fp) + return 0; + + data_sz = fwrite(data, 1, data_sz, fp); + + fclose(fp); + + return data_sz; +} + + +/* allocate a folder structure and parse current working directory */ +static struct folder *folder_new(void) +{ + wow_DIR *dir; + struct wow_dirent *ep; + struct fldr_item *item; + struct folder *folder; + char cwd[4096]; + int count = 0; + int recount = 0; + + /* allocate a folder */ + folder = calloc_safe(1, sizeof(*folder)); + + /* get current working directory for error reporting */ + wow_getcwd_safe(cwd, sizeof(cwd)); + + /* first pass: count the contents */ + dir = wow_opendir("."); + if (!dir) + die("failed to parse directory '%s'", cwd); + while ((ep = wow_readdir(dir))) + count += 1; + wow_closedir(dir); + + /* folder is empty */ + if (!count) + die("folder '%s' is empty", cwd); + + /* allocate item array */ + item = calloc_safe(count, sizeof(*item)); + folder->item = item; + folder->num = count; + + /* second pass: retrieve requested contents */ + dir = wow_opendir("."); + if (!dir) + die("failed to parse directory '%s'", cwd); + for ( + recount = 0 + ; (ep = wow_readdir(dir)) && recount < count + ; ++recount, ++item + ) + { + const char *dn; + + dn = (const char*)ep->d_name; + + /* skip names starting with '.' (covers both "." and "..") */ + if (*dn == '.') + continue; + + /* skip directories */ + if (wow_is_dir(dn)) + continue; + + /* make a copy of the string */ + item->name = strdup_safe(dn); + } + + if (recount != count) + die("contents of '%s' changed during read, try again", cwd); + wow_closedir(dir); + + return folder; +} + + +/* free a folder structure */ +static void folder_free(struct folder *folder) +{ + if (!folder) + return; + + /* folder contains items */ + if (folder->item) + { + struct fldr_item *item; + + /* walk item list, freeing resources owned by each */ + for ( + item = folder->item + ; item - folder->item < folder->num + ; ++item + ) + { + if (item->name) + free(item->name); + } + + /* free item list */ + free(folder->item); + } + + /* free folder */ + free(folder); +} + + +/* locate folder item by name, ignoring extension (such as '.raw') */ +static struct fldr_item *folder_findNameNoExt( + struct folder *folder + , char *name +) +{ + struct fldr_item *item; + + assert(folder); + assert(name); + + for ( + item = folder->item + ; item - folder->item < folder->num + ; ++item + ) + { + char *period; + int nchar; + + /* item has no name */ + if (!item->name) + continue; + + /* doesn't contain a period */ + if (!(period = strrchr(item->name, '.'))) + continue; + + /* number of bytes to compare */ + nchar = period - item->name; + + /* names match */ + if (!memcmp(item->name, name, nchar)) + return item; + } + + return 0; +} + + +/* retrieve encoder from name */ +static const struct encoder *encoder(const char *name) +{ + if (!strcmp(name, "yaz")) + { + static const struct encoder yaz = { + .encfunc = yazenc + , .ctx_new = yazCtx_new + , .ctx_free = yazCtx_free + }; + + return &yaz; + } + else if (!strcmp(name, "lzo")) + { + static const struct encoder lzo = { + .encfunc = lzoenc + , .ctx_new = lzoCtx_new + , .ctx_free = lzoCtx_free + }; + + return &lzo; + } + else if (!strcmp(name, "ucl")) + { + static const struct encoder ucl = { + .encfunc = uclenc + }; + + return &ucl; + } + /*else if (!strcmp(name, "zx7")) + { + static const struct encoder zx7 = { + .encfunc = zx7enc + }; + + return &zx7; + }*/ + else if (!strcmp(name, "aplib")) + { + static const struct encoder aplib = { + .encfunc = aplenc + }; + + return &aplib; + } + else + die("unknown compression codec '%s'", name); + + return 0; +} + + +/* sort dma array by start, ascending */ +static int sortfunc_dma_start_ascend(const void *_a, const void *_b) +{ + const struct dma *a = _a; + const struct dma *b = _b; + + if (a->start < b->start) + return -1; + + else if (a->start > b->start) + return 1; + + return 0; +} + + +/* sort dma array by size, descending */ +static int sortfunc_dma_size_descend(const void *_a, const void *_b) +{ + const struct dma *a = _a; + const struct dma *b = _b; + + unsigned int a_len = a->end - a->start; + unsigned int b_len = b->end - b->start; + + if (a_len < b_len) + return 1; + + else if (a_len > b_len) + return -1; + + return 0; +} + + +/* enter a directory (will be created if it doesn't exist) */ +static void dir_enter(const char *dir) +{ + /* unable to enter directory */ + if (wow_chdir(dir)) + { + /* attempt to create directory */ + if (wow_mkdir(dir)) + die("failed to create directory '%s'", dir); + + if (wow_chdir(dir)) + die("failed to enter directory '%s'", dir); + } +} + + +static void report_progress( + struct rom *rom + , const char *codec + , int v + , int total +) +{ + /* caching enabled */ + if (rom->cache) + fprintf( + printer + , "\r""updating '%s/%s' %d/%d: " + , rom->cache + , codec + , v + , total + ); + + else + fprintf( + printer + , "\r""compressing file %d/%d: " + , v + , total + ); +} + +/* compress a list of files */ +static void dma_compress( + struct rom *rom + , void *compbuf + , int encfunc( + void *src + , unsigned src_sz + , void *dst + , unsigned *dst_sz + , void *_ctx + ) + , const char *codec + , char *dot_codec + , struct folder *list + , int stride /* number of entries to advance each time */ + , int ofs /* starting entry in list */ + , int report /* report progress to stderr (last thread only) */ + , void *ctx /* compression context */ + , bool matching +) +{ + struct dma *dma; + struct fldr_item *item; + + for (dma = rom->dma + ofs + ; (unsigned)(dma - rom->dma) < rom->dma_num + ; dma += stride + ) + { + char *iname = 0; + unsigned char *data = rom->data + dma->start; + unsigned char checksum[64]; + char readable[64]; + int len = dma->end - dma->start; + + /* report the progress */ + if (report) + report_progress(rom, codec, PROGRESS_A_B); + + /* skip files that have a size of 0 */ + if (dma->start == dma->end) + continue; + + /* caching is disabled, just compress */ + if (!rom->cache) + { + int err; + dma->compbuf = compbuf; + + /* don't compress this file */ + if (!dma->compress) + { + dma->compSz = dma->end - dma->start; + dma->compbuf = memdup_safe( + rom->data + dma->start + , dma->compSz + ); + continue; + } + + err = + encfunc( + rom->data + dma->start + , dma->end - dma->start + , dma->compbuf + , &dma->compSz + , ctx + ); + + /* file doesn't benefit from compression */ + if (!matching && dma->compSz >= dma->end - dma->start) + { + dma->compSz = dma->end - dma->start; + dma->compbuf = memdup_safe( + rom->data + dma->start + , dma->compSz + ); + dma->compress = 0; + } + else + dma->compbuf = memdup_safe(dma->compbuf, dma->compSz); + + if (err) + die("compression error"); + + /* the rest of the loop applies only to caches */ + continue; + } + + /* get readable checksum name */ + stb_sha1(checksum, data, len); + stb_sha1_readable(readable, checksum); + + /* see if item already exists in folder */ + item = folder_findNameNoExt(list, readable); + if (item) + { + /* use full file name, including extension */ + iname = item->name; + + /* it exists, so use udata to mark the file as used */ + item->udata = dot_codec; + dma->compSz = file_size(iname); + + /* uncompressed file */ + if (strstr(iname, ".raw")) + dma->compress = 0; + } + /* item doesn't exist, so create it */ + else + { + void *out = compbuf; + unsigned out_sz; + int err; + + /* file not marked for compression */ + if (!dma->compress) + { + out = rom->data + dma->start; + out_sz = dma->end - dma->start; + dma->compress = 0; + strcat(readable, ".raw"); + + /* write file */ + if (file_write(readable, out, out_sz) != out_sz) + die("error writing file 'cache/%s/%s'", codec, readable); + + dma->compSz = out_sz; + dma->compname = strdup_safe(readable); + + /* the remaining block applies only to compressed files */ + continue; + } + + err = + encfunc( + rom->data + dma->start + , dma->end - dma->start + , out + , &out_sz + , ctx + ); + + if (err) + die("compression error"); + + /* file doesn't benefit from compression */ + if (!matching && out_sz >= dma->end - dma->start) + { + out = rom->data + dma->start; + out_sz = dma->end - dma->start; + dma->compress = 0; + strcat(readable, ".raw"); + } + /* file benefits from compression */ + else + /* add encoding as extension, ex '.yaz' */ + strcat(readable, dot_codec); + + /* write file */ + if (file_write(readable, out, out_sz) != out_sz) + die("error writing file 'cache/%s/%s'", codec, readable); + + dma->compSz = out_sz; + iname = readable; + } + + /* back up compressed filename to + * avoid having to re-checksum later + */ + dma->compname = strdup_safe(iname); + } +} + + +static void *dma_compress_threadfunc(void *_CT) +{ + struct compThread *CT = _CT; + + dma_compress( + CT->rom + , CT->data + , CT->encfunc + , CT->codec + , CT->dot_codec + , CT->list + , CT->stride + , CT->ofs + , CT->report + , CT->ctx + , CT->matching + ); + + return 0; +} + + +static void dma_compress_thread( + struct compThread *CT + , struct rom *rom + , void *compbuf + , int encfunc( + void *src + , unsigned src_sz + , void *dst + , unsigned *dst_sz + , void *_ctx + ) + , const char *codec + , char *dot_codec + , struct folder *list + , int stride /* number of entries to advance each time */ + , int ofs /* starting entry in list */ + , int report /* report progress to stderr (last thread only) */ + , void *ctx /* compression context */ + , bool matching +) +{ + CT->rom = rom; + CT->data = compbuf; + CT->encfunc = encfunc; + CT->codec = codec; + CT->dot_codec = dot_codec; + CT->list = list; + CT->stride = stride; + CT->ofs = ofs; + CT->report = report; + CT->ctx = ctx; + CT->matching = matching; + + if (pthread_create(&CT->pt, 0, dma_compress_threadfunc, CT)) + die("threading error"); +} + + +/* get dma entry by original index (useful after reordering) */ +static struct dma *dma_get_idx(struct rom *rom, unsigned idx) +{ + struct dma *dma; + + assert(idx < rom->dma_num && "dma index too high"); + + /* walk dma list for matching index */ + DMA_FOR_EACH + { + if (dma->index == idx) + break; + } + + return dma; +} + + +/* write 'num' bytes to rom and advance */ +static void rom_write(struct rom *rom, void *data, int sz) +{ + unsigned char *raw; + + assert(rom); + assert(rom->data); + assert(data); + assert(sz); + + if (rom->ofs + sz > rom->data_sz) + die( + "can't write %d bytes at 0x%X b/c it exceeds rom size" + , sz, rom->ofs + ); + + raw = rom->data + rom->ofs; + + memcpy(raw, data, sz); + + rom->ofs += sz; +} + + +/* write 32 bit value to rom and advance */ +static void rom_write32(struct rom *rom, unsigned int value) +{ + unsigned char raw[4]; + + raw[0] = value >> 24; + raw[1] = value >> 16; + raw[2] = value >> 8; + raw[3] = value; + + rom_write(rom, raw, 4); +} + + +/* write dma table into rom */ +static void rom_write_dmadata(struct rom *rom) +{ + struct dma *dma; + int num; + int numUsed; + + assert(rom); + assert(rom->dma); + assert(rom->dma_raw); + + dma = rom->dma; + num = rom->dma_num; + + /* sort all entries by size, descending */ + DMASORT(rom, sortfunc_dma_size_descend); + + /* find first entry where size == 0 (aka first unused entry) */ + for (dma = rom->dma; dma - rom->dma < num; ++dma) + if (dma->start == dma->end) + break; + numUsed = dma - rom->dma; + + /* sort all used entries by start address, ascending */ + DMASORT_N(rom, sortfunc_dma_start_ascend, numUsed); + + /* + * at this point, unused entries have been moved to the end + */ + + /* zero the table */ + memset(rom->dma_raw, 0, num * 16); + + /* write every entry */ + rom->ofs = rom->dma_raw - rom->data; + for (dma = rom->dma; dma - rom->dma < num; ++dma) + { + rom_write32(rom, dma->start); + rom_write32(rom, dma->end); + rom_write32(rom, dma->Pstart); + rom_write32(rom, dma->Pend); + + /* early end condition: all entries have been written */ + if (!dma->end) + break; + } +} + + +/* + * + * public functions + * + */ + +/* compress rom using specified algorithm */ +void rom_compress(struct rom *rom, int mb, int numThreads, bool matching) +{ + struct dma *dma; + struct folder *list = 0; + struct fldr_item *item; + char *dot_codec = 0; + const char *codec; + char cwd[4096] = {0}; + char cache_codec[4096] = {0}; + const char *cache; + const struct encoder *enc = 0; + unsigned int compsz = mb * 0x100000; + unsigned int comp_total = 0; + unsigned int largest_compress = 1024; + float total_compressed = 0; + float total_decompressed = 0; + struct compThread *compThread = 0; + int dma_num = rom->dma_num; + int i; + + assert(rom); + assert(rom->dma); + assert(rom->dma_ready); + assert(rom->is_comp == 0 && "rom_compressed called more than once"); + + rom->is_comp = 1; + + if (numThreads <= 0) + numThreads = 1; + + /* default codec = yaz */ + if (!(codec = rom->codec)) + codec = "yaz"; + + cache = rom->cache; + + if (compsz > rom->data_sz || mb < 0) + die("invalid mb argument %d", mb); + + /* get encoding functions */ + enc = encoder(codec); + + /* restore original start/end for nonexistent files */ + DMA_FOR_EACH + { + if (dma->deleted) + { + dma->start = dma->Ostart; + dma->end = dma->Oend; + dma->compress = 0; /* deleted files don't compress */ + } + } + + /* sort dma entries by size, descending */ + DMASORT(rom, sortfunc_dma_size_descend); + + /* locate largest file that will be compressed */ + DMA_FOR_EACH + { + if (dma->compress && dma->end - dma->start > largest_compress) + largest_compress = dma->end - dma->start; + } + + /* no file should compress to over 2x its uncompressed size */ + largest_compress *= 2; + + /* allocate compression buffer for each thread */ + compThread = calloc_safe(numThreads, sizeof(*compThread)); + for (i = 0; i < numThreads; ++i) + { + compThread[i].data = malloc_safe(largest_compress); + + /* allocate compression contexts (if applicable) */ + if (enc->ctx_new) + { + compThread[i].ctx = enc->ctx_new(); + if (!compThread[i].ctx) + die("memory error"); + } + } + + /* if using compression cache */ + if (cache) + { + sprintf(cache_codec, "%s/%s/", cache, codec); + + /* store current working directory for later */ + wow_getcwd_safe(cwd, sizeof(cwd)); + + /* create and enter cache folder */ + dir_enter(cache); + + /* create and enter directory for the encoding algorithm */ + dir_enter(codec); + + /* make a '.yaz' string from 'yaz' */ + dot_codec = malloc_safe(strlen(codec) + 1/*'.'*/ + 1/*'\0'*/); + strcpy(dot_codec, "."); + strcat(dot_codec, codec); + + /* get list of all files in current working directory */ + list = folder_new(); + } + + /* now compress every compressible file */ + if (numThreads <= 1) + { + dma_compress( + rom + , compThread[0].data + , enc->encfunc + , codec + , dot_codec + , list + , 1 /* stride */ + , 0 /* ofs */ + , 1 /* report */ + , compThread[0].ctx + , matching + ); + } + else + { + /* spawn threads */ + for (i = 0; i < numThreads; ++i) + { + dma_compress_thread( + &compThread[i] + , rom + , compThread[i].data + , enc->encfunc + , codec + , dot_codec + , list + , numThreads /* stride */ + , i /* ofs */ + , (i+1)==numThreads /* report */ + , compThread[i].ctx + , matching + ); + } + + /* wait for all threads to complete */ + for (i = 0; i < numThreads; ++i) + { + if (pthread_join(compThread[i].pt, NULL)) + die("threading error"); + } + } + + /* all files now compressed */ + report_progress(rom, codec, PROGRESS_A_B); + fprintf(printer, "success!\n"); + + /* sort by original start, ascending */ + DMASORT(rom, sortfunc_dma_start_ascend); + + /* determine physical addresses for each segment */ + comp_total = 0; + DMA_FOR_EACH + { + char *fn = dma->compname; + unsigned int sz; + unsigned int sz16; + + if (dma->deleted) + continue; + + /* cached file logic */ + if (cache) + { + /* skip entries that don't reference compressed files */ + if (!fn) + continue; + + sz = dma->compSz; + + /* sz == 0 */ + if (!sz) + die("'%s/%s/%s' file size == 0", cache, codec, fn); + } + + /* in-memory file logic */ + else + { + /* skip entries that don't reference compressed data */ + sz = dma->compSz; + if (!sz) + continue; + } + + /* ensure we remain 16-byte-aligned after advancing */ + sz16 = sz; + if (sz16 & 15) + sz16 += 16 - (sz16 & 15); + + dma->Pstart = comp_total; + if (dma->compress) + { + dma->Pend = dma->Pstart + sz16; + + /* compressed file ratio variables */ + total_compressed += sz16; + total_decompressed += dma->end - dma->start; + } + else + dma->Pend = 0; + comp_total += sz16; + + if (mb != 0 && dma->Pend > compsz) + die("ran out of compressed rom space"); + } + + /* adaptive final size */ + if (mb == 0) + compsz = ALIGN8MB(comp_total); + + if (matching) + { + /* fill the entire (compressed) rom space with 00010203...FF... + in order to match retail rom padding */ + unsigned char n = 0; /* will intentionally overflow */ + for (unsigned int j = 0; j < compsz; j++, n++) + { + rom->data[j] = n; + } + } + else + { + /* zero the entire (compressed) rom space */ + memset(rom->data, 0, compsz); + } + + /* inject compressed files */ + comp_total = 0; + DMA_FOR_EACH + { + unsigned char *dst; + char *fn = dma->compname; + unsigned int sz; + fprintf(printer, "\r""injecting file %d/%d: ", PROGRESS_A_B); + + if (dma->deleted) + continue; + + dst = rom->data + dma->Pstart; + + /* external cached file logic */ + if (cache) + { + /* skip entries that don't reference compressed files */ + if (!fn) + continue; + + /* load file into rom at offset */ + dst = file_load_into(cache_codec, fn, &sz, dst); + } + /* otherwise, a simple memcpy */ + else + { + memcpy(dst, dma->compbuf, dma->compSz); + sz = dma->compSz; + } + + if (matching) + { + /* since matching rom padding is not zero but file padding is zero, + fill file padding space with zeros */ + memset(dst + sz, 0, ALIGN16(sz) - sz); + } + } + fprintf(printer, "\r""injecting file %d/%d: ", dma_num, dma_num); + fprintf(printer, "success!\n"); + + fprintf( + printer + , "compression ratio: %.02f%%\n" + , (total_compressed / total_decompressed) * 100.0f + ); + + /* now free compressed file names */ + DMA_FOR_EACH + { + if (dma->compname) + free(dma->compname); + } + + /* remove unused cache files */ + if (list) + { + for (item = list->item; item - list->item < list->num; ++item) + { + /* udata hasn't been marked, so file is unused */ + if (item->name && !item->udata) + { + if (remove(item->name)) + die("failed to remove '%s/%s/%s'" + , cache, codec, item->name + ); + } + } + } + + /* update rom size for when rom_save() is used */ + rom->data_sz = compsz; + + /* cleanup */ + DMA_FOR_EACH + { + /* zero starts/ends of deleted files */ + if (!matching && dma->deleted) + { + dma->start = 0; + dma->end = 0; + dma->Pstart = 0; + dma->Pend = 0; + } + + /* free any compbufs */ + if (dma->compbuf) + free(dma->compbuf); + dma->compSz = 0; + dma->compbuf = 0; + } + if (list) + folder_free(list); + if (dot_codec) + free(dot_codec); + for (i = 0; i < numThreads; ++i) + { + free(compThread[i].data); + + /* free compression contexts (if applicable) */ + if (enc->ctx_free) + { + assert(compThread[i].ctx); + enc->ctx_free(compThread[i].ctx); + } + } + free(compThread); + + /* return to prior working directory */ + if (*cwd) + wow_chdir(cwd); +} + + +/* specify start of dmadata and number of entries */ +void rom_dma(struct rom *rom, unsigned int offset, int num_entries, bool matching) +{ + struct dma *dma; + unsigned char *raw; + + assert(rom); + assert(rom->data); + assert(rom->dma == 0 && "called rom_dma() more than once"); + + if (num_entries <= 0) + die("invalid number of dma entries %d", num_entries); + + dma = calloc_safe(num_entries, sizeof(*dma)); + rom->dma = dma; + rom->dma_num = num_entries; + + raw = rom->data + offset; + rom->dma_raw = raw; + + /* initialize every entry */ + while (dma - rom->dma < num_entries) + { + /* propagate defaults */ + dma->index = dma - rom->dma; + dma->start = get32(raw); + dma->end = get32(raw + 4); + dma->Pstart = get32(raw + 8); + dma->Pend = get32(raw + 12); + dma->Ostart = dma->start; + dma->Oend = dma->end; + dma->compress = 0; /* compression off by default */ + + /* nonexistent file */ + if (dma->Pstart == DMA_DELETED && dma->Pend == DMA_DELETED) + { + dma->deleted = 1; + + if (!matching) + { + dma->start = 0; + dma->end = 0; + dma->Ostart = 0; + dma->Oend = 0; + dma->Pstart = 0; + dma->Pend = 0; + } + } + + /* invalid dma conditions */ + else if ( + (dma->Pend & 3) /* not 4-byte aligned */ + || (dma->Pstart & 3) + || (dma->start & 3) + || (dma->end & 3) + || dma->start > dma->end + || (dma->Pstart > dma->Pend && dma->Pend) + || dma->Pend > rom->data_sz + ) + { + die( + "invalid dma entry encountered: %08X %08X %08X %08X" + , dma->start, dma->end, dma->Pstart, dma->Pend + ); + } + + /* rom is compressed */ + if (dma->Pend && dma->Pend != DMA_DELETED) + { + die( + "encountered dma entry %08X %08X %08X %08X" + ", which suggests the rom is already compressed...\n" + "now exiting..." + , dma->start, dma->end, dma->Pstart, dma->Pend + ); + } + + /* advance to next entry */ + raw += 16; + dma += 1; + } +} + +/* call this once dma settings are finalized */ +void rom_dma_ready(struct rom *rom, bool matching) +{ + struct dma *dma; + int num; + unsigned int lowest = 0; + unsigned int highest_end = 0; /* highest end dma offset */ + + assert(rom); + assert(rom->data); + assert(rom->dma); + assert(rom->dma_ready == 0 && "dma_ready called more than once"); + + dma = rom->dma; + num = rom->dma_num; + + /* sort by start offset, ascending */ + DMASORT(rom, sortfunc_dma_start_ascend); + + /* confirm no entries overlap */ + for (dma = rom->dma ; dma - rom->dma < num; ++dma) + { + /* skip blank entries */ + if (!dma->start && !dma->end) + continue; + + /* warn on empty files */ + if (dma->end == dma->start) + { + fprintf( + printer + , "warning: dma entry %d is empty file (%08X == %08X)\n" + , dma->index, dma->start, dma->end + ); + dma->Pstart = dma->Pend = DMA_DELETED; + } + + /* nonexistent file */ + if (dma->Pstart == DMA_DELETED && dma->Pend == DMA_DELETED) + { + dma->deleted = 1; + + if (!matching) + { + dma->Ostart = 0; + dma->Oend = 0; + dma->start = 0; + dma->end = 0; + dma->compress = 0; + } + continue; + } + + /* fatal error on entries where end < start */ + if (dma->end < dma->start) + die( + "dma invalid entry %d (%08X < %08X)" + , dma->index, dma->end, dma->start + ); + + /* fatal error on unaligned entries */ + if ((dma->start & 3) || (dma->end & 3)) + die( + "dma unaligned pointer (%08X %08X)" + , dma->start + , dma->end + ); + + /* fatal error on entries exceeding rom size */ + if (dma->end > rom->data_sz) + die( + "dma entry %d (%08X - %08X) exceeds rom size (%08X)" + , dma->index, dma->start, dma->end, rom->data_sz + ); + + /* if at least one entry has been processed, and its + * start is lower than any of the previous ends + */ + if (dma > rom->dma && dma->start < lowest) + die( + "dma table entry %d (%08X - %08X) " + "overlaps entry %d (%08X - %08X)" + , dma->index, dma->start, dma->end + , (dma-1)->index, (dma-1)->start, (dma-1)->end + ); + + /* store highest dma end offset */ + if (dma->end > highest_end) + highest_end = dma->end; + + /* lowest acceptable start for next entry is end of current */ + lowest = dma->end; + } + + /* note dma_ready() has been called */ + rom->dma_ready = 1; +} + +/* reencode existing archives within rom + * NOTE: must be used before dma_ready() + */ +/* TODO optimization opportunities: threading, caching */ +void rom_dma_repack( + struct rom *rom + , unsigned start + , unsigned end + , const char *from /* old codec */ + , const char *to /* new codec */ +) +{ + const struct encoder *enc = 0; + int (*decfunc)( + void *src, void *dst, unsigned dstSz, unsigned *srcSz + ) = 0; + void *ctx = 0; + + assert(rom); + assert(rom->data); + assert(rom->dma); + assert(rom->dma_ready == 0 && "dma_repack must precede dma_ready"); + + /* default codec = yaz */ + if (!from) + from = "yaz"; + if (!(to = rom->codec)) + to = "yaz"; + + /* swap start and end if they are not in ascending order */ + if (end < start) + { + int t = end; + end = start; + start = t; + } + + /* allocate compression buffers, 16 mb */ + if (!rom->mem.mb16) + rom->mem.mb16 = malloc_safe(SIZE_16MB); + if (!rom->mem.mb4) + rom->mem.mb4 = malloc_safe(SIZE_4MB); + + /* no need to reencode when the codec is the same */ + if (!strcmp(from, to)) + return; + + /* get decoding function */ + if (!strcmp(from, "yaz")) + { + from = "Yaz0"; + decfunc = yazdec; + } + else if (!strcmp(from, "raw")) + { + from = "raw0"; + } + else + die("dma_repack from='%s' unsupported", from); + + /* get encoding function */ + enc = encoder(to); + + /* allocate compression context (if applicable) */ + if (enc->ctx_new) + { + ctx = enc->ctx_new(); + if (!ctx) + die("memory error"); + } + + /* start <= idx <= end */ + while (start <= end && start < rom->dma_num) + { + struct dma *dma = dma_get_idx(rom, start); + + unsigned char *dst = rom->data + dma->start; + const char *errstr; + unsigned int Osz = dma->end - dma->start; + unsigned int Nsz; + char name[32]; + + dma->compress = 0; + + sprintf(name, "%08X", dma->start); + + errstr = + yar_reencode( + dst + , Osz + , rom->mem.mb16 + , &Nsz + , 4 + + , name + , from + , rom->mem.mb4 + , ctx + + , decfunc + , enc->encfunc + , 0 + ); + + /* fatal error */ + if (errstr) + die("%s", errstr); + + /* repacked archive won't fit in place of original archive */ + if (Nsz > Osz) + die("repacking failed, new archive 0x%X bytes too big" + , Nsz - Osz + ); + + /* copy encoded file into rom */ + memcpy(dst, rom->mem.mb16, Nsz); + + /* file sizes changed */ + fprintf(printer, "%.2f kb saved!\n", ((float)(Osz-Nsz))/1000.0f); + + dma->end = dma->start + Nsz; + + start += 1; + } + + /* free compression context (if applicable) */ + if (enc->ctx_free) + { + assert(ctx); + enc->ctx_free(ctx); + } +} + + +/* set compression flag on indices start <= idx <= end */ +void rom_dma_compress( + struct rom *rom + , unsigned start + , unsigned end + , int comp +) +{ + assert(rom); + assert(rom->data); + assert(rom->dma); + assert(rom->dma_ready == 0 && "dma_compress must precede dma_ready"); + + /* swap start and end if they are not in ascending order */ + if (end < start) + { + int t = end; + end = start; + start = t; + } + + /* start <= idx <= end */ + while (start <= end && start < rom->dma_num) + { + struct dma *dma = rom->dma + start; + + dma->compress = comp; + start += 1; + } +} + + +/* set rom compressed file cache directory */ +void rom_set_cache(struct rom *rom, const char *cache) +{ + assert(rom); + assert(cache); + + if (rom->cache) + free(rom->cache); + + rom->cache = strdup_safe(cache); +} + +/* get number of dma entries */ +int rom_dma_num(struct rom *rom) +{ + assert(rom); + + return rom->dma_num; +} + +/* set rom compression codec + * valid options: "yaz", "lzo", "ucl", "aplib" + * NOTE: to use codecs besides yaz, get patches from the z64enc repo + */ +void rom_set_codec(struct rom *rom, const char *codec) +{ + assert(rom); + assert(codec); + + if (rom->codec) + free(rom->codec); + + rom->codec = strdup_safe(codec); +} + +/* save rom to disk using specified filename */ +void rom_save(struct rom *rom, const char *fn) +{ + assert(rom); + assert(rom->data); + + /* updates dmadata */ + rom_write_dmadata(rom); + + /* recalculate crc */ + n64crc(rom->data); + + if (file_write(fn, rom->data, rom->data_sz) != rom->data_sz) + die("failed to write file '%s'", fn); +} + +/* allocate a rom structure */ +struct rom *rom_new(const char *fn) +{ + struct rom *dst; + + assert(fn); + + /* allocate destination rom structure */ + dst = calloc_safe(1, sizeof(*dst)); + + /* propagate rom file */ + dst->data = file_load(fn, &dst->data_sz); + + /* back up load file name */ + dst->fn = strdup_safe(fn); + + return dst; +} + +/* free a rom structure */ +void rom_free(struct rom *rom) +{ + if (!rom) + return; + + if (rom->codec) + free(rom->codec); + + if (rom->data) + free(rom->data); + + if (rom->dma) + free(rom->dma); + + if (rom->cache) + free(rom->cache); + + if (rom->fn) + free(rom->fn); + + /* free any memory pools that were allocated */ + if (rom->mem.mb16) + free(rom->mem.mb16); + if (rom->mem.mb4) + free(rom->mem.mb4); + + free(rom); +} + diff --git a/tools/z64compress/src/rom.h b/tools/z64compress/src/rom.h new file mode 100644 index 0000000..dbc6eaa --- /dev/null +++ b/tools/z64compress/src/rom.h @@ -0,0 +1,62 @@ +/* + * rom.h + * + * functions for compression magic reside herein + * + * z64me <z64.me> + * + */ + +#ifndef Z64COMPRESS_ROM_H_INCLUDED +#define Z64COMPRESS_ROM_H_INCLUDED + +/* opaque definition */ +struct rom; + +/* allocate a rom structure and load rom file */ +struct rom *rom_new(const char *fn); + +/* free a rom structure */ +void rom_free(struct rom *rom); + +/* save rom to disk using specified filename */ +void rom_save(struct rom *rom, const char *fn); + +/* compress rom using specified algorithm */ +void rom_compress(struct rom *rom, int mb, int numThreads, bool matching); + +/* specify start of dmadata and number of entries */ +void rom_dma(struct rom *rom, unsigned int offset, int num_entries, bool matching); + +/* call this once dma settings are finalized */ +void rom_dma_ready(struct rom *rom, bool matching); + +/* set compression flag on indices start <= idx <= end */ +void +rom_dma_compress(struct rom *rom, unsigned start, unsigned end, int comp); + +/* reencode existing archives within rom + * NOTE: must be used before dma_ready() + */ +void rom_dma_repack( + struct rom *rom + , unsigned start + , unsigned end + , const char *from /* old codec */ + , const char *to /* new codec */ +); + +/* get number of dma entries */ +int rom_dma_num(struct rom *rom); + +/* set rom compression codec + * valid options: "yaz", "lzo", "ucl", "aplib" + * NOTE: to use codecs besides yaz, get patches from the z64enc repo + */ +void rom_set_codec(struct rom *rom, const char *codec); + +/* set rom compressed file cache directory */ +void rom_set_cache(struct rom *rom, const char *cache); + +#endif /* Z64COMPRESS_ROM_H_INCLUDED */ + diff --git a/tools/z64compress/src/sha1.c b/tools/z64compress/src/sha1.c new file mode 100644 index 0000000..07b068d --- /dev/null +++ b/tools/z64compress/src/sha1.c @@ -0,0 +1,141 @@ +#include <stdio.h> +#include <stdlib.h> +#include <assert.h> + +#define stb_big32(c) (((c)[0]<<24) + (c)[1]*65536 + (c)[2]*256 + (c)[3]) + +static void stb__sha1(unsigned char *chunk, unsigned h[5]) +{ + int i; + unsigned a,b,c,d,e; + unsigned w[80]; + + for (i=0; i < 16; ++i) + w[i] = stb_big32(&chunk[i*4]); + for (i=16; i < 80; ++i) { + unsigned t; + t = w[i-3] ^ w[i-8] ^ w[i-14] ^ w[i-16]; + w[i] = (t + t) | (t >> 31); + } + + a = h[0]; + b = h[1]; + c = h[2]; + d = h[3]; + e = h[4]; + + #define STB__SHA1(k,f) \ + { \ + unsigned temp = (a << 5) + (a >> 27) + (f) + e + (k) + w[i]; \ + e = d; \ + d = c; \ + c = (b << 30) + (b >> 2); \ + b = a; \ + a = temp; \ + } + + i=0; + for (; i < 20; ++i) STB__SHA1(0x5a827999, d ^ (b & (c ^ d)) ); + for (; i < 40; ++i) STB__SHA1(0x6ed9eba1, b ^ c ^ d ); + for (; i < 60; ++i) STB__SHA1(0x8f1bbcdc, (b & c) + (d & (b ^ c)) ); + for (; i < 80; ++i) STB__SHA1(0xca62c1d6, b ^ c ^ d ); + + #undef STB__SHA1 + + h[0] += a; + h[1] += b; + h[2] += c; + h[3] += d; + h[4] += e; +} + +void stb_sha1(unsigned char output[20], unsigned char *buffer, unsigned len) +{ + unsigned char final_block[128]; + unsigned end_start, final_len, j; + int i; + + unsigned h[5]; + + h[0] = 0x67452301; + h[1] = 0xefcdab89; + h[2] = 0x98badcfe; + h[3] = 0x10325476; + h[4] = 0xc3d2e1f0; + + // we need to write padding to the last one or two + // blocks, so build those first into 'final_block' + + // we have to write one special byte, plus the 8-byte length + + // compute the block where the data runs out + end_start = len & ~63; + + // compute the earliest we can encode the length + if (((len+9) & ~63) == end_start) { + // it all fits in one block, so fill a second-to-last block + end_start -= 64; + } + + final_len = end_start + 128; + + // now we need to copy the data in + assert(end_start + 128 >= len+9); + assert(end_start < len || len < 64-9); + + j = 0; + if (end_start > len) + j = (unsigned) - (int) end_start; + + for (; end_start + j < len; ++j) + final_block[j] = buffer[end_start + j]; + final_block[j++] = 0x80; + while (j < 128-5) // 5 byte length, so write 4 extra padding bytes + final_block[j++] = 0; + // big-endian size + final_block[j++] = len >> 29; + final_block[j++] = len >> 21; + final_block[j++] = len >> 13; + final_block[j++] = len >> 5; + final_block[j++] = len << 3; + assert(j == 128 && end_start + j == final_len); + + for (j=0; j < final_len; j += 64) { // 512-bit chunks + if (j+64 >= end_start+64) + stb__sha1(&final_block[j - end_start], h); + else + stb__sha1(&buffer[j], h); + } + + for (i=0; i < 5; ++i) { + output[i*4 + 0] = h[i] >> 24; + output[i*4 + 1] = h[i] >> 16; + output[i*4 + 2] = h[i] >> 8; + output[i*4 + 3] = h[i] >> 0; + } +} + +// client can truncate this wherever they like +void stb_sha1_readable(char display[30], unsigned char sha[20]) +{ + char encoding[65] = "0123456789abcdefghijklmnopqrstuv" + "wxyzABCDEFGHIJKLMNOPQRSTUVWXYZ#$"; + int num_bits = 0, acc=0; + int i=0,o=0; + while (o < 26) { + int v; + // expand the accumulator + if (num_bits < 6) { + assert(i != 20); + acc += sha[i++] << num_bits; + num_bits += 8; + } + v = acc & ((1 << 6) - 1); + display[o++] = encoding[v]; + acc >>= 6; + num_bits -= 6; + } + assert(num_bits == 20*8 - 26*6); + display[o++] = '\0'; +} + diff --git a/tools/z64compress/src/sha1.h b/tools/z64compress/src/sha1.h new file mode 100644 index 0000000..3c7e0dc --- /dev/null +++ b/tools/z64compress/src/sha1.h @@ -0,0 +1,8 @@ +#ifndef STB_SHA1_H_INCLUDED +#define STB_SHA1_H_INCLUDED + +void stb_sha1(unsigned char output[20], unsigned char *buffer, unsigned len); +void stb_sha1_readable(char display[30], unsigned char sha[20]); + +#endif /* STB_SHA1_H_INCLUDED */ + diff --git a/tools/z64compress/src/wow.c b/tools/z64compress/src/wow.c new file mode 100644 index 0000000..21b2c67 --- /dev/null +++ b/tools/z64compress/src/wow.c @@ -0,0 +1,3 @@ +#define WOW_IMPLEMENTATION +#include "wow.h" + diff --git a/tools/z64compress/src/wow.h b/tools/z64compress/src/wow.h new file mode 100644 index 0000000..cc2d88c --- /dev/null +++ b/tools/z64compress/src/wow.h @@ -0,0 +1,769 @@ +/* + * wow.h + * + * a small collection of functions + * to make writing software easier + * + * z64me <z64.me> + * + */ + +#ifndef WOW_H_INCLUDED +#define WOW_H_INCLUDED + +#include <stddef.h> /* size_t */ +#include <stdio.h> /* file ops */ +#include <stdlib.h> /* alloc */ +#include <sys/stat.h> /* stat */ +#include <string.h> /* strdup */ +#include <unistd.h> /* chdir, getcwd */ +#include <stdarg.h> +#include <locale.h> + +#ifdef _WIN32 + #include <windows.h> + #undef near + #undef far +#endif + + +#if (_WIN32 && UNICODE) + #define wow_main int wmain(int argc, wchar_t *Wargv[]) + #define wow_main_argv char **argv = wow_conv_args(argc, (void*)Wargv) +#else + #define wow_main int main(int argc, char *argv[]) + #define wow_main_argv do{}while(0) +#endif + + +#ifndef WOW_API_PREFIX + #define WOW_API_PREFIX +#endif + +WOW_API_PREFIX +void * +wow_utf8_to_wchar(const char *str); + +WOW_API_PREFIX +char * +wow_wchar_to_utf8(void *wstr); + + +/* converts argv[] from wchar to char win32, in place */ +WOW_API_PREFIX +void * +wow_conv_args(int argc, void *argv[]); + + +/* returns non-zero if path is a directory */ +WOW_API_PREFIX +int +wow_is_dir_w(void const *path); + + +/* returns non-zero if path is a directory */ +WOW_API_PREFIX +int +wow_is_dir(char const *path); + + +/* fread abstraction that falls back to buffer-based fread * + * if a big fread fails; if that still fails, returns 0 */ +WOW_API_PREFIX +size_t +wow_fread_bytes(void *ptr, size_t bytes, FILE *stream); + + +/* fwrite abstraction that falls back to buffer-based fwrite * + * if a big fwrite fails; if that still fails, returns 0 */ +WOW_API_PREFIX +size_t +wow_fwrite_bytes(const void *ptr, size_t bytes, FILE *stream); + + +/* fread abstraction that falls back to buffer-based fread * + * if a big fread fails; if that still fails, returns 0 */ +WOW_API_PREFIX +size_t +wow_fread(void *ptr, size_t size, size_t nmemb, FILE *stream); + + +/* fwrite abstraction that falls back to buffer-based fwrite * + * if a big fwrite fails; if that still fails, returns 0 */ +WOW_API_PREFIX +size_t +wow_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); + + +/* fopen abstraction for utf8 support on windows win32 */ +WOW_API_PREFIX +FILE * +wow_fopen(char const *name, char const *mode); + + +/* remove abstraction for utf8 support on windows win32 */ +WOW_API_PREFIX +int +wow_remove(char const *path); + + +/* mkdir */ +WOW_API_PREFIX +int +wow_mkdir(char const *path); + + +/* chdir */ +WOW_API_PREFIX +int +wow_chdir(char const *path); + + +/* getcwd */ +WOW_API_PREFIX +char * +wow_getcwd(char *buf, size_t size); + + +/* getcwd_safe */ +WOW_API_PREFIX +char * +wow_getcwd_safe(char *buf, size_t size); + + +/* system */ +WOW_API_PREFIX +int +wow_system(char const *path); + +WOW_API_PREFIX void die(const char *fmt, ...) + __attribute__ ((format (printf, 1, 2))) +; +WOW_API_PREFIX void *calloc_safe(size_t nmemb, size_t size); +WOW_API_PREFIX void *malloc_safe(size_t size); +WOW_API_PREFIX void *realloc_safe(void *ptr, size_t size); +WOW_API_PREFIX char *strdup_safe(const char *s); +WOW_API_PREFIX void *memdup_safe(void *ptr, size_t size); + +#ifdef WOW_IMPLEMENTATION + +WOW_API_PREFIX void die(const char *fmt, ...) +{ + va_list args; + va_start(args, fmt); +#ifdef UNICODE + char buf[4096]; + vsprintf(buf, fmt, args); + wchar_t *wc = wow_utf8_to_wchar(buf); + setlocale(LC_ALL, ""); + fwprintf(stderr, L"%ls", wc); + free(wc); +#else + vfprintf(stderr, fmt, args); +#endif + va_end(args); + fprintf(stderr, "\n"); + exit(EXIT_FAILURE); +} + +WOW_API_PREFIX void *calloc_safe(size_t nmemb, size_t size) +{ + void *result = calloc(nmemb, size); + + if (!result) + die("memory error"); + + return result; +} + +WOW_API_PREFIX void *malloc_safe(size_t size) +{ + void *result = malloc(size); + + if (!result) + die("memory error"); + + return result; +} + +WOW_API_PREFIX void *realloc_safe(void *ptr, size_t size) +{ + void *result = realloc(ptr, size); + + if (!result) + die("memory error"); + + return result; +} + +WOW_API_PREFIX char *strdup_safe(const char *s) +{ + char *result; + int n; + + if (!s) + return 0; + + n = strlen(s) + 1; + + result = malloc_safe(n); + + strcpy(result, s); + + return result; +} + +WOW_API_PREFIX void *memdup_safe(void *ptr, size_t size) +{ + void *result; + + if (!ptr || !size) + return 0; + + result = malloc_safe(size); + + memcpy(result, ptr, size); + + return result; +} + + +WOW_API_PREFIX +void * +wow_utf8_to_wchar(const char *str) +{ +#ifdef UNICODE +extern __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide); + wchar_t *wstr; + int wstr_sz = (strlen(str) + 1) * 16;//sizeof(*wstr); + wstr = calloc_safe(1, wstr_sz); + MultiByteToWideChar(65001/*utf8*/, 0, str, -1, wstr, wstr_sz); + return wstr; +#else + return strdup(str); +#endif +} + +WOW_API_PREFIX +char * +wow_wchar_to_utf8_buf(void *wstr, void *dst, int dst_max) +{ +#ifdef UNICODE +extern __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); + WideCharToMultiByte(65001/*utf8*/, 0, wstr, -1, dst, dst_max, NULL, NULL); + return dst; +#else + (void)dst_max; /* unused parameter */ + return strcpy(dst, wstr); +#endif +} + +WOW_API_PREFIX +char * +wow_wchar_to_utf8(void *wstr) +{ +#ifdef UNICODE +extern __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); + char *str; + int str_sz = (wcslen(wstr) + 1) * sizeof(*str); + str = calloc_safe(1, str_sz); + WideCharToMultiByte(65001/*utf8*/, 0, wstr, -1, str, str_sz, NULL, NULL); + return str; +#else + return strdup(wstr); +#endif +} + +WOW_API_PREFIX +char * +wow_wchar_to_utf8_inplace(void *wstr) +{ +#ifdef UNICODE +extern __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); + char buf[4096]; + char *str; + int wstr_len = wcslen(wstr); + unsigned str_sz = (wstr_len + 1) * sizeof(*str); + if (str_sz >= sizeof(buf)) + str = malloc_safe(str_sz); + else + str = buf; + WideCharToMultiByte(65001/*utf8*/, 0, wstr, -1, str, str_sz, NULL, NULL); + memcpy(wstr, str, wstr_len + 1); + ((char*)wstr)[wstr_len+1] = '\0'; + if (str != buf) + free(str); + return wstr; +#else + return wstr; +#endif +} + + +/* argument abstraction: converts argv[] from wchar to char win32 */ +WOW_API_PREFIX +void * +wow_conv_args(int argc, void *argv[]) +{ +#ifdef UNICODE + int i; + for (i=0; i < argc; ++i) + { + //fprintf(stderr, "[%d]: %s\n", i, argv[i]); + //fwprintf(stderr, L"[%d]: %s\n", i, (wchar_t*)argv[i]); + argv[i] = wow_wchar_to_utf8_inplace(argv[i]); + //fwprintf(stderr, L"[%d]: %s\n", i, wow_utf8_to_wchar(argv[i])); + } +#else + (void)argc; /* unused parameter */ +#endif + return argv; +} + +/* returns non-zero if path is a directory */ +WOW_API_PREFIX +int +wow_is_dir_w(void const *path) +{ + struct stat s; +#if (_WIN32 && UNICODE) + if (wstat(path, &s) == 0) +#else + if (stat(path, &s) == 0) +#endif + { + if (s.st_mode & S_IFDIR) + return 1; + } + + return 0; +} + + +/* returns non-zero if path is a directory */ +WOW_API_PREFIX +int +wow_is_dir(char const *path) +{ + int rv; + void *wpath = 0; + +#if (_WIN32 && UNICODE) + wpath = wow_utf8_to_wchar(path); + rv = wow_is_dir_w(wpath); +#else + rv = wow_is_dir_w(path); +#endif + if (wpath) + free(wpath); + + return rv; +} + + +/* fread abstraction that falls back to buffer-based fread * + * if a big fread fails; if that still fails, returns 0 */ +WOW_API_PREFIX +size_t +wow_fread_bytes(void *ptr, size_t bytes, FILE *stream) +{ + if (!stream || !ptr || !bytes) + return 0; + + unsigned char *ptr8 = ptr; + size_t Oofs = ftell(stream); + size_t bufsz = 1024 * 1024; /* 1 mb at a time */ + size_t Obytes = bytes; + size_t rem; + + fseek(stream, 0, SEEK_END); + rem = ftell(stream) - Oofs; + fseek(stream, Oofs, SEEK_SET); + + if (bytes > rem) + bytes = rem; + + /* everything worked */ + if (fread(ptr, 1, bytes, stream) == bytes) + return Obytes; + + /* failed: try falling back to slower buffered read */ + fseek(stream, Oofs, SEEK_SET); + while (bytes) + { + /* don't read past end */ + if (bytes < bufsz) + bufsz = bytes; + if (bufsz > rem) + { + bytes = rem; + bufsz = rem; + } + + /* still failed */ + if (fread(ptr8, 1, bufsz, stream) != bufsz) + return 0; + + /* advance */ + ptr8 += bufsz; + bytes -= bufsz; + rem -= bufsz; + } + + /* success */ + return Obytes; +} + + +/* fwrite abstraction that falls back to buffer-based fwrite * + * if a big fwrite fails; if that still fails, returns 0 */ +WOW_API_PREFIX +size_t +wow_fwrite_bytes(const void *ptr, size_t bytes, FILE *stream) +{ + if (!stream || !ptr || !bytes) + return 0; + + const unsigned char *ptr8 = ptr; + size_t bufsz = 1024 * 1024; /* 1 mb at a time */ + size_t Obytes = bytes; + + /* everything worked */ + if (fwrite(ptr, 1, bytes, stream) == bytes) + return bytes; + + /* failed: try falling back to slower buffered read */ + while (bytes) + { + /* don't read past end */ + if (bytes < bufsz) + bufsz = bytes; + + /* still failed */ + if (fwrite(ptr8, 1, bufsz, stream) != bufsz) + return 0; + + /* advance */ + ptr8 += bufsz; + bytes -= bufsz; + } + + /* success */ + return Obytes; +} + + +/* fread abstraction that falls back to buffer-based fread * + * if a big fread fails; if that still fails, returns 0 */ +WOW_API_PREFIX +size_t +wow_fread(void *ptr, size_t size, size_t nmemb, FILE *stream) +{ + if (!stream || !ptr || !size || !nmemb) + return 0; + + if (wow_fread_bytes(ptr, size * nmemb, stream) == size * nmemb) + return nmemb; + + return 0; +} + + +/* fwrite abstraction that falls back to buffer-based fwrite * + * if a big fwrite fails; if that still fails, returns 0 */ +WOW_API_PREFIX +size_t +wow_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) +{ + if (!stream || !ptr || !size || !nmemb) + return 0; + + if (wow_fwrite_bytes(ptr, size * nmemb, stream) == size * nmemb) + return nmemb; + + return 0; +} + + +/* fopen abstraction for utf8 support on windows win32 */ +WOW_API_PREFIX +FILE * +wow_fopen(char const *name, char const *mode) +{ +#ifdef UNICODE + void *wname = 0; + void *wmode = 0; + FILE *fp = 0; + + wname = wow_utf8_to_wchar(name); + if (!wname) + goto L_cleanup; + + /* TODO eventually, an error message would be cool */ + if (wow_is_dir_w(wname)) + goto L_cleanup; + + wmode = wow_utf8_to_wchar(mode); + if (!wmode) + goto L_cleanup; + + fp = _wfopen(wname, wmode); + +L_cleanup: + if (wname) free(wname); + if (wmode) free(wmode); + if (fp) + return fp; + return 0; +#else + /* TODO eventually, an error message would be cool */ + if (wow_is_dir_w(name)) + return 0; + return fopen(name, mode); +#endif +} + + +/* remove abstraction for utf8 support on windows win32 */ +WOW_API_PREFIX +int +wow_remove(char const *path) +{ +#ifdef UNICODE + void *wpath = 0; + int rval; + + wpath = wow_utf8_to_wchar(path); + if (!wpath) + return -1; + + rval = _wremove(wpath); + free(wpath); + return rval; +#else + return remove(path); +#endif +} + + +/* mkdir */ +WOW_API_PREFIX +int +wow_mkdir(char const *path) +{ +#if defined(_WIN32) && defined(UNICODE) +extern int _wmkdir(const wchar_t *); + void *wname = 0; + int rval; + + wname = wow_utf8_to_wchar(path); + if (!wname) + return -1; + + rval = _wmkdir(wname); + + if (wname) + free(wname); + + return rval; +#elif defined(_WIN32) /* win32 no unicode */ +extern int _mkdir(const char *); + return _mkdir(path); +#else /* ! _WIN32 */ + return mkdir(path, 0777); +#endif +} + + +/* chdir */ +WOW_API_PREFIX +int +wow_chdir(char const *path) +{ +#if defined(_WIN32) && defined(UNICODE) +extern int _wchdir(const wchar_t *); + void *wname = 0; + int rval; + + wname = wow_utf8_to_wchar(path); + if (!wname) + return -1; + + rval = _wchdir(wname); + + if (wname) + free(wname); + + return rval; +#elif defined(_WIN32) /* win32 no unicode */ +extern int _chdir(const char *); + return _chdir(path); +#else /* ! _WIN32 */ + return chdir(path); +#endif +} + + +/* getcwd */ +WOW_API_PREFIX +char * +wow_getcwd(char *buf, size_t size) +{ +#if defined(_WIN32) && defined(UNICODE) +//extern int _wgetcwd(const wchar_t *, int); +extern _CRTIMP wchar_t *__cdecl _wgetcwd(wchar_t *_DstBuf,int _SizeInWords); + wchar_t wname[4096]; + + if (!buf || !size) + return 0; + + if (!_wgetcwd(wname, sizeof(wname) / sizeof(wname[0]))) + return 0; + + return wow_wchar_to_utf8_buf(wname, buf, size); +#elif defined(_WIN32) /* win32 no unicode */ +//extern char *_getcwd(char *, int); + return _getcwd(buf, size); +#else /* ! _WIN32 */ + return getcwd(buf, size); +#endif +} + + +/* getcwd_safe */ +WOW_API_PREFIX +char * +wow_getcwd_safe(char *buf, size_t size) +{ + char *result = wow_getcwd(buf, size); + + if (!result) + die("failed to get current working directory"); + + return result; +} + + +/* system */ +WOW_API_PREFIX +int +wow_system(char const *path) +{ +#if defined(_WIN32) && defined(UNICODE) + void *wname = 0; + int rval; + + wname = wow_utf8_to_wchar(path); + if (!wname) + return -1; + + rval = _wsystem(wname); + + if (wname) + free(wname); + + return rval; +#else /* not win32 unicode */ + return system(path); +#endif +} + + +/* system_gui */ +WOW_API_PREFIX +int +wow_system_gui(char const *name, const char *param) +{ +#if defined(_WIN32) + STARTUPINFOW si; + PROCESS_INFORMATION pi; + + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + ZeroMemory(&pi, sizeof(pi)); + int rval = 0 /*success */; +//extern int ShellExecuteA(void *hwnd, void *op, void *file, void *param, void *dir, int cmd); +//extern int ShellExecuteW(void *hwnd, void *op, void *file, void *param, void *dir, int cmd); +//const int SW_SHOWNORMAL = 1; + #if defined(UNICODE) + void *wname = 0; + void *wparam = 0; + + wname = wow_utf8_to_wchar(name); + if (!wname) + { + return -1; + } + wparam = wow_utf8_to_wchar(param); + if (!wparam) + { + free(wname); + return -1; + } + +#if 0 + if (CreateProcessW( + wname, wparam + , NULL, NULL + , FALSE + , CREATE_NO_WINDOW + , NULL + , NULL + , &si, &pi) + ) + { + //WaitForSingleObject(pi.hProcess, INFINITE); + //CloseHandle(pi.hProcess); + //CloseHandle(pi.hThread); + } + else + rval = 1; +#else + rval = (int)ShellExecuteW(NULL, L"open", wname, wparam, L".", SW_SHOWNORMAL); + rval = rval <= 32; +#endif + + free(wname); + free(wparam); + #else /* win32 non-unicode */ +#if 0 + if (CreateProcessA( + name, x + , NULL, NULL + , FALSE + , CREATE_NO_WINDOW + , NULL + , NULL + , &si, &pi) + ) + { + //WaitForSingleObject(pi.hProcess, INFINITE); + //CloseHandle(pi.hProcess); + //CloseHandle(pi.hThread); + } + else + rval = 1; +#else + rval = (int)ShellExecuteA(NULL, "open", name, param, ".", SW_SHOWNORMAL); + rval = rval <= 32; +#endif + #endif + return rval;//rval <= 32; +#else /* not win32 unicode */ + char *x = malloc_safe(strlen(name) + strlen(param) + 128); + if (!x) + return -1; + strcpy(x, "\""); + strcat(x, name); + strcat(x, "\" "); + strcat(x, param); + int rval = system(x); + free(x); + return rval; +#endif +} + +#endif /* WOW_IMPLEMENTATION */ + +#endif /* WOW_H_INCLUDED */ + diff --git a/tools/z64compress/src/wow_dirent.h b/tools/z64compress/src/wow_dirent.h new file mode 100644 index 0000000..e9db5ca --- /dev/null +++ b/tools/z64compress/src/wow_dirent.h @@ -0,0 +1,61 @@ +/* + * wow_dirent.h + * + * dirent wrapper that abstracts unicode/utf8 platforms + * + * must be #include'd after dirent.h + * + * z64me <z64.me> + * + */ + +#ifndef WOW_DIRENT_INCLUDED +#define WOW_DIRENT_INCLUDED +#include "wow.h" + +#if defined(_WIN32) && defined(UNICODE) +# define wow_DIR _WDIR +# define wow_dirent _wdirent +static +wow_DIR * +wow_opendir(const char *path) +{ + void *wpath = wow_utf8_to_wchar(path); + if (!wpath) + return NULL; + + wow_DIR *rv = _wopendir(wpath); + + free(wpath); + + return rv; +} +static +struct wow_dirent * +wow_readdir(wow_DIR *dir) +{ + struct wow_dirent *ep = _wreaddir(dir); + if (!ep) + return 0; + + /* convert d_name to utf8 for working on them directly */ + char *str = wow_wchar_to_utf8(ep->d_name); + memcpy(ep->d_name, str, strlen(str) + 1); + free(str); + + return ep; +} +# define wow_closedir _wclosedir +# define wow_dirent_char wchar_t + +#else /* not win32 unicode */ +# define wow_DIR DIR +# define wow_dirent dirent +# define wow_opendir opendir +# define wow_readdir readdir +# define wow_closedir closedir +# define wow_dirent_char char +#endif + +#endif /* WOW_DIRENT_INCLUDED */ + diff --git a/tools/z64compress_wrapper.py b/tools/z64compress_wrapper.py new file mode 100755 index 0000000..df3a647 --- /dev/null +++ b/tools/z64compress_wrapper.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2023 ZeldaRET +# SPDX-License-Identifier: MIT + +from __future__ import annotations + +import argparse +import itertools +from pathlib import Path +import spimdisasm +import subprocess +import yaml + + +QUIET = False + +def printVerbose(*args, **kwargs): + if QUIET: + return + print(*args, **kwargs) + + +def ranges(i): + for _, b in itertools.groupby(enumerate(i), lambda pair: pair[1] - pair[0]): + b = list(b) + yield b[0][1], b[-1][1] + + +def getCompressedSegmentIndices(yamlPath: Path): + printVerbose("Finding compressed segments...") + with yamlPath.open() as f: + yamlObj = yaml.load(f, Loader=yaml.SafeLoader) + + indices = [] + currentIndex = 0 + for segment in yamlObj["segments"]: + if not isinstance(segment, dict): + continue + + notInDma = segment.get("notdma", False) + if notInDma: + continue + + shouldCompress = segment.get("compress", False) + if shouldCompress: + indices.append(currentIndex) + currentIndex += 1 + return list(ranges(indices)) + + +def getDmaStartLen(elfPath: Path) -> tuple[int, int]: + printVerbose("Retrieving dmadata address...") + + start = -1 + end = -1 + + elfFile = spimdisasm.elf32.Elf32File(spimdisasm.common.Utils.readFileAsBytearray(elfPath)) + + assert elfFile.symtab is not None, f"Invalid Elf file, it is missing the symtab" + assert elfFile.strtab is not None, f"Invalid Elf file, it is missing the strtab" + + for entry in elfFile.symtab: + symName = elfFile.strtab[entry.name] + + if "dmadata_ROM_START" == symName: + start = entry.value + elif "dmadata_ROM_END" == symName: + end = entry.value + + assert start > 0, f"Could not find 'dmadata_ROM_START' in Elf file" + assert end > 0, f"Could not find 'dmadata_ROM_END' in Elf file" + + return start, (end - start) // 0x10 + + +def main(): + # Args from command line + parser = argparse.ArgumentParser(description="Compress ROM") + + parser.add_argument("in_rom", help="Uncompressed input ROM filename", type=Path) + parser.add_argument("out_rom", help="Compressed output ROM filename", type=Path) + parser.add_argument("elf", help="Path to the uncompressed ROM elf file", type=Path) + parser.add_argument("yaml", help="Path to the yaml file", type=Path) + parser.add_argument("--cache", help="Cache directory") + parser.add_argument("--threads", help="Number of threads to run compression on, 0 disables multithreading", type=int, default=0) + parser.add_argument("--mb", help="compressed ROM size in MB, default is the smallest multiple of 8mb fitting the whole ROM") + parser.add_argument("--matching", help="matching compression, forfeits some useful optimizations", action="store_true") + parser.add_argument("--stderr", help="z64compress will write its output messages to stderr instead of stdout", action="store_true") + + args = parser.parse_args() + + dmaAddr, dmaLen = getDmaStartLen(args.elf) + + compressed_ranges = getCompressedSegmentIndices(args.yaml) + indicesList = [] + for start, end in compressed_ranges: + if start != end: + indicesList.append(f"{start}-{end}") + else: + indicesList.append(f"{start}") + + command = f"./tools/z64compress/z64compress " + command += f"--in {args.in_rom} " + command += f"--out {args.out_rom} " + command += f"--codec yaz " + command += f"--dma 0x{dmaAddr:06X},{dmaLen} " + command += f"--compress {','.join(indicesList)} " + + if args.matching: + command += f"--matching " + if args.mb is not None: + command += f"--mb {args.mb} " + if args.cache: + command += f"--cache {args.cache} " + if args.threads > 0: + command += f"--threads {args.threads} " + if not args.stderr: + command += f"--only-stdout " + + + print(command) + try: + subprocess.check_call(command, shell=True) + except subprocess.CalledProcessError as e: + # Return the same error code for the wrapper if z64compress fails + return e.returncode + + return 0 + + +if __name__ == "__main__": + exit(main()) diff --git a/yamls/jp/assets.yaml b/yamls/jp/assets.yaml index d7cea3f..de14c54 100644 --- a/yamls/jp/assets.yaml +++ b/yamls/jp/assets.yaml @@ -2,7670 +2,12271 @@ type: bin start: 0x9757E0 # vram: + compress: True + align: 0x1000 + - [0x9D33E0] - name: segment_009D4000 type: bin start: 0x9D4000 # vram: + compress: True + align: 0x1000 + - [0x9DE010] - name: segment_009DF000 type: bin start: 0x9DF000 # vram: + compress: True + align: 0x1000 + - [0x9E9010] - name: segment_009EA000 type: bin start: 0x9EA000 # vram: + compress: True + align: 0x1000 + - [0x9F4010] - name: segment_009F5000 type: bin start: 0x9F5000 # vram: + compress: True + align: 0x1000 + - [0x9FF010] - name: segment_00A00000 type: bin start: 0xA00000 # vram: + compress: True + align: 0x1000 + - [0xA0A010] - name: segment_00A0B000 type: bin start: 0xA0B000 # vram: + compress: True + align: 0x1000 + - [0xA15010] - name: segment_00A16000 type: bin start: 0xA16000 # vram: + compress: True + align: 0x1000 + - [0xA20010] - name: segment_00A21000 type: bin start: 0xA21000 # vram: + compress: True + align: 0x1000 + - [0xA21680] - name: segment_00A22000 type: bin start: 0xA22000 # vram: + compress: True + align: 0x1000 + - [0xA2FF30] - name: segment_00A30000 type: bin start: 0xA30000 # vram: + compress: True + align: 0x1000 + - [0xA3FC20] - name: segment_00A40000 type: bin start: 0xA40000 # vram: + compress: True + align: 0x1000 + - [0xA57140] - name: segment_00A58000 type: bin start: 0xA58000 # vram: + compress: True + align: 0x1000 + - [0xA6AEA0] - name: segment_00A6B000 type: bin start: 0xA6B000 # vram: + compress: True + align: 0x1000 + - [0xA75B90] - name: segment_00A76000 type: bin start: 0xA76000 # vram: + compress: True + align: 0x1000 + - [0xA79560] - name: segment_00A7A000 type: bin start: 0xA7A000 # vram: + compress: True + align: 0x1000 + - [0xA7A2C0] - name: segment_00A7B000 type: bin start: 0xA7B000 # vram: + compress: True + align: 0x1000 + - [0xA7B7E0] - name: segment_00A7C000 type: bin start: 0xA7C000 # vram: + compress: True + align: 0x1000 + - [0xA81130] - name: segment_00A82000 type: bin start: 0xA82000 # vram: + compress: True + align: 0x1000 + - [0xA89210] - name: segment_00A8A000 type: bin start: 0xA8A000 # vram: + compress: True + align: 0x1000 + - [0xA8DBE0] - name: segment_00A8E000 type: bin start: 0xA8E000 # vram: + compress: True + align: 0x1000 + - [0xA93EF0] - name: segment_00A94000 type: bin start: 0xA94000 # vram: + compress: True + align: 0x1000 + - [0xAAC5E0] - name: segment_00AAD000 type: bin start: 0xAAD000 # vram: + compress: True + align: 0x1000 + - [0xAB9A90] - name: segment_00ABA000 type: bin start: 0xABA000 # vram: + compress: True + align: 0x1000 + - [0xAC6EA0] - name: segment_00AC7000 type: bin start: 0xAC7000 # vram: + compress: True + align: 0x1000 + - [0xAC9850] - name: segment_00ACA000 type: bin start: 0xACA000 # vram: + compress: True + align: 0x1000 + - [0xACBA20] - name: segment_00ACC000 type: bin start: 0xACC000 # vram: + compress: True + align: 0x1000 + - [0xAD0290] - name: segment_00AD1000 type: bin start: 0xAD1000 # vram: + compress: True + align: 0x1000 + - [0xADCCD0] - name: segment_00ADD000 type: bin start: 0xADD000 # vram: + compress: True + align: 0x1000 + - [0xAE26C0] - name: segment_00AE3000 type: bin start: 0xAE3000 # vram: + compress: False + align: 0x1000 + - [0xB0CE80] - name: segment_00B0D000 type: bin start: 0xB0D000 # vram: + compress: True + align: 0x1000 + - [0xB166F0] - name: segment_00B17000 type: bin start: 0xB17000 # vram: + compress: True + align: 0x1000 + - [0xB19350] - name: segment_00B1A000 type: bin start: 0xB1A000 # vram: + compress: True + align: 0x1000 + - [0xB29FA0] - name: segment_00B2A000 type: bin start: 0xB2A000 # vram: + compress: True + align: 0x1000 + - [0xB35930] - name: segment_00B36000 type: bin start: 0xB36000 # vram: + compress: False + align: 0x1000 + - [0xB67E20] - name: segment_00B68000 type: bin start: 0xB68000 # vram: + compress: False + align: 0x1000 + - [0xB88000] - name: segment_00B88000 type: bin start: 0xB88000 # vram: + compress: False + align: 0x1000 + - [0xB8A000] - name: segment_00B8A000 type: bin start: 0xB8A000 # vram: + compress: False + align: 0x1000 + - [0xB8A070] - name: segment_00B8B000 type: bin start: 0xB8B000 # vram: + compress: False + align: 0x1000 + - [0xB8ECE0] - name: segment_00B8F000 type: bin start: 0xB8F000 # vram: + compress: False + align: 0x1000 + - [0xBC7800] - name: segment_00BC8000 type: bin start: 0xBC8000 # vram: + compress: True + align: 0x1000 + - [0xBCC830] - name: segment_00BCD000 type: bin start: 0xBCD000 # vram: + compress: False + align: 0x1000 + - [0xBD32E0] - name: segment_00BD4000 type: bin start: 0xBD4000 # vram: + compress: False + align: 0x1000 + - [0xCF8A10] - name: segment_00CF9000 type: bin start: 0xCF9000 # vram: + compress: False + align: 0x1000 + - [0xD047B0] - name: segment_00D05000 type: bin start: 0xD05000 # vram: + compress: False + align: 0x1000 + - [0xD05AE0] - name: segment_00D06000 type: bin start: 0xD06000 # vram: + compress: False + align: 0x1000 + - [0xD06740] - name: segment_00D07000 type: bin start: 0xD07000 # vram: + compress: False + align: 0x1000 + - [0xD0F5D0] - name: segment_00D10000 type: bin start: 0xD10000 # vram: + compress: False + align: 0x1000 + - [0xD10890] - name: segment_00D11000 type: bin start: 0xD11000 # vram: + compress: False + align: 0x1000 + - [0xD11BF0] - name: segment_00D12000 type: bin start: 0xD12000 # vram: + compress: False + align: 0x1000 + - [0xD12890] - name: segment_00D13000 type: bin start: 0xD13000 # vram: + compress: False + align: 0x1000 + - [0xD143E0] - name: segment_00D15000 type: bin start: 0xD15000 # vram: + compress: False + align: 0x1000 + - [0xD15890] - name: segment_00D16000 type: bin start: 0xD16000 # vram: + compress: False + align: 0x1000 + - [0xD17E00] - name: segment_00D18000 type: bin start: 0xD18000 # vram: + compress: False + align: 0x1000 + - [0xD19870] - name: segment_00D1A000 type: bin start: 0xD1A000 # vram: + compress: False + align: 0x1000 + - [0xD24970] - name: segment_00D25000 type: bin start: 0xD25000 # vram: + compress: True + align: 0x1000 + - [0xD28540] - name: segment_00D29000 type: bin start: 0xD29000 # vram: + compress: True + align: 0x1000 + - [0xD2C0A0] - name: segment_00D2D000 type: bin start: 0xD2D000 # vram: + compress: True + align: 0x1000 + - [0xD37440] - name: segment_00D38000 type: bin start: 0xD38000 # vram: + compress: True + align: 0x1000 + - [0xD42440] - name: segment_00D43000 type: bin start: 0xD43000 # vram: + compress: True + align: 0x1000 + - [0xD4CE90] - name: segment_00D4D000 type: bin start: 0xD4D000 # vram: + compress: True + align: 0x1000 + - [0xD572D0] - name: segment_00D58000 type: bin start: 0xD58000 # vram: + compress: False + align: 0x1000 + - [0xD58370] - name: segment_00D59000 type: bin start: 0xD59000 # vram: + compress: False + align: 0x1000 + - [0xD59130] - name: segment_00D5A000 type: bin start: 0xD5A000 # vram: + compress: False + align: 0x1000 + - [0xD5A1D0] - name: segment_00D5B000 type: bin start: 0xD5B000 # vram: + compress: False + align: 0x1000 + - [0xD5C3F0] - name: segment_00D5D000 type: bin start: 0xD5D000 # vram: + compress: False + align: 0x1000 + - [0xD5D2E0] - name: segment_00D5E000 type: bin start: 0xD5E000 # vram: + compress: False + align: 0x1000 + - [0xDF3480] - name: segment_00DF4000 type: bin start: 0xDF4000 # vram: + compress: False + align: 0x1000 + - [0xDF42F0] - name: segment_00DF5000 type: bin start: 0xDF5000 # vram: + compress: False + align: 0x1000 + - [0xDFF0D0] - name: segment_00E00000 type: bin start: 0xE00000 # vram: + compress: False + align: 0x1000 + - [0xE00180] - name: segment_00E01000 type: bin start: 0xE01000 # vram: + compress: True + align: 0x1000 + - [0xE01750] - name: segment_00E02000 type: bin start: 0xE02000 # vram: + compress: False + align: 0x1000 + - [0xE026D0] - name: segment_00E03000 type: bin start: 0xE03000 # vram: + compress: False + align: 0x1000 + - [0xE03520] - name: segment_00E04000 type: bin start: 0xE04000 # vram: + compress: False + align: 0x1000 + - [0xE04530] - name: segment_00E05000 type: bin start: 0xE05000 # vram: + compress: False + align: 0x1000 + - [0xE0CFD0] - name: segment_00E0D000 type: bin start: 0xE0D000 # vram: + compress: False + align: 0x1000 + - [0xE0D0E0] - name: segment_00E0E000 type: bin start: 0xE0E000 # vram: + compress: False + align: 0x1000 + - [0xE60390] - name: segment_00E61000 type: bin start: 0xE61000 # vram: + compress: True + align: 0x1000 + - [0xE63350] - name: segment_00E64000 type: bin start: 0xE64000 # vram: + compress: True + align: 0x1000 + - [0xE65020] - name: segment_00E66000 type: bin start: 0xE66000 # vram: + compress: True + align: 0x1000 + - [0xE68140] - name: segment_00E69000 type: bin start: 0xE69000 # vram: + compress: True + align: 0x1000 + - [0xE6A020] - name: segment_00E6B000 type: bin start: 0xE6B000 # vram: + compress: True + align: 0x1000 + - [0xE6C020] - name: segment_00E6D000 type: bin start: 0xE6D000 # vram: + compress: True + align: 0x1000 + - [0xE6E020] - name: segment_00E6F000 type: bin start: 0xE6F000 # vram: + compress: True + align: 0x1000 + - [0xE70020] - name: segment_00E71000 type: bin start: 0xE71000 # vram: + compress: True + align: 0x1000 + - [0xE72020] - name: segment_00E73000 type: bin start: 0xE73000 # vram: + compress: True + align: 0x1000 + - [0xE755D0] - name: segment_00E76000 type: bin start: 0xE76000 # vram: + compress: True + align: 0x1000 + - [0xE77020] - name: segment_00E78000 type: bin start: 0xE78000 # vram: + compress: True + align: 0x1000 + - [0xE79FE0] - name: segment_00E7A000 type: bin start: 0xE7A000 # vram: + compress: True + align: 0x1000 + - [0xE7B620] - name: segment_00E7C000 type: bin start: 0xE7C000 # vram: + compress: True + align: 0x1000 + - [0xE7D620] - name: segment_00E7E000 type: bin start: 0xE7E000 # vram: + compress: True + align: 0x1000 + - [0xE7F620] - name: segment_00E80000 type: bin start: 0xE80000 # vram: + compress: True + align: 0x1000 + - [0xE81620] - name: segment_00E82000 type: bin start: 0xE82000 # vram: + compress: True + align: 0x1000 + - [0xE83620] - name: segment_00E84000 type: bin start: 0xE84000 # vram: + compress: True + align: 0x1000 + - [0xE85620] - name: segment_00E86000 type: bin start: 0xE86000 # vram: + compress: True + align: 0x1000 + - [0xE87620] - name: segment_00E88000 type: bin start: 0xE88000 # vram: + compress: True + align: 0x1000 + - [0xE89620] - name: segment_00E8A000 type: bin start: 0xE8A000 # vram: + compress: True + align: 0x1000 + - [0xE8B620] - name: segment_00E8C000 type: bin start: 0xE8C000 # vram: + compress: True + align: 0x1000 + - [0xE8E1F0] - name: segment_00E8F000 type: bin start: 0xE8F000 # vram: + compress: True + align: 0x1000 + - [0xE90020] - name: segment_00E91000 type: bin start: 0xE91000 # vram: + compress: True + align: 0x1000 + - [0xE92020] - name: segment_00E93000 type: bin start: 0xE93000 # vram: + compress: True + align: 0x1000 + - [0xE94020] - name: segment_00E95000 type: bin start: 0xE95000 # vram: + compress: True + align: 0x1000 + - [0xE96020] - name: segment_00E97000 type: bin start: 0xE97000 # vram: + compress: True + align: 0x1000 + - [0xE98020] - name: segment_00E99000 type: bin start: 0xE99000 # vram: + compress: True + align: 0x1000 + - [0xE9B020] - name: segment_00E9C000 type: bin start: 0xE9C000 # vram: + compress: True + align: 0x1000 + - [0xE9D020] - name: segment_00E9E000 type: bin start: 0xE9E000 # vram: + compress: True + align: 0x1000 + - [0xE9F020] - name: segment_00EA0000 type: bin start: 0xEA0000 # vram: + compress: True + align: 0x1000 + - [0xEA1020] - name: segment_00EA2000 type: bin start: 0xEA2000 # vram: + compress: True + align: 0x1000 + - [0xEA3020] - name: segment_00EA4000 type: bin start: 0xEA4000 # vram: + compress: True + align: 0x1000 + - [0xEA5020] - name: segment_00EA6000 type: bin start: 0xEA6000 # vram: + compress: True + align: 0x1000 + - [0xEA7020] - name: segment_00EA8000 type: bin start: 0xEA8000 # vram: + compress: True + align: 0x1000 + - [0xEA9020] - name: segment_00EAA000 type: bin start: 0xEAA000 # vram: + compress: True + align: 0x1000 + - [0xEAB020] - name: segment_00EAC000 type: bin start: 0xEAC000 # vram: + compress: True + align: 0x1000 + - [0xEAD020] - name: segment_00EAE000 type: bin start: 0xEAE000 # vram: + compress: True + align: 0x1000 + - [0xEAF020] - name: segment_00EB0000 type: bin start: 0xEB0000 # vram: + compress: True + align: 0x1000 + - [0xEB2100] - name: segment_00EB3000 type: bin start: 0xEB3000 # vram: + compress: True + align: 0x1000 + - [0xEB4020] - name: segment_00EB5000 type: bin start: 0xEB5000 # vram: + compress: True + align: 0x1000 + - [0xEB7060] - name: segment_00EB8000 type: bin start: 0xEB8000 # vram: + compress: True + align: 0x1000 + - [0xEB9620] - name: segment_00EBA000 type: bin start: 0xEBA000 # vram: + compress: True + align: 0x1000 + - [0xEBB620] - name: segment_00EBC000 type: bin start: 0xEBC000 # vram: + compress: True + align: 0x1000 + - [0xEBD620] - name: segment_00EBE000 type: bin start: 0xEBE000 # vram: + compress: True + align: 0x1000 + - [0xEBF620] - name: segment_00EC0000 type: bin start: 0xEC0000 # vram: + compress: True + align: 0x1000 + - [0xEC27D0] - name: segment_00EC3000 type: bin start: 0xEC3000 # vram: + compress: True + align: 0x1000 + - [0xEC4020] - name: segment_00EC5000 type: bin start: 0xEC5000 # vram: + compress: True + align: 0x1000 + - [0xEC6CF0] - name: segment_00EC7000 type: bin start: 0xEC7000 # vram: + compress: True + align: 0x1000 + - [0xEC8620] - name: segment_00EC9000 type: bin start: 0xEC9000 # vram: + compress: True + align: 0x1000 + - [0xECA620] - name: segment_00ECB000 type: bin start: 0xECB000 # vram: + compress: True + align: 0x1000 + - [0xECC620] - name: segment_00ECD000 type: bin start: 0xECD000 # vram: + compress: True + align: 0x1000 + - [0xECE620] - name: segment_00ECF000 type: bin start: 0xECF000 # vram: + compress: True + align: 0x1000 + - [0xED0620] - name: segment_00ED1000 type: bin start: 0xED1000 # vram: + compress: True + align: 0x1000 + - [0xED2620] - name: segment_00ED3000 type: bin start: 0xED3000 # vram: + compress: True + align: 0x1000 + - [0xED4620] - name: segment_00ED5000 type: bin start: 0xED5000 # vram: + compress: True + align: 0x1000 + - [0xED6620] - name: segment_00ED7000 type: bin start: 0xED7000 # vram: + compress: True + align: 0x1000 + - [0xED8620] - name: segment_00ED9000 type: bin start: 0xED9000 # vram: + compress: True + align: 0x1000 + - [0xEDA620] - name: segment_00EDB000 type: bin start: 0xEDB000 # vram: + compress: True + align: 0x1000 + - [0xEDC620] - name: segment_00EDD000 type: bin start: 0xEDD000 # vram: + compress: True + align: 0x1000 + - [0xEDE620] - name: segment_00EDF000 type: bin start: 0xEDF000 # vram: + compress: True + align: 0x1000 + - [0xEE0620] - name: segment_00EE1000 type: bin start: 0xEE1000 # vram: + compress: True + align: 0x1000 + - [0xEE2620] - name: segment_00EE3000 type: bin start: 0xEE3000 # vram: + compress: True + align: 0x1000 + - [0xEE57F0] - name: segment_00EE6000 type: bin start: 0xEE6000 # vram: + compress: True + align: 0x1000 + - [0xEE7020] - name: segment_00EE8000 type: bin start: 0xEE8000 # vram: + compress: True + align: 0x1000 + - [0xEE9020] - name: segment_00EEA000 type: bin start: 0xEEA000 # vram: + compress: True + align: 0x1000 + - [0xEEB020] - name: segment_00EEC000 type: bin start: 0xEEC000 # vram: + compress: True + align: 0x1000 + - [0xEED020] - name: segment_00EEE000 type: bin start: 0xEEE000 # vram: + compress: True + align: 0x1000 + - [0xEEF020] - name: segment_00EF0000 type: bin start: 0xEF0000 # vram: + compress: True + align: 0x1000 + - [0xEF1020] - name: segment_00EF2000 type: bin start: 0xEF2000 # vram: + compress: True + align: 0x1000 + - [0xEF3020] - name: segment_00EF4000 type: bin start: 0xEF4000 # vram: + compress: True + align: 0x1000 + - [0xEF5020] - name: segment_00EF6000 type: bin start: 0xEF6000 # vram: + compress: True + align: 0x1000 + - [0xEF7EF0] - name: segment_00EF8000 type: bin start: 0xEF8000 # vram: + compress: True + align: 0x1000 + - [0xEF9620] - name: segment_00EFA000 type: bin start: 0xEFA000 # vram: + compress: True + align: 0x1000 + - [0xEFB620] - name: segment_00EFC000 type: bin start: 0xEFC000 # vram: + compress: True + align: 0x1000 + - [0xEFD620] - name: segment_00EFE000 type: bin start: 0xEFE000 # vram: + compress: True + align: 0x1000 + - [0xEFF620] - name: segment_00F00000 type: bin start: 0xF00000 # vram: + compress: True + align: 0x1000 + - [0xF01620] - name: segment_00F02000 type: bin start: 0xF02000 # vram: + compress: True + align: 0x1000 + - [0xF03620] - name: segment_00F04000 type: bin start: 0xF04000 # vram: + compress: True + align: 0x1000 + - [0xF05620] - name: segment_00F06000 type: bin start: 0xF06000 # vram: + compress: True + align: 0x1000 + - [0xF07620] - name: segment_00F08000 type: bin start: 0xF08000 # vram: + compress: True + align: 0x1000 + - [0xF09620] - name: segment_00F0A000 type: bin start: 0xF0A000 # vram: + compress: True + align: 0x1000 + - [0xF0C150] - name: segment_00F0D000 type: bin start: 0xF0D000 # vram: + compress: True + align: 0x1000 + - [0xF0E020] - name: segment_00F0F000 type: bin start: 0xF0F000 # vram: + compress: True + align: 0x1000 + - [0xF11020] - name: segment_00F12000 type: bin start: 0xF12000 # vram: + compress: True + align: 0x1000 + - [0xF13620] - name: segment_00F14000 type: bin start: 0xF14000 # vram: + compress: True + align: 0x1000 + - [0xF15620] - name: segment_00F16000 type: bin start: 0xF16000 # vram: + compress: True + align: 0x1000 + - [0xF17620] - name: segment_00F18000 type: bin start: 0xF18000 # vram: + compress: True + align: 0x1000 + - [0xF19620] - name: segment_00F1A000 type: bin start: 0xF1A000 # vram: + compress: True + align: 0x1000 + - [0xF1C1D0] - name: segment_00F1D000 type: bin start: 0xF1D000 # vram: + compress: True + align: 0x1000 + - [0xF1E020] - name: segment_00F1F000 type: bin start: 0xF1F000 # vram: + compress: True + align: 0x1000 + - [0xF20020] - name: segment_00F21000 type: bin start: 0xF21000 # vram: + compress: True + align: 0x1000 + - [0xF22020] - name: segment_00F23000 type: bin start: 0xF23000 # vram: + compress: True + align: 0x1000 + - [0xF24020] - name: segment_00F25000 type: bin start: 0xF25000 # vram: + compress: True + align: 0x1000 + - [0xF26FB0] - name: segment_00F27000 type: bin start: 0xF27000 # vram: + compress: True + align: 0x1000 + - [0xF28020] - name: segment_00F29000 type: bin start: 0xF29000 # vram: + compress: True + align: 0x1000 + - [0xF2B630] - name: segment_00F2C000 type: bin start: 0xF2C000 # vram: + compress: True + align: 0x1000 + - [0xF2D020] - name: segment_00F2E000 type: bin start: 0xF2E000 # vram: + compress: True + align: 0x1000 + - [0xF30030] - name: segment_00F31000 type: bin start: 0xF31000 # vram: + compress: True + align: 0x1000 + - [0xF32620] - name: segment_00F33000 type: bin start: 0xF33000 # vram: + compress: True + align: 0x1000 + - [0xF34620] - name: segment_00F35000 type: bin start: 0xF35000 # vram: + compress: True + align: 0x1000 + - [0xF36620] - name: segment_00F37000 type: bin start: 0xF37000 # vram: + compress: True + align: 0x1000 + - [0xF38620] - name: segment_00F39000 type: bin start: 0xF39000 # vram: + compress: True + align: 0x1000 + - [0xF3A620] - name: segment_00F3B000 type: bin start: 0xF3B000 # vram: + compress: True + align: 0x1000 + - [0xF3C620] - name: segment_00F3D000 type: bin start: 0xF3D000 # vram: + compress: True + align: 0x1000 + - [0xF3E620] - name: segment_00F3F000 type: bin start: 0xF3F000 # vram: + compress: True + align: 0x1000 + - [0xF40620] - name: segment_00F41000 type: bin start: 0xF41000 # vram: + compress: True + align: 0x1000 + - [0xF42620] - name: segment_00F43000 type: bin start: 0xF43000 # vram: + compress: True + align: 0x1000 + - [0xF44620] - name: segment_00F45000 type: bin start: 0xF45000 # vram: + compress: True + align: 0x1000 + - [0xF473D0] - name: segment_00F48000 type: bin start: 0xF48000 # vram: + compress: True + align: 0x1000 + - [0xF49020] - name: segment_00F4A000 type: bin start: 0xF4A000 # vram: + compress: True + align: 0x1000 + - [0xF4BEE0] - name: segment_00F4C000 type: bin start: 0xF4C000 # vram: + compress: True + align: 0x1000 + - [0xF4D620] - name: segment_00F4E000 type: bin start: 0xF4E000 # vram: + compress: True + align: 0x1000 + - [0xF4F620] - name: segment_00F50000 type: bin start: 0xF50000 # vram: + compress: True + align: 0x1000 + - [0xF51620] - name: segment_00F52000 type: bin start: 0xF52000 # vram: + compress: True + align: 0x1000 + - [0xF53620] - name: segment_00F54000 type: bin start: 0xF54000 # vram: + compress: True + align: 0x1000 + - [0xF55620] - name: segment_00F56000 type: bin start: 0xF56000 # vram: + compress: True + align: 0x1000 + - [0xF57620] - name: segment_00F58000 type: bin start: 0xF58000 # vram: + compress: True + align: 0x1000 + - [0xF59620] - name: segment_00F5A000 type: bin start: 0xF5A000 # vram: + compress: True + align: 0x1000 + - [0xF5B620] - name: segment_00F5C000 type: bin start: 0xF5C000 # vram: + compress: True + align: 0x1000 + - [0xF5D620] - name: segment_00F5E000 type: bin start: 0xF5E000 # vram: + compress: True + align: 0x1000 + - [0xF5F620] - name: segment_00F60000 type: bin start: 0xF60000 # vram: + compress: True + align: 0x1000 + - [0xF62140] - name: segment_00F63000 type: bin start: 0xF63000 # vram: + compress: True + align: 0x1000 + - [0xF64620] - name: segment_00F65000 type: bin start: 0xF65000 # vram: + compress: True + align: 0x1000 + - [0xF66620] - name: segment_00F67000 type: bin start: 0xF67000 # vram: + compress: True + align: 0x1000 + - [0xF68620] - name: segment_00F69000 type: bin start: 0xF69000 # vram: + compress: True + align: 0x1000 + - [0xF6A620] - name: segment_00F6B000 type: bin start: 0xF6B000 # vram: + compress: True + align: 0x1000 + - [0xF6C620] - name: segment_00F6D000 type: bin start: 0xF6D000 # vram: + compress: True + align: 0x1000 + - [0xF6E620] - name: segment_00F6F000 type: bin start: 0xF6F000 # vram: + compress: True + align: 0x1000 + - [0xF70A80] - name: segment_00F71000 type: bin start: 0xF71000 # vram: + compress: True + align: 0x1000 + - [0xF72620] - name: segment_00F73000 type: bin start: 0xF73000 # vram: + compress: True + align: 0x1000 + - [0xF74620] - name: segment_00F75000 type: bin start: 0xF75000 # vram: + compress: True + align: 0x1000 + - [0xF76620] - name: segment_00F77000 type: bin start: 0xF77000 # vram: + compress: True + align: 0x1000 + - [0xF78620] - name: segment_00F79000 type: bin start: 0xF79000 # vram: + compress: True + align: 0x1000 + - [0xF7A620] - name: segment_00F7B000 type: bin start: 0xF7B000 # vram: + compress: True + align: 0x1000 + - [0xF7C620] - name: segment_00F7D000 type: bin start: 0xF7D000 # vram: + compress: True + align: 0x1000 + - [0xF7E620] - name: segment_00F7F000 type: bin start: 0xF7F000 # vram: + compress: True + align: 0x1000 + - [0xF80620] - name: segment_00F81000 type: bin start: 0xF81000 # vram: + compress: True + align: 0x1000 + - [0xF82620] - name: segment_00F83000 type: bin start: 0xF83000 # vram: + compress: True + align: 0x1000 + - [0xF84620] - name: segment_00F85000 type: bin start: 0xF85000 # vram: + compress: True + align: 0x1000 + - [0xF86620] - name: segment_00F87000 type: bin start: 0xF87000 # vram: + compress: True + align: 0x1000 + - [0xF88620] - name: segment_00F89000 type: bin start: 0xF89000 # vram: + compress: True + align: 0x1000 + - [0xF8B760] - name: segment_00F8C000 type: bin start: 0xF8C000 # vram: + compress: True + align: 0x1000 + - [0xF8D020] - name: segment_00F8E000 type: bin start: 0xF8E000 # vram: + compress: True + align: 0x1000 + - [0xF90020] - name: segment_00F91000 type: bin start: 0xF91000 # vram: + compress: True + align: 0x1000 + - [0xF92620] - name: segment_00F93000 type: bin start: 0xF93000 # vram: + compress: True + align: 0x1000 + - [0xF94620] - name: segment_00F95000 type: bin start: 0xF95000 # vram: + compress: True + align: 0x1000 + - [0xF96620] - name: segment_00F97000 type: bin start: 0xF97000 # vram: + compress: True + align: 0x1000 + - [0xF98620] - name: segment_00F99000 type: bin start: 0xF99000 # vram: + compress: True + align: 0x1000 + - [0xF9A620] - name: segment_00F9B000 type: bin start: 0xF9B000 # vram: + compress: True + align: 0x1000 + - [0xF9C620] - name: segment_00F9D000 type: bin start: 0xF9D000 # vram: + compress: True + align: 0x1000 + - [0xF9F620] - name: segment_00FA0000 type: bin start: 0xFA0000 # vram: + compress: True + align: 0x1000 + - [0xFA1620] - name: segment_00FA2000 type: bin start: 0xFA2000 # vram: + compress: True + align: 0x1000 + - [0xFA3620] - name: segment_00FA4000 type: bin start: 0xFA4000 # vram: + compress: True + align: 0x1000 + - [0xFA5620] - name: segment_00FA6000 type: bin start: 0xFA6000 # vram: + compress: True + align: 0x1000 + - [0xFA7620] - name: segment_00FA8000 type: bin start: 0xFA8000 # vram: + compress: True + align: 0x1000 + - [0xFA9BF0] - name: segment_00FAA000 type: bin start: 0xFAA000 # vram: + compress: True + align: 0x1000 + - [0xFAB620] - name: segment_00FAC000 type: bin start: 0xFAC000 # vram: + compress: True + align: 0x1000 + - [0xFAE200] - name: segment_00FAF000 type: bin start: 0xFAF000 # vram: + compress: True + align: 0x1000 + - [0xFB0020] - name: segment_00FB1000 type: bin start: 0xFB1000 # vram: + compress: True + align: 0x1000 + - [0xFB2A90] - name: segment_00FB3000 type: bin start: 0xFB3000 # vram: + compress: True + align: 0x1000 + - [0xFB3820] - name: segment_00FB4000 type: bin start: 0xFB4000 # vram: + compress: True + align: 0x1000 + - [0xFB6780] - name: segment_00FB7000 type: bin start: 0xFB7000 # vram: + compress: True + align: 0x1000 + - [0xFB8020] - name: segment_00FB9000 type: bin start: 0xFB9000 # vram: + compress: True + align: 0x1000 + - [0xFBA020] - name: segment_00FBB000 type: bin start: 0xFBB000 # vram: + compress: True + align: 0x1000 + - [0xFBC020] - name: segment_00FBD000 type: bin start: 0xFBD000 # vram: + compress: True + align: 0x1000 + - [0xFBE020] - name: segment_00FBF000 type: bin start: 0xFBF000 # vram: + compress: True + align: 0x1000 + - [0xFC0020] - name: segment_00FC1000 type: bin start: 0xFC1000 # vram: + compress: True + align: 0x1000 + - [0xFC2020] - name: segment_00FC3000 type: bin start: 0xFC3000 # vram: + compress: True + align: 0x1000 + - [0xFC4020] - name: segment_00FC5000 type: bin start: 0xFC5000 # vram: + compress: True + align: 0x1000 + - [0xFC73F0] - name: segment_00FC8000 type: bin start: 0xFC8000 # vram: + compress: True + align: 0x1000 + - [0xFC9020] - name: segment_00FCA000 type: bin start: 0xFCA000 # vram: + compress: True + align: 0x1000 + - [0xFCB020] - name: segment_00FCC000 type: bin start: 0xFCC000 # vram: + compress: True + align: 0x1000 + - [0xFCD020] - name: segment_00FCE000 type: bin start: 0xFCE000 # vram: + compress: True + align: 0x1000 + - [0xFCF020] - name: segment_00FD0000 type: bin start: 0xFD0000 # vram: + compress: True + align: 0x1000 + - [0xFD1020] - name: segment_00FD2000 type: bin start: 0xFD2000 # vram: + compress: True + align: 0x1000 + - [0xFD3020] - name: segment_00FD4000 type: bin start: 0xFD4000 # vram: + compress: True + align: 0x1000 + - [0xFD5020] - name: segment_00FD6000 type: bin start: 0xFD6000 # vram: + compress: True + align: 0x1000 + - [0xFD8030] - name: segment_00FD9000 type: bin start: 0xFD9000 # vram: + compress: True + align: 0x1000 + - [0xFDA620] - name: segment_00FDB000 type: bin start: 0xFDB000 # vram: + compress: True + align: 0x1000 + - [0xFDD7F0] - name: segment_00FDE000 type: bin start: 0xFDE000 # vram: + compress: True + align: 0x1000 + - [0xFDF020] - name: segment_00FE0000 type: bin start: 0xFE0000 # vram: + compress: True + align: 0x1000 + - [0xFE26C0] - name: segment_00FE3000 type: bin start: 0xFE3000 # vram: + compress: True + align: 0x1000 + - [0xFE4020] - name: segment_00FE5000 type: bin start: 0xFE5000 # vram: + compress: True + align: 0x1000 + - [0xFE6020] - name: segment_00FE7000 type: bin start: 0xFE7000 # vram: + compress: True + align: 0x1000 + - [0xFE8020] - name: segment_00FE9000 type: bin start: 0xFE9000 # vram: + compress: True + align: 0x1000 + - [0xFEA020] - name: segment_00FEB000 type: bin start: 0xFEB000 # vram: + compress: True + align: 0x1000 + - [0xFEC020] - name: segment_00FED000 type: bin start: 0xFED000 # vram: + compress: True + align: 0x1000 + - [0xFEE020] - name: segment_00FEF000 type: bin start: 0xFEF000 # vram: + compress: True + align: 0x1000 + - [0xFF1670] - name: segment_00FF2000 type: bin start: 0xFF2000 # vram: + compress: True + align: 0x1000 + - [0xFF3020] - name: segment_00FF4000 type: bin start: 0xFF4000 # vram: + compress: True + align: 0x1000 + - [0xFF5F80] - name: segment_00FF6000 type: bin start: 0xFF6000 # vram: + compress: True + align: 0x1000 + - [0xFF7620] - name: segment_00FF8000 type: bin start: 0xFF8000 # vram: + compress: True + align: 0x1000 + - [0xFF9620] - name: segment_00FFA000 type: bin start: 0xFFA000 # vram: + compress: True + align: 0x1000 + - [0xFFB620] - name: segment_00FFC000 type: bin start: 0xFFC000 # vram: + compress: True + align: 0x1000 + - [0xFFD620] - name: segment_00FFE000 type: bin start: 0xFFE000 # vram: + compress: True + align: 0x1000 + - [0xFFF620] - name: segment_01000000 type: bin start: 0x1000000 # vram: + compress: True + align: 0x1000 + - [0x1002620] - name: segment_01003000 type: bin start: 0x1003000 # vram: + compress: True + align: 0x1000 + - [0x1004620] - name: segment_01005000 type: bin start: 0x1005000 # vram: + compress: True + align: 0x1000 + - [0x1006620] - name: segment_01007000 type: bin start: 0x1007000 # vram: + compress: True + align: 0x1000 + - [0x1008620] - name: segment_01009000 type: bin start: 0x1009000 # vram: + compress: True + align: 0x1000 + - [0x100ACB0] - name: segment_0100B000 type: bin start: 0x100B000 # vram: + compress: True + align: 0x1000 + - [0x100C620] - name: segment_0100D000 type: bin start: 0x100D000 # vram: + compress: True + align: 0x1000 + - [0x100EF80] - name: segment_0100F000 type: bin start: 0x100F000 # vram: + compress: True + align: 0x1000 + - [0x1010020] - name: segment_01011000 type: bin start: 0x1011000 # vram: + compress: True + align: 0x1000 + - [0x1013270] - name: segment_01014000 type: bin start: 0x1014000 # vram: + compress: True + align: 0x1000 + - [0x1015020] - name: segment_01016000 type: bin start: 0x1016000 # vram: + compress: True + align: 0x1000 + - [0x1018220] - name: segment_01019000 type: bin start: 0x1019000 # vram: + compress: True + align: 0x1000 + - [0x101A620] - name: segment_0101B000 type: bin start: 0x101B000 # vram: + compress: True + align: 0x1000 + - [0x101C620] - name: segment_0101D000 type: bin start: 0x101D000 # vram: + compress: True + align: 0x1000 + - [0x101E620] - name: segment_0101F000 type: bin start: 0x101F000 # vram: + compress: True + align: 0x1000 + - [0x1020620] - name: segment_01021000 type: bin start: 0x1021000 # vram: + compress: True + align: 0x1000 + - [0x1022620] - name: segment_01023000 type: bin start: 0x1023000 # vram: + compress: True + align: 0x1000 + - [0x1024620] - name: segment_01025000 type: bin start: 0x1025000 # vram: + compress: True + align: 0x1000 + - [0x1026620] - name: segment_01027000 type: bin start: 0x1027000 # vram: + compress: True + align: 0x1000 + - [0x1028620] - name: segment_01029000 type: bin start: 0x1029000 # vram: + compress: True + align: 0x1000 + - [0x102A620] - name: segment_0102B000 type: bin start: 0x102B000 # vram: + compress: True + align: 0x1000 + - [0x102D800] - name: segment_0102E000 type: bin start: 0x102E000 # vram: + compress: True + align: 0x1000 + - [0x102F020] - name: segment_01030000 type: bin start: 0x1030000 # vram: + compress: True + align: 0x1000 + - [0x1032280] - name: segment_01033000 type: bin start: 0x1033000 # vram: + compress: True + align: 0x1000 + - [0x1034020] - name: segment_01035000 type: bin start: 0x1035000 # vram: + compress: True + align: 0x1000 + - [0x1036020] - name: segment_01037000 type: bin start: 0x1037000 # vram: + compress: True + align: 0x1000 + - [0x1038020] - name: segment_01039000 type: bin start: 0x1039000 # vram: + compress: True + align: 0x1000 + - [0x103A020] - name: segment_0103B000 type: bin start: 0x103B000 # vram: + compress: True + align: 0x1000 + - [0x103D210] - name: segment_0103E000 type: bin start: 0x103E000 # vram: + compress: True + align: 0x1000 + - [0x103F020] - name: segment_01040000 type: bin start: 0x1040000 # vram: + compress: True + align: 0x1000 + - [0x1041020] - name: segment_01042000 type: bin start: 0x1042000 # vram: + compress: True + align: 0x1000 + - [0x1043020] - name: segment_01044000 type: bin start: 0x1044000 # vram: + compress: True + align: 0x1000 + - [0x1045020] - name: segment_01046000 type: bin start: 0x1046000 # vram: + compress: True + align: 0x1000 + - [0x1047020] - name: segment_01048000 type: bin start: 0x1048000 # vram: + compress: True + align: 0x1000 + - [0x1049020] - name: segment_0104A000 type: bin start: 0x104A000 # vram: + compress: True + align: 0x1000 + - [0x104B020] - name: segment_0104C000 type: bin start: 0x104C000 # vram: + compress: True + align: 0x1000 + - [0x104DCC0] - name: segment_0104E000 type: bin start: 0x104E000 # vram: + compress: True + align: 0x1000 + - [0x104F620] - name: segment_01050000 type: bin start: 0x1050000 # vram: + compress: True + align: 0x1000 + - [0x1051620] - name: segment_01052000 type: bin start: 0x1052000 # vram: + compress: True + align: 0x1000 + - [0x1053620] - name: segment_01054000 type: bin start: 0x1054000 # vram: + compress: True + align: 0x1000 + - [0x1055620] - name: segment_01056000 type: bin start: 0x1056000 # vram: + compress: True + align: 0x1000 + - [0x1057620] - name: segment_01058000 type: bin start: 0x1058000 # vram: + compress: True + align: 0x1000 + - [0x1059620] - name: segment_0105A000 type: bin start: 0x105A000 # vram: + compress: True + align: 0x1000 + - [0x105B620] - name: segment_0105C000 type: bin start: 0x105C000 # vram: + compress: True + align: 0x1000 + - [0x105D620] - name: segment_0105E000 type: bin start: 0x105E000 # vram: + compress: True + align: 0x1000 + - [0x105F620] - name: segment_01060000 type: bin start: 0x1060000 # vram: + compress: True + align: 0x1000 + - [0x1061620] - name: segment_01062000 type: bin start: 0x1062000 # vram: + compress: True + align: 0x1000 + - [0x1064170] - name: segment_01065000 type: bin start: 0x1065000 # vram: + compress: True + align: 0x1000 + - [0x1066620] - name: segment_01067000 type: bin start: 0x1067000 # vram: + compress: True + align: 0x1000 + - [0x1069770] - name: segment_0106A000 type: bin start: 0x106A000 # vram: + compress: True + align: 0x1000 + - [0x106B620] - name: segment_0106C000 type: bin start: 0x106C000 # vram: + compress: True + align: 0x1000 + - [0x106E590] - name: segment_0106F000 type: bin start: 0x106F000 # vram: + compress: True + align: 0x1000 + - [0x1070020] - name: segment_01071000 type: bin start: 0x1071000 # vram: + compress: True + align: 0x1000 + - [0x10734D0] - name: segment_01074000 type: bin start: 0x1074000 # vram: + compress: True + align: 0x1000 + - [0x1075020] - name: segment_01076000 type: bin start: 0x1076000 # vram: + compress: True + align: 0x1000 + - [0x1078680] - name: segment_01079000 type: bin start: 0x1079000 # vram: + compress: True + align: 0x1000 + - [0x107A020] - name: segment_0107B000 type: bin start: 0x107B000 # vram: + compress: True + align: 0x1000 + - [0x107CEF0] - name: segment_0107D000 type: bin start: 0x107D000 # vram: + compress: True + align: 0x1000 + - [0x107E620] - name: segment_0107F000 type: bin start: 0x107F000 # vram: + compress: True + align: 0x1000 + - [0x1080620] - name: segment_01081000 type: bin start: 0x1081000 # vram: + compress: True + align: 0x1000 + - [0x1082620] - name: segment_01083000 type: bin start: 0x1083000 # vram: + compress: True + align: 0x1000 + - [0x1084620] - name: segment_01085000 type: bin start: 0x1085000 # vram: + compress: True + align: 0x1000 + - [0x1086620] - name: segment_01087000 type: bin start: 0x1087000 # vram: + compress: True + align: 0x1000 + - [0x1088620] - name: segment_01089000 type: bin start: 0x1089000 # vram: + compress: True + align: 0x1000 + - [0x108A620] - name: segment_0108B000 type: bin start: 0x108B000 # vram: + compress: True + align: 0x1000 + - [0x108C620] - name: segment_0108D000 type: bin start: 0x108D000 # vram: + compress: True + align: 0x1000 + - [0x108E620] - name: segment_0108F000 type: bin start: 0x108F000 # vram: + compress: True + align: 0x1000 + - [0x1090620] - name: segment_01091000 type: bin start: 0x1091000 # vram: + compress: True + align: 0x1000 + - [0x1093800] - name: segment_01094000 type: bin start: 0x1094000 # vram: + compress: True + align: 0x1000 + - [0x1095620] - name: segment_01096000 type: bin start: 0x1096000 # vram: + compress: True + align: 0x1000 + - [0x1097620] - name: segment_01098000 type: bin start: 0x1098000 # vram: + compress: True + align: 0x1000 + - [0x1099620] - name: segment_0109A000 type: bin start: 0x109A000 # vram: + compress: True + align: 0x1000 + - [0x109B620] - name: segment_0109C000 type: bin start: 0x109C000 # vram: + compress: True + align: 0x1000 + - [0x109DD60] - name: segment_0109E000 type: bin start: 0x109E000 # vram: + compress: True + align: 0x1000 + - [0x109F620] - name: segment_010A0000 type: bin start: 0x10A0000 # vram: + compress: True + align: 0x1000 + - [0x10A1C70] - name: segment_010A2000 type: bin start: 0x10A2000 # vram: + compress: True + align: 0x1000 + - [0x10A3620] - name: segment_010A4000 type: bin start: 0x10A4000 # vram: + compress: True + align: 0x1000 + - [0x10A5620] - name: segment_010A6000 type: bin start: 0x10A6000 # vram: + compress: True + align: 0x1000 + - [0x10A7620] - name: segment_010A8000 type: bin start: 0x10A8000 # vram: + compress: True + align: 0x1000 + - [0x10A9620] - name: segment_010AA000 type: bin start: 0x10AA000 # vram: + compress: True + align: 0x1000 + - [0x10AB620] - name: segment_010AC000 type: bin start: 0x10AC000 # vram: + compress: True + align: 0x1000 + - [0x10AD620] - name: segment_010AE000 type: bin start: 0x10AE000 # vram: + compress: True + align: 0x1000 + - [0x10B0060] - name: segment_010B1000 type: bin start: 0x10B1000 # vram: + compress: True + align: 0x1000 + - [0x10B2020] - name: segment_010B3000 type: bin start: 0x10B3000 # vram: + compress: True + align: 0x1000 + - [0x10B5270] - name: segment_010B6000 type: bin start: 0x10B6000 # vram: + compress: True + align: 0x1000 + - [0x10B7020] - name: segment_010B8000 type: bin start: 0x10B8000 # vram: + compress: True + align: 0x1000 + - [0x10BA100] - name: segment_010BB000 type: bin start: 0x10BB000 # vram: + compress: True + align: 0x1000 + - [0x10BC620] - name: segment_010BD000 type: bin start: 0x10BD000 # vram: + compress: True + align: 0x1000 + - [0x10BE620] - name: segment_010BF000 type: bin start: 0x10BF000 # vram: + compress: True + align: 0x1000 + - [0x10C0620] - name: segment_010C1000 type: bin start: 0x10C1000 # vram: + compress: True + align: 0x1000 + - [0x10C2620] - name: segment_010C3000 type: bin start: 0x10C3000 # vram: + compress: True + align: 0x1000 + - [0x10C4620] - name: segment_010C5000 type: bin start: 0x10C5000 # vram: + compress: True + align: 0x1000 + - [0x10C6620] - name: segment_010C7000 type: bin start: 0x10C7000 # vram: + compress: True + align: 0x1000 + - [0x10C8620] - name: segment_010C9000 type: bin start: 0x10C9000 # vram: + compress: True + align: 0x1000 + - [0x10CA620] - name: segment_010CB000 type: bin start: 0x10CB000 # vram: + compress: True + align: 0x1000 + - [0x10CC620] - name: segment_010CD000 type: bin start: 0x10CD000 # vram: + compress: True + align: 0x1000 + - [0x10CE620] - name: segment_010CF000 type: bin start: 0x10CF000 # vram: + compress: True + align: 0x1000 + - [0x10D1300] - name: segment_010D2000 type: bin start: 0x10D2000 # vram: + compress: True + align: 0x1000 + - [0x10D3620] - name: segment_010D4000 type: bin start: 0x10D4000 # vram: + compress: True + align: 0x1000 + - [0x10D60B0] - name: segment_010D7000 type: bin start: 0x10D7000 # vram: + compress: True + align: 0x1000 + - [0x10D8020] - name: segment_010D9000 type: bin start: 0x10D9000 # vram: + compress: True + align: 0x1000 + - [0x10DB500] - name: segment_010DC000 type: bin start: 0x10DC000 # vram: + compress: True + align: 0x1000 + - [0x10DD020] - name: segment_010DE000 type: bin start: 0x10DE000 # vram: + compress: True + align: 0x1000 + - [0x10DF020] - name: segment_010E0000 type: bin start: 0x10E0000 # vram: + compress: True + align: 0x1000 + - [0x10E1020] - name: segment_010E2000 type: bin start: 0x10E2000 # vram: + compress: True + align: 0x1000 + - [0x10E4710] - name: segment_010E5000 type: bin start: 0x10E5000 # vram: + compress: True + align: 0x1000 + - [0x10E6620] - name: segment_010E7000 type: bin start: 0x10E7000 # vram: + compress: True + align: 0x1000 + - [0x10E90D0] - name: segment_010EA000 type: bin start: 0x10EA000 # vram: + compress: True + align: 0x1000 + - [0x10EB020] - name: segment_010EC000 type: bin start: 0x10EC000 # vram: + compress: True + align: 0x1000 + - [0x10ED020] - name: segment_010EE000 type: bin start: 0x10EE000 # vram: + compress: True + align: 0x1000 + - [0x10EF020] - name: segment_010F0000 type: bin start: 0x10F0000 # vram: + compress: True + align: 0x1000 + - [0x10F1020] - name: segment_010F2000 type: bin start: 0x10F2000 # vram: + compress: True + align: 0x1000 + - [0x10F3020] - name: segment_010F4000 type: bin start: 0x10F4000 # vram: + compress: False + align: 0x1000 + - [0x10FF1A0] - name: segment_01100000 type: bin start: 0x1100000 # vram: + compress: True + align: 0x1000 + - [0x11003C0] - name: segment_01101000 type: bin start: 0x1101000 # vram: + compress: True + align: 0x1000 + - [0x1101770] - name: segment_01102000 type: bin start: 0x1102000 # vram: + compress: True + align: 0x1000 + - [0x11029E0] - name: segment_01103000 type: bin start: 0x1103000 # vram: + compress: True + align: 0x1000 + - [0x11054F0] - name: segment_01106000 type: bin start: 0x1106000 # vram: + compress: True + align: 0x1000 + - [0x1106A60] - name: segment_01107000 type: bin start: 0x1107000 # vram: + compress: True + align: 0x1000 + - [0x1107930] - name: segment_01108000 type: bin start: 0x1108000 # vram: + compress: True + align: 0x1000 + - [0x1108BF0] - name: segment_01109000 type: bin start: 0x1109000 # vram: + compress: True + align: 0x1000 + - [0x1109B30] - name: segment_0110A000 type: bin start: 0x110A000 # vram: + compress: True + align: 0x1000 + - [0x110A9A0] - name: segment_0110B000 type: bin start: 0x110B000 # vram: + compress: True + align: 0x1000 + - [0x110B930] - name: segment_0110C000 type: bin start: 0x110C000 # vram: + compress: True + align: 0x1000 + - [0x110CBB0] - name: segment_0110D000 type: bin start: 0x110D000 # vram: + compress: True + align: 0x1000 + - [0x110DB60] - name: segment_0110E000 type: bin start: 0x110E000 # vram: + compress: True + align: 0x1000 + - [0x110E9D0] - name: segment_0110F000 type: bin start: 0x110F000 # vram: + compress: True + align: 0x1000 + - [0x110F9D0] - name: segment_01110000 type: bin start: 0x1110000 # vram: + compress: True + align: 0x1000 + - [0x11109D0] - name: segment_01111000 type: bin start: 0x1111000 # vram: + compress: True + align: 0x1000 + - [0x11119D0] - name: segment_01112000 type: bin start: 0x1112000 # vram: + compress: True + align: 0x1000 + - [0x1112BD0] - name: segment_01113000 type: bin start: 0x1113000 # vram: + compress: True + align: 0x1000 + - [0x11139D0] - name: segment_01114000 type: bin start: 0x1114000 # vram: + compress: True + align: 0x1000 + - [0x1114930] - name: segment_01115000 type: bin start: 0x1115000 # vram: + compress: True + align: 0x1000 + - [0x1115AC0] - name: segment_01116000 type: bin start: 0x1116000 # vram: + compress: True + align: 0x1000 + - [0x1116930] - name: segment_01117000 type: bin start: 0x1117000 # vram: + compress: True + align: 0x1000 + - [0x1117AA0] - name: segment_01118000 type: bin start: 0x1118000 # vram: + compress: True + align: 0x1000 + - [0x1118800] - name: segment_01119000 type: bin start: 0x1119000 # vram: + compress: True + align: 0x1000 + - [0x1119AB0] - name: segment_0111A000 type: bin start: 0x111A000 # vram: + compress: True + align: 0x1000 + - [0x111A8B0] - name: segment_0111B000 type: bin start: 0x111B000 # vram: + compress: True + align: 0x1000 + - [0x111BB40] - name: segment_0111C000 type: bin start: 0x111C000 # vram: + compress: True + align: 0x1000 + - [0x111C940] - name: segment_0111D000 type: bin start: 0x111D000 # vram: + compress: True + align: 0x1000 + - [0x111DBD0] - name: segment_0111E000 type: bin start: 0x111E000 # vram: + compress: True + align: 0x1000 + - [0x111E9C0] - name: segment_0111F000 type: bin start: 0x111F000 # vram: + compress: True + align: 0x1000 + - [0x111F930] - name: segment_01120000 type: bin start: 0x1120000 # vram: + compress: True + align: 0x1000 + - [0x11209B0] - name: segment_01121000 type: bin start: 0x1121000 # vram: + compress: True + align: 0x1000 + - [0x1121B40] - name: segment_01122000 type: bin start: 0x1122000 # vram: + compress: True + align: 0x1000 + - [0x1122900] - name: segment_01123000 type: bin start: 0x1123000 # vram: + compress: True + align: 0x1000 + - [0x1123930] - name: segment_01124000 type: bin start: 0x1124000 # vram: + compress: True + align: 0x1000 + - [0x1124930] - name: segment_01125000 type: bin start: 0x1125000 # vram: + compress: True + align: 0x1000 + - [0x11259D0] - name: segment_01126000 type: bin start: 0x1126000 # vram: + compress: True + align: 0x1000 + - [0x1126930] - name: segment_01127000 type: bin start: 0x1127000 # vram: + compress: True + align: 0x1000 + - [0x1127A40] - name: segment_01128000 type: bin start: 0x1128000 # vram: + compress: True + align: 0x1000 + - [0x11285B0] - name: segment_01129000 type: bin start: 0x1129000 # vram: + compress: True + align: 0x1000 + - [0x1129A80] - name: segment_0112A000 type: bin start: 0x112A000 # vram: + compress: True + align: 0x1000 + - [0x112A800] - name: segment_0112B000 type: bin start: 0x112B000 # vram: + compress: True + align: 0x1000 + - [0x112B670] - name: segment_0112C000 type: bin start: 0x112C000 # vram: + compress: True + align: 0x1000 + - [0x112C750] - name: segment_0112D000 type: bin start: 0x112D000 # vram: + compress: True + align: 0x1000 + - [0x112E1E0] - name: segment_0112F000 type: bin start: 0x112F000 # vram: + compress: True + align: 0x1000 + - [0x112F4A0] - name: segment_01130000 type: bin start: 0x1130000 # vram: + compress: True + align: 0x1000 + - [0x1130400] - name: segment_01131000 type: bin start: 0x1131000 # vram: + compress: True + align: 0x1000 + - [0x11331F0] - name: segment_01134000 type: bin start: 0x1134000 # vram: + compress: True + align: 0x1000 + - [0x1134AD0] - name: segment_01135000 type: bin start: 0x1135000 # vram: + compress: True + align: 0x1000 + - [0x11353C0] - name: segment_01136000 type: bin start: 0x1136000 # vram: + compress: True + align: 0x1000 + - [0x113BCD0] - name: segment_0113C000 type: bin start: 0x113C000 # vram: + compress: True + align: 0x1000 + - [0x113C100] - name: segment_0113D000 type: bin start: 0x113D000 # vram: + compress: False + align: 0x1000 + - [0x1146950] - name: segment_01147000 type: bin start: 0x1147000 # vram: + compress: True + align: 0x1000 + - [0x1147470] - name: segment_01148000 type: bin start: 0x1148000 # vram: + compress: False + align: 0x1000 + - [0x11492A0] - name: segment_0114A000 type: bin start: 0x114A000 # vram: + compress: True + align: 0x1000 + - [0x1187360] - name: segment_01188000 type: bin start: 0x1188000 # vram: + compress: True + align: 0x1000 + - [0x11AAC80] - name: segment_011AB000 type: bin start: 0x11AB000 # vram: + compress: True + align: 0x1000 + - [0x11E1A20] - name: segment_011E2000 type: bin start: 0x11E2000 # vram: + compress: True + align: 0x1000 + - [0x11E2690] - name: segment_011E3000 type: bin start: 0x11E3000 # vram: + compress: True + align: 0x1000 + - [0x11E30C0] - name: segment_011E4000 type: bin start: 0x11E4000 # vram: + compress: True + align: 0x1000 + - [0x11E40C0] - name: segment_011E5000 type: bin start: 0x11E5000 # vram: + compress: True + align: 0x1000 + - [0x11E5230] - name: segment_011E6000 type: bin start: 0x11E6000 # vram: + compress: True + align: 0x1000 + - [0x11E63C0] - name: segment_011E7000 type: bin start: 0x11E7000 # vram: + compress: True + align: 0x1000 + - [0x11E70C0] - name: segment_011E8000 type: bin start: 0x11E8000 # vram: + compress: True + align: 0x1000 + - [0x11E8770] - name: segment_011E9000 type: bin start: 0x11E9000 # vram: + compress: True + align: 0x1000 + - [0x11E9090] - name: segment_011EA000 type: bin start: 0x11EA000 # vram: + compress: True + align: 0x1000 + - [0x11EA200] - name: segment_011EB000 type: bin start: 0x11EB000 # vram: + compress: True + align: 0x1000 + - [0x11EB090] - name: segment_011EC000 type: bin start: 0x11EC000 # vram: + compress: True + align: 0x1000 + - [0x11EC090] - name: segment_011ED000 type: bin start: 0x11ED000 # vram: + compress: True + align: 0x1000 + - [0x11ED050] - name: segment_011EE000 type: bin start: 0x11EE000 # vram: + compress: True + align: 0x1000 + - [0x11EE020] - name: segment_011EF000 type: bin start: 0x11EF000 # vram: + compress: True + align: 0x1000 + - [0x11EF010] - name: segment_011F0000 type: bin start: 0x11F0000 # vram: + compress: True + align: 0x1000 + - [0x11F0050] - name: segment_011F1000 type: bin start: 0x11F1000 # vram: + compress: True + align: 0x1000 + - [0x11F1070] - name: segment_011F2000 type: bin start: 0x11F2000 # vram: + compress: True + align: 0x1000 + - [0x11F2010] - name: segment_011F3000 type: bin start: 0x11F3000 # vram: + compress: True + align: 0x1000 + - [0x11F3050] - name: segment_011F4000 type: bin start: 0x11F4000 # vram: + compress: True + align: 0x1000 + - [0x11F4930] - name: segment_011F5000 type: bin start: 0x11F5000 # vram: + compress: True + align: 0x1000 + - [0x11F5F90] - name: segment_011F6000 type: bin start: 0x11F6000 # vram: + compress: True + align: 0x1000 + - [0x11F79C0] - name: segment_011F8000 type: bin start: 0x11F8000 # vram: + compress: True + align: 0x1000 + - [0x11F91A0] - name: segment_011FA000 type: bin start: 0x11FA000 # vram: + compress: True + align: 0x1000 + - [0x11FB7E0] - name: segment_011FC000 type: bin start: 0x11FC000 # vram: + compress: True + align: 0x1000 + - [0x11FD610] - name: segment_011FE000 type: bin start: 0x11FE000 # vram: + compress: True + align: 0x1000 + - [0x11FFA00] - name: segment_01200000 type: bin start: 0x1200000 # vram: + compress: True + align: 0x1000 + - [0x1201660] - name: segment_01202000 type: bin start: 0x1202000 # vram: + compress: True + align: 0x1000 + - [0x1202F80] - name: segment_01203000 type: bin start: 0x1203000 # vram: + compress: True + align: 0x1000 + - [0x12041D0] - name: segment_01205000 type: bin start: 0x1205000 # vram: + compress: True + align: 0x1000 + - [0x1206370] - name: segment_01207000 type: bin start: 0x1207000 # vram: + compress: True + align: 0x1000 + - [0x12087A0] - name: segment_01209000 type: bin start: 0x1209000 # vram: + compress: True + align: 0x1000 + - [0x120A480] - name: segment_0120B000 type: bin start: 0x120B000 # vram: + compress: True + align: 0x1000 + - [0x120C340] - name: segment_0120D000 type: bin start: 0x120D000 # vram: + compress: True + align: 0x1000 + - [0x120E470] - name: segment_0120F000 type: bin start: 0x120F000 # vram: + compress: True + align: 0x1000 + - [0x1210460] - name: segment_01211000 type: bin start: 0x1211000 # vram: + compress: True + align: 0x1000 + - [0x12120D0] - name: segment_01213000 type: bin start: 0x1213000 # vram: + compress: True + align: 0x1000 + - [0x1214700] - name: segment_01215000 type: bin start: 0x1215000 # vram: + compress: True + align: 0x1000 + - [0x1216750] - name: segment_01217000 type: bin start: 0x1217000 # vram: + compress: True + align: 0x1000 + - [0x1217FB0] - name: segment_01218000 type: bin start: 0x1218000 # vram: + compress: True + align: 0x1000 + - [0x1219B10] - name: segment_0121A000 type: bin start: 0x121A000 # vram: + compress: True + align: 0x1000 + - [0x121B730] - name: segment_0121C000 type: bin start: 0x121C000 # vram: + compress: True + align: 0x1000 + - [0x121D460] - name: segment_0121E000 type: bin start: 0x121E000 # vram: + compress: True + align: 0x1000 + - [0x121F6D0] - name: segment_01220000 type: bin start: 0x1220000 # vram: + compress: True + align: 0x1000 + - [0x1221340] - name: segment_01222000 type: bin start: 0x1222000 # vram: + compress: True + align: 0x1000 + - [0x1223200] - name: segment_01224000 type: bin start: 0x1224000 # vram: + compress: True + align: 0x1000 + - [0x1225150] - name: segment_01226000 type: bin start: 0x1226000 # vram: + compress: True + align: 0x1000 + - [0x12273E0] - name: segment_01228000 type: bin start: 0x1228000 # vram: + compress: True + align: 0x1000 + - [0x1229260] - name: segment_0122A000 type: bin start: 0x122A000 # vram: + compress: True + align: 0x1000 + - [0x122B350] - name: segment_0122C000 type: bin start: 0x122C000 # vram: + compress: True + align: 0x1000 + - [0x122D010] - name: segment_0122E000 type: bin start: 0x122E000 # vram: + compress: True + align: 0x1000 + - [0x122F230] - name: segment_01230000 type: bin start: 0x1230000 # vram: + compress: True + align: 0x1000 + - [0x1231AB0] - name: segment_01232000 type: bin start: 0x1232000 # vram: + compress: True + align: 0x1000 + - [0x1233B90] - name: segment_01234000 type: bin start: 0x1234000 # vram: + compress: True + align: 0x1000 + - [0x1235950] - name: segment_01236000 type: bin start: 0x1236000 # vram: + compress: True + align: 0x1000 + - [0x12373F0] - name: segment_01238000 type: bin start: 0x1238000 # vram: + compress: True + align: 0x1000 + - [0x1239A60] - name: segment_0123A000 type: bin start: 0x123A000 # vram: + compress: True + align: 0x1000 + - [0x123B5B0] - name: segment_0123C000 type: bin start: 0x123C000 # vram: + compress: True + align: 0x1000 + - [0x123D080] - name: segment_0123E000 type: bin start: 0x123E000 # vram: + compress: True + align: 0x1000 + - [0x123F600] - name: segment_01240000 type: bin start: 0x1240000 # vram: + compress: True + align: 0x1000 + - [0x1241220] - name: segment_01242000 type: bin start: 0x1242000 # vram: + compress: True + align: 0x1000 + - [0x1243360] - name: segment_01244000 type: bin start: 0x1244000 # vram: + compress: True + align: 0x1000 + - [0x1244F10] - name: segment_01245000 type: bin start: 0x1245000 # vram: + compress: True + align: 0x1000 + - [0x1246420] - name: segment_01247000 type: bin start: 0x1247000 # vram: + compress: True + align: 0x1000 + - [0x12486B0] - name: segment_01249000 type: bin start: 0x1249000 # vram: + compress: True + align: 0x1000 + - [0x124AB20] - name: segment_0124B000 type: bin start: 0x124B000 # vram: + compress: True + align: 0x1000 + - [0x124C2A0] - name: segment_0124D000 type: bin start: 0x124D000 # vram: + compress: True + align: 0x1000 + - [0x124E210] - name: segment_0124F000 type: bin start: 0x124F000 # vram: + compress: True + align: 0x1000 + - [0x12503E0] - name: segment_01251000 type: bin start: 0x1251000 # vram: + compress: True + align: 0x1000 + - [0x1252900] - name: segment_01253000 type: bin start: 0x1253000 # vram: + compress: True + align: 0x1000 + - [0x1254540] - name: segment_01255000 type: bin start: 0x1255000 # vram: + compress: True + align: 0x1000 + - [0x1256440] - name: segment_01257000 type: bin start: 0x1257000 # vram: + compress: True + align: 0x1000 + - [0x1258210] - name: segment_01259000 type: bin start: 0x1259000 # vram: + compress: True + align: 0x1000 + - [0x125A530] - name: segment_0125B000 type: bin start: 0x125B000 # vram: + compress: True + align: 0x1000 + - [0x125C290] - name: segment_0125D000 type: bin start: 0x125D000 # vram: + compress: True + align: 0x1000 + - [0x125E450] - name: segment_0125F000 type: bin start: 0x125F000 # vram: + compress: True + align: 0x1000 + - [0x12603B0] - name: segment_01261000 type: bin start: 0x1261000 # vram: + compress: True + align: 0x1000 + - [0x12625F0] - name: segment_01263000 type: bin start: 0x1263000 # vram: + compress: True + align: 0x1000 + - [0x1264100] - name: segment_01265000 type: bin start: 0x1265000 # vram: + compress: True + align: 0x1000 + - [0x1266290] - name: segment_01267000 type: bin start: 0x1267000 # vram: + compress: True + align: 0x1000 + - [0x1268260] - name: segment_01269000 type: bin start: 0x1269000 # vram: + compress: True + align: 0x1000 + - [0x126A350] - name: segment_0126B000 type: bin start: 0x126B000 # vram: + compress: True + align: 0x1000 + - [0x126C200] - name: segment_0126D000 type: bin start: 0x126D000 # vram: + compress: True + align: 0x1000 + - [0x126E3B0] - name: segment_0126F000 type: bin start: 0x126F000 # vram: + compress: True + align: 0x1000 + - [0x12700A0] - name: segment_01271000 type: bin start: 0x1271000 # vram: + compress: True + align: 0x1000 + - [0x1272020] - name: segment_01273000 type: bin start: 0x1273000 # vram: + compress: True + align: 0x1000 + - [0x12743D0] - name: segment_01275000 type: bin start: 0x1275000 # vram: + compress: True + align: 0x1000 + - [0x12764A0] - name: segment_01277000 type: bin start: 0x1277000 # vram: + compress: True + align: 0x1000 + - [0x12785A0] - name: segment_01279000 type: bin start: 0x1279000 # vram: + compress: True + align: 0x1000 + - [0x127A1E0] - name: segment_0127B000 type: bin start: 0x127B000 # vram: + compress: True + align: 0x1000 + - [0x127C750] - name: segment_0127D000 type: bin start: 0x127D000 # vram: + compress: True + align: 0x1000 + - [0x127E6E0] - name: segment_0127F000 type: bin start: 0x127F000 # vram: + compress: True + align: 0x1000 + - [0x12804E0] - name: segment_01281000 type: bin start: 0x1281000 # vram: + compress: True + align: 0x1000 + - [0x12827C0] - name: segment_01283000 type: bin start: 0x1283000 # vram: + compress: True + align: 0x1000 + - [0x12847A0] - name: segment_01285000 type: bin start: 0x1285000 # vram: + compress: True + align: 0x1000 + - [0x1286700] - name: segment_01287000 type: bin start: 0x1287000 # vram: + compress: True + align: 0x1000 + - [0x1288470] - name: segment_01289000 type: bin start: 0x1289000 # vram: + compress: True + align: 0x1000 + - [0x128A520] - name: segment_0128B000 type: bin start: 0x128B000 # vram: + compress: True + align: 0x1000 + - [0x128C500] - name: segment_0128D000 type: bin start: 0x128D000 # vram: + compress: True + align: 0x1000 + - [0x128E0F0] - name: segment_0128F000 type: bin start: 0x128F000 # vram: + compress: True + align: 0x1000 + - [0x1290230] - name: segment_01291000 type: bin start: 0x1291000 # vram: + compress: True + align: 0x1000 + - [0x12926C0] - name: segment_01293000 type: bin start: 0x1293000 # vram: + compress: True + align: 0x1000 + - [0x12943C0] - name: segment_01295000 type: bin start: 0x1295000 # vram: + compress: True + align: 0x1000 + - [0x1296480] - name: segment_01297000 type: bin start: 0x1297000 # vram: + compress: True + align: 0x1000 + - [0x1297F70] - name: segment_01298000 type: bin start: 0x1298000 # vram: + compress: True + align: 0x1000 + - [0x1299870] - name: segment_0129A000 type: bin start: 0x129A000 # vram: + compress: True + align: 0x1000 + - [0x129B2D0] - name: segment_0129C000 type: bin start: 0x129C000 # vram: + compress: True + align: 0x1000 + - [0x129D3D0] - name: segment_0129E000 type: bin start: 0x129E000 # vram: + compress: True + align: 0x1000 + - [0x129F280] - name: segment_012A0000 type: bin start: 0x12A0000 # vram: + compress: True + align: 0x1000 + - [0x12A1560] - name: segment_012A2000 type: bin start: 0x12A2000 # vram: + compress: True + align: 0x1000 + - [0x12A3040] - name: segment_012A4000 type: bin start: 0x12A4000 # vram: + compress: True + align: 0x1000 + - [0x12A52D0] - name: segment_012A6000 type: bin start: 0x12A6000 # vram: + compress: True + align: 0x1000 + - [0x12A7270] - name: segment_012A8000 type: bin start: 0x12A8000 # vram: + compress: True + align: 0x1000 + - [0x12A9780] - name: segment_012AA000 type: bin start: 0x12AA000 # vram: + compress: True + align: 0x1000 + - [0x12AB5C0] - name: segment_012AC000 type: bin start: 0x12AC000 # vram: + compress: True + align: 0x1000 + - [0x12B1CF0] - name: segment_012B2000 type: bin start: 0x12B2000 # vram: + compress: True + align: 0x1000 + - [0x12B8290] - name: segment_012B9000 type: bin start: 0x12B9000 # vram: + compress: True + align: 0x1000 + - [0x12BA980] - name: segment_012BB000 type: bin start: 0x12BB000 # vram: + compress: True + align: 0x1000 + - [0x12C18E0] - name: segment_012C2000 type: bin start: 0x12C2000 # vram: + compress: True + align: 0x1000 + - [0x12C5FF0] - name: segment_012C6000 type: bin start: 0x12C6000 # vram: + compress: True + align: 0x1000 + - [0x12C7780] - name: segment_012C8000 type: bin start: 0x12C8000 # vram: + compress: True + align: 0x1000 + - [0x12C9770] - name: segment_012CA000 type: bin start: 0x12CA000 # vram: + compress: True + align: 0x1000 + - [0x12CBA80] - name: segment_012CC000 type: bin start: 0x12CC000 # vram: + compress: True + align: 0x1000 + - [0x12CD820] - name: segment_012CE000 type: bin start: 0x12CE000 # vram: + compress: True + align: 0x1000 + - [0x12CF8C0] - name: segment_012D0000 type: bin start: 0x12D0000 # vram: + compress: True + align: 0x1000 + - [0x12D19A0] - name: segment_012D2000 type: bin start: 0x12D2000 # vram: + compress: True + align: 0x1000 + - [0x12D3290] - name: segment_012D4000 type: bin start: 0x12D4000 # vram: + compress: True + align: 0x1000 + - [0x12D56E0] - name: segment_012D6000 type: bin start: 0x12D6000 # vram: + compress: True + align: 0x1000 + - [0x12D7170] - name: segment_012D8000 type: bin start: 0x12D8000 # vram: + compress: True + align: 0x1000 + - [0x12D9360] - name: segment_012DA000 type: bin start: 0x12DA000 # vram: + compress: True + align: 0x1000 + - [0x12DB170] - name: segment_012DC000 type: bin start: 0x12DC000 # vram: + compress: True + align: 0x1000 + - [0x12DD140] - name: segment_012DE000 type: bin start: 0x12DE000 # vram: + compress: True + align: 0x1000 + - [0x12DF400] - name: segment_012E0000 type: bin start: 0x12E0000 # vram: + compress: True + align: 0x1000 + - [0x12E1060] - name: segment_012E2000 type: bin start: 0x12E2000 # vram: + compress: True + align: 0x1000 + - [0x12E3870] - name: segment_012E4000 type: bin start: 0x12E4000 # vram: + compress: True + align: 0x1000 + - [0x12E5A90] - name: segment_012E6000 type: bin start: 0x12E6000 # vram: + compress: True + align: 0x1000 + - [0x12E7810] - name: segment_012E8000 type: bin start: 0x12E8000 # vram: + compress: True + align: 0x1000 + - [0x12E9730] - name: segment_012EA000 type: bin start: 0x12EA000 # vram: + compress: True + align: 0x1000 + - [0x12EB590] - name: segment_012EC000 type: bin start: 0x12EC000 # vram: + compress: True + align: 0x1000 + - [0x12ED910] - name: segment_012EE000 type: bin start: 0x12EE000 # vram: + compress: True + align: 0x1000 + - [0x12EF6E0] - name: segment_012F0000 type: bin start: 0x12F0000 # vram: + compress: True + align: 0x1000 + - [0x12F18A0] - name: segment_012F2000 type: bin start: 0x12F2000 # vram: + compress: True + align: 0x1000 + - [0x12F3940] - name: segment_012F4000 type: bin start: 0x12F4000 # vram: + compress: True + align: 0x1000 + - [0x12F56D0] - name: segment_012F6000 type: bin start: 0x12F6000 # vram: + compress: True + align: 0x1000 + - [0x12F78F0] - name: segment_012F8000 type: bin start: 0x12F8000 # vram: + compress: True + align: 0x1000 + - [0x12F9820] - name: segment_012FA000 type: bin start: 0x12FA000 # vram: + compress: True + align: 0x1000 + - [0x12FAB60] - name: segment_012FB000 type: bin start: 0x12FB000 # vram: + compress: True + align: 0x1000 + - [0x12FC0E0] - name: segment_012FD000 type: bin start: 0x12FD000 # vram: + compress: True + align: 0x1000 + - [0x12FE520] - name: segment_012FF000 type: bin start: 0x12FF000 # vram: + compress: True + align: 0x1000 + - [0x1300580] - name: segment_01301000 type: bin start: 0x1301000 # vram: + compress: True + align: 0x1000 + - [0x1302A70] - name: segment_01303000 type: bin start: 0x1303000 # vram: + compress: True + align: 0x1000 + - [0x1304190] - name: segment_01305000 type: bin start: 0x1305000 # vram: + compress: True + align: 0x1000 + - [0x1306430] - name: segment_01307000 type: bin start: 0x1307000 # vram: + compress: True + align: 0x1000 + - [0x1308020] - name: segment_01309000 type: bin start: 0x1309000 # vram: + compress: True + align: 0x1000 + - [0x130A1E0] - name: segment_0130B000 type: bin start: 0x130B000 # vram: + compress: True + align: 0x1000 + - [0x130BDF0] - name: segment_0130C000 type: bin start: 0x130C000 # vram: + compress: True + align: 0x1000 + - [0x130D520] - name: segment_0130E000 type: bin start: 0x130E000 # vram: + compress: True + align: 0x1000 + - [0x130F610] - name: segment_01310000 type: bin start: 0x1310000 # vram: + compress: True + align: 0x1000 + - [0x1311700] - name: segment_01312000 type: bin start: 0x1312000 # vram: + compress: True + align: 0x1000 + - [0x13136D0] - name: segment_01314000 type: bin start: 0x1314000 # vram: + compress: True + align: 0x1000 + - [0x1315120] - name: segment_01316000 type: bin start: 0x1316000 # vram: + compress: True + align: 0x1000 + - [0x13171C0] - name: segment_01318000 type: bin start: 0x1318000 # vram: + compress: True + align: 0x1000 + - [0x13193A0] - name: segment_0131A000 type: bin start: 0x131A000 # vram: + compress: True + align: 0x1000 + - [0x131B8D0] - name: segment_0131C000 type: bin start: 0x131C000 # vram: + compress: True + align: 0x1000 + - [0x131D8F0] - name: segment_0131E000 type: bin start: 0x131E000 # vram: + compress: True + align: 0x1000 + - [0x131F780] - name: segment_01320000 type: bin start: 0x1320000 # vram: + compress: True + align: 0x1000 + - [0x1321A10] - name: segment_01322000 type: bin start: 0x1322000 # vram: + compress: True + align: 0x1000 + - [0x1323B90] - name: segment_01324000 type: bin start: 0x1324000 # vram: + compress: True + align: 0x1000 + - [0x1325A30] - name: segment_01326000 type: bin start: 0x1326000 # vram: + compress: True + align: 0x1000 + - [0x1327A40] - name: segment_01328000 type: bin start: 0x1328000 # vram: + compress: True + align: 0x1000 + - [0x1329770] - name: segment_0132A000 type: bin start: 0x132A000 # vram: + compress: True + align: 0x1000 + - [0x132B8E0] - name: segment_0132C000 type: bin start: 0x132C000 # vram: + compress: True + align: 0x1000 + - [0x132D7E0] - name: segment_0132E000 type: bin start: 0x132E000 # vram: + compress: True + align: 0x1000 + - [0x132F600] - name: segment_01330000 type: bin start: 0x1330000 # vram: + compress: True + align: 0x1000 + - [0x1330840] - name: segment_01331000 type: bin start: 0x1331000 # vram: + compress: True + align: 0x1000 + - [0x1332B40] - name: segment_01333000 type: bin start: 0x1333000 # vram: + compress: True + align: 0x1000 + - [0x1333920] - name: segment_01334000 type: bin start: 0x1334000 # vram: + compress: True + align: 0x1000 + - [0x1334960] - name: segment_01335000 type: bin start: 0x1335000 # vram: + compress: True + align: 0x1000 + - [0x1335DE0] - name: segment_01336000 type: bin start: 0x1336000 # vram: + compress: True + align: 0x1000 + - [0x1336970] - name: segment_01337000 type: bin start: 0x1337000 # vram: + compress: True + align: 0x1000 + - [0x1337970] - name: segment_01338000 type: bin start: 0x1338000 # vram: + compress: True + align: 0x1000 + - [0x1338D10] - name: segment_01339000 type: bin start: 0x1339000 # vram: + compress: True + align: 0x1000 + - [0x1339300] - name: segment_0133A000 type: bin start: 0x133A000 # vram: + compress: True + align: 0x1000 + - [0x133A320] - name: segment_0133B000 type: bin start: 0x133B000 # vram: + compress: True + align: 0x1000 + - [0x133C3E0] - name: segment_0133D000 type: bin start: 0x133D000 # vram: + compress: True + align: 0x1000 + - [0x133DF50] - name: segment_0133E000 type: bin start: 0x133E000 # vram: + compress: True + align: 0x1000 + - [0x133F620] - name: segment_01340000 type: bin start: 0x1340000 # vram: + compress: True + align: 0x1000 + - [0x1341080] - name: segment_01342000 type: bin start: 0x1342000 # vram: + compress: True + align: 0x1000 + - [0x1343160] - name: segment_01344000 type: bin start: 0x1344000 # vram: + compress: True + align: 0x1000 + - [0x1344EA0] - name: segment_01345000 type: bin start: 0x1345000 # vram: + compress: True + align: 0x1000 + - [0x13463F0] - name: segment_01347000 type: bin start: 0x1347000 # vram: + compress: True + align: 0x1000 + - [0x13482A0] - name: segment_01349000 type: bin start: 0x1349000 # vram: + compress: True + align: 0x1000 + - [0x134A5A0] - name: segment_0134B000 type: bin start: 0x134B000 # vram: + compress: True + align: 0x1000 + - [0x134BFA0] - name: segment_0134C000 type: bin start: 0x134C000 # vram: + compress: True + align: 0x1000 + - [0x134CF50] - name: segment_0134D000 type: bin start: 0x134D000 # vram: + compress: True + align: 0x1000 + - [0x134E550] - name: segment_0134F000 type: bin start: 0x134F000 # vram: + compress: True + align: 0x1000 + - [0x134FF50] - name: segment_01350000 type: bin start: 0x1350000 # vram: + compress: True + align: 0x1000 + - [0x13513A0] - name: segment_01352000 type: bin start: 0x1352000 # vram: + compress: True + align: 0x1000 + - [0x1352F90] - name: segment_01353000 type: bin start: 0x1353000 # vram: + compress: False + align: 0x1000 + - [0x13544A0] - name: segment_01355000 type: bin start: 0x1355000 # vram: + compress: True + align: 0x1000 + - [0x13564C0] - name: segment_01357000 type: bin start: 0x1357000 # vram: + compress: True + align: 0x1000 + - [0x1358760] - name: segment_01359000 type: bin start: 0x1359000 # vram: + compress: True + align: 0x1000 + - [0x135A590] - name: segment_0135B000 type: bin start: 0x135B000 # vram: + compress: True + align: 0x1000 + - [0x135C420] - name: segment_0135D000 type: bin start: 0x135D000 # vram: + compress: True + align: 0x1000 + - [0x135E850] - name: segment_0135F000 type: bin start: 0x135F000 # vram: + compress: True + align: 0x1000 + - [0x13606F0] - name: segment_01361000 type: bin start: 0x1361000 # vram: + compress: True + align: 0x1000 + - [0x1362420] - name: segment_01363000 type: bin start: 0x1363000 # vram: + compress: True + align: 0x1000 + - [0x1364730] - name: segment_01365000 type: bin start: 0x1365000 # vram: + compress: True + align: 0x1000 + - [0x13663C0] - name: segment_01367000 type: bin start: 0x1367000 # vram: + compress: True + align: 0x1000 + - [0x13685E0] - name: segment_01369000 type: bin start: 0x1369000 # vram: + compress: True + align: 0x1000 + - [0x136A310] - name: segment_0136B000 type: bin start: 0x136B000 # vram: + compress: True + align: 0x1000 + - [0x136C1B0] - name: segment_0136D000 type: bin start: 0x136D000 # vram: + compress: True + align: 0x1000 + - [0x136E440] - name: segment_0136F000 type: bin start: 0x136F000 # vram: + compress: True + align: 0x1000 + - [0x1370AE0] - name: segment_01371000 type: bin start: 0x1371000 # vram: + compress: True + align: 0x1000 + - [0x1372830] - name: segment_01373000 type: bin start: 0x1373000 # vram: + compress: True + align: 0x1000 + - [0x13747F0] - name: segment_01375000 type: bin start: 0x1375000 # vram: + compress: True + align: 0x1000 + - [0x1376690] - name: segment_01377000 type: bin start: 0x1377000 # vram: + compress: True + align: 0x1000 + - [0x1378A00] - name: segment_01379000 type: bin start: 0x1379000 # vram: + compress: True + align: 0x1000 + - [0x137A9E0] - name: segment_0137B000 type: bin start: 0x137B000 # vram: + compress: True + align: 0x1000 + - [0x137BBC0] - name: segment_0137C000 type: bin start: 0x137C000 # vram: + compress: True + align: 0x1000 + - [0x137CC50] - name: segment_0137D000 type: bin start: 0x137D000 # vram: + compress: True + align: 0x1000 + - [0x137E7B0] - name: segment_0137F000 type: bin start: 0x137F000 # vram: + compress: True + align: 0x1000 + - [0x1380B40] - name: segment_01381000 type: bin start: 0x1381000 # vram: + compress: True + align: 0x1000 + - [0x1382960] - name: segment_01383000 type: bin start: 0x1383000 # vram: + compress: True + align: 0x1000 + - [0x13895F0] - name: segment_0138A000 type: bin start: 0x138A000 # vram: + compress: True + align: 0x1000 + - [0x138E480] - name: segment_0138F000 type: bin start: 0x138F000 # vram: + compress: False + align: 0x1000 + - [0x138F2C0] - name: segment_01390000 type: bin start: 0x1390000 # vram: + compress: False + align: 0x1000 + - [0x13925A0] - name: segment_01393000 type: bin start: 0x1393000 # vram: + compress: False + align: 0x1000 + - [0x1396B40] - name: segment_01397000 type: bin start: 0x1397000 # vram: + compress: False + align: 0x1000 + - [0x1397E60] - name: segment_01398000 type: bin start: 0x1398000 # vram: + compress: True + align: 0x1000 + - [0x13995B0] - name: segment_0139A000 type: bin start: 0x139A000 # vram: + compress: True + align: 0x1000 + - [0x139BB60] - name: segment_0139C000 type: bin start: 0x139C000 # vram: + compress: True + align: 0x1000 + - [0x139D2C0] - name: segment_0139E000 type: bin start: 0x139E000 # vram: + compress: True + align: 0x1000 + - [0x139FC00] - name: segment_013A0000 type: bin start: 0x13A0000 # vram: + compress: True + align: 0x1000 + - [0x13A1C90] - name: segment_013A2000 type: bin start: 0x13A2000 # vram: + compress: False + align: 0x1000 + - [0x13A35D0] - name: segment_013A4000 type: bin start: 0x13A4000 # vram: + compress: True + align: 0x1000 + - [0x13A42C0] - name: segment_013A5000 type: bin start: 0x13A5000 # vram: + compress: True + align: 0x1000 + - [0x13A5470] - name: segment_013A6000 type: bin start: 0x13A6000 # vram: + compress: True + align: 0x1000 + - [0x13A6450] - name: segment_013A7000 type: bin start: 0x13A7000 # vram: + compress: True + align: 0x1000 + - [0x13A7F90] - name: segment_013A8000 type: bin start: 0x13A8000 # vram: + compress: True + align: 0x1000 + - [0x13A8F90] - name: segment_013A9000 type: bin start: 0x13A9000 # vram: + compress: True + align: 0x1000 + - [0x13AAC90] - name: segment_013AB000 type: bin start: 0x13AB000 # vram: + compress: True + align: 0x1000 + - [0x13AB580] - name: segment_013AC000 type: bin start: 0x13AC000 # vram: + compress: True + align: 0x1000 + - [0x13AEBB0] - name: segment_013AF000 type: bin start: 0x13AF000 # vram: + compress: True + align: 0x1000 + - [0x13B5390] - name: segment_013B6000 type: bin start: 0x13B6000 # vram: + compress: True + align: 0x1000 + - [0x13BA520] - name: segment_013BB000 type: bin start: 0x13BB000 # vram: + compress: True + align: 0x1000 + - [0x13BE810] - name: segment_013BF000 type: bin start: 0x13BF000 # vram: + compress: True + align: 0x1000 + - [0x13C6E40] - name: segment_013C7000 type: bin start: 0x13C7000 # vram: + compress: True + align: 0x1000 + - [0x13CC990] - name: segment_013CD000 type: bin start: 0x13CD000 # vram: + compress: True + align: 0x1000 + - [0x13D3DE0] - name: segment_013D4000 type: bin start: 0x13D4000 # vram: + compress: True + align: 0x1000 + - [0x13DB330] - name: segment_013DC000 type: bin start: 0x13DC000 # vram: + compress: True + align: 0x1000 + - [0x13E1CB0] - name: segment_013E2000 type: bin start: 0x13E2000 # vram: + compress: True + align: 0x1000 + - [0x13E2B40] - name: segment_013E3000 type: bin start: 0x13E3000 # vram: + compress: True + align: 0x1000 + - [0x13E4CD0] - name: segment_013E5000 type: bin start: 0x13E5000 # vram: + compress: True + align: 0x1000 + - [0x13E6770] - name: segment_013E7000 type: bin start: 0x13E7000 # vram: + compress: True + align: 0x1000 + - [0x13E8850] - name: segment_013E9000 type: bin start: 0x13E9000 # vram: + compress: True + align: 0x1000 + - [0x13EA760] - name: segment_013EB000 type: bin start: 0x13EB000 # vram: + compress: True + align: 0x1000 + - [0x13EBE00] - name: segment_013EC000 type: bin start: 0x13EC000 # vram: + compress: False + align: 0x1000 + - [0x13F0330] - name: segment_013F1000 type: bin start: 0x13F1000 # vram: + compress: True + align: 0x1000 + - [0x13F2250] - name: segment_013F3000 type: bin start: 0x13F3000 # vram: + compress: False + align: 0x1000 + - [0x1407F80] - name: segment_01408000 type: bin start: 0x1408000 # vram: + compress: True + align: 0x1000 + - [0x1408440] - name: segment_01409000 type: bin start: 0x1409000 # vram: + compress: True + align: 0x1000 + - [0x1409170] - name: segment_0140A000 type: bin start: 0x140A000 # vram: + compress: True + align: 0x1000 + - [0x140A200] - name: segment_0140B000 type: bin start: 0x140B000 # vram: + compress: True + align: 0x1000 + - [0x140B430] - name: segment_0140C000 type: bin start: 0x140C000 # vram: + compress: True + align: 0x1000 + - [0x140FF10] - name: segment_01410000 type: bin start: 0x1410000 # vram: + compress: False + align: 0x1000 + - [0x1426C90] - name: segment_01427000 type: bin start: 0x1427000 # vram: + compress: True + align: 0x1000 + - [0x1427A00] - name: segment_01428000 type: bin start: 0x1428000 # vram: + compress: True + align: 0x1000 + - [0x1428A50] - name: segment_01429000 type: bin start: 0x1429000 # vram: + compress: True + align: 0x1000 + - [0x1429B00] - name: segment_0142A000 type: bin start: 0x142A000 # vram: + compress: True + align: 0x1000 + - [0x142AEE0] - name: segment_0142B000 type: bin start: 0x142B000 # vram: + compress: True + align: 0x1000 + - [0x142BF30] - name: segment_0142C000 type: bin start: 0x142C000 # vram: + compress: True + align: 0x1000 + - [0x142CEB0] - name: segment_0142D000 type: bin start: 0x142D000 # vram: + compress: True + align: 0x1000 + - [0x142DC60] - name: segment_0142E000 type: bin start: 0x142E000 # vram: + compress: True + align: 0x1000 + - [0x142EEA0] - name: segment_0142F000 type: bin start: 0x142F000 # vram: + compress: True + align: 0x1000 + - [0x142FC60] - name: segment_01430000 type: bin start: 0x1430000 # vram: + compress: True + align: 0x1000 + - [0x1430C70] - name: segment_01431000 type: bin start: 0x1431000 # vram: + compress: True + align: 0x1000 + - [0x1431D70] - name: segment_01432000 type: bin start: 0x1432000 # vram: + compress: True + align: 0x1000 + - [0x14330A0] - name: segment_01434000 type: bin start: 0x1434000 # vram: + compress: True + align: 0x1000 + - [0x1434DB0] - name: segment_01435000 type: bin start: 0x1435000 # vram: + compress: True + align: 0x1000 + - [0x1435D20] - name: segment_01436000 type: bin start: 0x1436000 # vram: + compress: True + align: 0x1000 + - [0x1436DD0] - name: segment_01437000 type: bin start: 0x1437000 # vram: + compress: True + align: 0x1000 + - [0x1437E60] - name: segment_01438000 type: bin start: 0x1438000 # vram: + compress: True + align: 0x1000 + - [0x1438B10] - name: segment_01439000 type: bin start: 0x1439000 # vram: + compress: True + align: 0x1000 + - [0x1439CB0] - name: segment_0143A000 type: bin start: 0x143A000 # vram: + compress: True + align: 0x1000 + - [0x143ADF0] - name: segment_0143B000 type: bin start: 0x143B000 # vram: + compress: True + align: 0x1000 + - [0x143C0D0] - name: segment_0143D000 type: bin start: 0x143D000 # vram: + compress: True + align: 0x1000 + - [0x143DBA0] - name: segment_0143E000 type: bin start: 0x143E000 # vram: + compress: True + align: 0x1000 + - [0x143ED90] - name: segment_0143F000 type: bin start: 0x143F000 # vram: + compress: True + align: 0x1000 + - [0x143FB60] - name: segment_01440000 type: bin start: 0x1440000 # vram: + compress: True + align: 0x1000 + - [0x1440F80] - name: segment_01441000 type: bin start: 0x1441000 # vram: + compress: True + align: 0x1000 + - [0x1441BB0] - name: segment_01442000 type: bin start: 0x1442000 # vram: + compress: True + align: 0x1000 + - [0x1442DE0] - name: segment_01443000 type: bin start: 0x1443000 # vram: + compress: True + align: 0x1000 + - [0x1443DE0] - name: segment_01444000 type: bin start: 0x1444000 # vram: + compress: True + align: 0x1000 + - [0x1444E30] - name: segment_01445000 type: bin start: 0x1445000 # vram: + compress: True + align: 0x1000 + - [0x1445F30] - name: segment_01446000 type: bin start: 0x1446000 # vram: + compress: True + align: 0x1000 + - [0x1446C80] - name: segment_01447000 type: bin start: 0x1447000 # vram: + compress: True + align: 0x1000 + - [0x1447DB0] - name: segment_01448000 type: bin start: 0x1448000 # vram: + compress: True + align: 0x1000 + - [0x1448D80] - name: segment_01449000 type: bin start: 0x1449000 # vram: + compress: True + align: 0x1000 + - [0x1449CD0] - name: segment_0144A000 type: bin start: 0x144A000 # vram: + compress: True + align: 0x1000 + - [0x144ACC0] - name: segment_0144B000 type: bin start: 0x144B000 # vram: + compress: True + align: 0x1000 + - [0x144BE00] - name: segment_0144C000 type: bin start: 0x144C000 # vram: + compress: True + align: 0x1000 + - [0x144CE20] - name: segment_0144D000 type: bin start: 0x144D000 # vram: + compress: True + align: 0x1000 + - [0x144DEA0] - name: segment_0144E000 type: bin start: 0x144E000 # vram: + compress: True + align: 0x1000 + - [0x144F020] - name: segment_01450000 type: bin start: 0x1450000 # vram: + compress: True + align: 0x1000 + - [0x1450F40] - name: segment_01451000 type: bin start: 0x1451000 # vram: + compress: True + align: 0x1000 + - [0x1451F40] - name: segment_01452000 type: bin start: 0x1452000 # vram: + compress: True + align: 0x1000 + - [0x1452F40] - name: segment_01453000 type: bin start: 0x1453000 # vram: + compress: True + align: 0x1000 + - [0x1453DE0] - name: segment_01454000 type: bin start: 0x1454000 # vram: + compress: True + align: 0x1000 + - [0x1454E90] - name: segment_01455000 type: bin start: 0x1455000 # vram: + compress: True + align: 0x1000 + - [0x1455E70] - name: segment_01456000 type: bin start: 0x1456000 # vram: + compress: True + align: 0x1000 + - [0x14570E0] - name: segment_01458000 type: bin start: 0x1458000 # vram: + compress: True + align: 0x1000 + - [0x1458D80] - name: segment_01459000 type: bin start: 0x1459000 # vram: + compress: True + align: 0x1000 + - [0x1459D10] - name: segment_0145A000 type: bin start: 0x145A000 # vram: + compress: True + align: 0x1000 + - [0x145B060] - name: segment_0145C000 type: bin start: 0x145C000 # vram: + compress: True + align: 0x1000 + - [0x145CDB0] - name: segment_0145D000 type: bin start: 0x145D000 # vram: + compress: True + align: 0x1000 + - [0x145DCB0] - name: segment_0145E000 type: bin start: 0x145E000 # vram: + compress: True + align: 0x1000 + - [0x145EF50] - name: segment_0145F000 type: bin start: 0x145F000 # vram: + compress: True + align: 0x1000 + - [0x145FB60] - name: segment_01460000 type: bin start: 0x1460000 # vram: + compress: True + align: 0x1000 + - [0x1460B60] - name: segment_01461000 type: bin start: 0x1461000 # vram: + compress: True + align: 0x1000 + - [0x1461B60] - name: segment_01462000 type: bin start: 0x1462000 # vram: + compress: True + align: 0x1000 + - [0x1462B60] - name: segment_01463000 type: bin start: 0x1463000 # vram: + compress: True + align: 0x1000 + - [0x1463B60] - name: segment_01464000 type: bin start: 0x1464000 # vram: + compress: True + align: 0x1000 + - [0x1464B60] - name: segment_01465000 type: bin start: 0x1465000 # vram: + compress: True + align: 0x1000 + - [0x1465C50] - name: segment_01466000 type: bin start: 0x1466000 # vram: + compress: True + align: 0x1000 + - [0x1466E90] - name: segment_01467000 type: bin start: 0x1467000 # vram: + compress: True + align: 0x1000 + - [0x1467CB0] - name: segment_01468000 type: bin start: 0x1468000 # vram: + compress: True + align: 0x1000 + - [0x1468EC0] - name: segment_01469000 type: bin start: 0x1469000 # vram: + compress: True + align: 0x1000 + - [0x1469C50] - name: segment_0146A000 type: bin start: 0x146A000 # vram: + compress: True + align: 0x1000 + - [0x146AC50] - name: segment_0146B000 type: bin start: 0x146B000 # vram: + compress: True + align: 0x1000 + - [0x146BCA0] - name: segment_0146C000 type: bin start: 0x146C000 # vram: + compress: True + align: 0x1000 + - [0x146CBE0] - name: segment_0146D000 type: bin start: 0x146D000 # vram: + compress: True + align: 0x1000 + - [0x146DD30] - name: segment_0146E000 type: bin start: 0x146E000 # vram: + compress: True + align: 0x1000 + - [0x146EEE0] - name: segment_0146F000 type: bin start: 0x146F000 # vram: + compress: True + align: 0x1000 + - [0x146FF40] - name: segment_01470000 type: bin start: 0x1470000 # vram: + compress: True + align: 0x1000 + - [0x1470E90] - name: segment_01471000 type: bin start: 0x1471000 # vram: + compress: True + align: 0x1000 + - [0x1471E00] - name: segment_01472000 type: bin start: 0x1472000 # vram: + compress: True + align: 0x1000 + - [0x1472B80] - name: segment_01473000 type: bin start: 0x1473000 # vram: + compress: True + align: 0x1000 + - [0x1473D20] - name: segment_01474000 type: bin start: 0x1474000 # vram: + compress: True + align: 0x1000 + - [0x1474EC0] - name: segment_01475000 type: bin start: 0x1475000 # vram: + compress: True + align: 0x1000 + - [0x1475E40] - name: segment_01476000 type: bin start: 0x1476000 # vram: + compress: True + align: 0x1000 + - [0x1476DD0] - name: segment_01477000 type: bin start: 0x1477000 # vram: + compress: True + align: 0x1000 + - [0x1477DA0] - name: segment_01478000 type: bin start: 0x1478000 # vram: + compress: True + align: 0x1000 + - [0x1478D40] - name: segment_01479000 type: bin start: 0x1479000 # vram: + compress: True + align: 0x1000 + - [0x1479FE0] - name: segment_0147A000 type: bin start: 0x147A000 # vram: + compress: True + align: 0x1000 + - [0x147AD80] - name: segment_0147B000 type: bin start: 0x147B000 # vram: + compress: True + align: 0x1000 + - [0x147BC70] - name: segment_0147C000 type: bin start: 0x147C000 # vram: + compress: True + align: 0x1000 + - [0x147CDA0] - name: segment_0147D000 type: bin start: 0x147D000 # vram: + compress: True + align: 0x1000 + - [0x147E120] - name: segment_0147F000 type: bin start: 0x147F000 # vram: + compress: True + align: 0x1000 + - [0x147FDF0] - name: segment_01480000 type: bin start: 0x1480000 # vram: + compress: True + align: 0x1000 + - [0x1480DE0] - name: segment_01481000 type: bin start: 0x1481000 # vram: + compress: True + align: 0x1000 + - [0x1481E90] - name: segment_01482000 type: bin start: 0x1482000 # vram: + compress: True + align: 0x1000 + - [0x1483040] - name: segment_01484000 type: bin start: 0x1484000 # vram: + compress: True + align: 0x1000 + - [0x1485040] - name: segment_01486000 type: bin start: 0x1486000 # vram: + compress: True + align: 0x1000 + - [0x1487040] - name: segment_01488000 type: bin start: 0x1488000 # vram: + compress: True + align: 0x1000 + - [0x1488C70] - name: segment_01489000 type: bin start: 0x1489000 # vram: + compress: True + align: 0x1000 + - [0x1489E10] - name: segment_0148A000 type: bin start: 0x148A000 # vram: + compress: True + align: 0x1000 + - [0x148AEA0] - name: segment_0148B000 type: bin start: 0x148B000 # vram: + compress: True + align: 0x1000 + - [0x148BEA0] - name: segment_0148C000 type: bin start: 0x148C000 # vram: + compress: True + align: 0x1000 + - [0x148CC10] - name: segment_0148D000 type: bin start: 0x148D000 # vram: + compress: True + align: 0x1000 + - [0x148DED0] - name: segment_0148E000 type: bin start: 0x148E000 # vram: + compress: True + align: 0x1000 + - [0x148EE90] - name: segment_0148F000 type: bin start: 0x148F000 # vram: + compress: True + align: 0x1000 + - [0x148FF30] - name: segment_01490000 type: bin start: 0x1490000 # vram: + compress: True + align: 0x1000 + - [0x1490E10] - name: segment_01491000 type: bin start: 0x1491000 # vram: + compress: True + align: 0x1000 + - [0x1491DA0] - name: segment_01492000 type: bin start: 0x1492000 # vram: + compress: True + align: 0x1000 + - [0x1492D10] - name: segment_01493000 type: bin start: 0x1493000 # vram: + compress: True + align: 0x1000 + - [0x1494080] - name: segment_01495000 type: bin start: 0x1495000 # vram: + compress: True + align: 0x1000 + - [0x1495E80] - name: segment_01496000 type: bin start: 0x1496000 # vram: + compress: True + align: 0x1000 + - [0x1496E80] - name: segment_01497000 type: bin start: 0x1497000 # vram: + compress: True + align: 0x1000 + - [0x1497D70] - name: segment_01498000 type: bin start: 0x1498000 # vram: + compress: True + align: 0x1000 + - [0x1498C00] - name: segment_01499000 type: bin start: 0x1499000 # vram: + compress: True + align: 0x1000 + - [0x1499F30] - name: segment_0149A000 type: bin start: 0x149A000 # vram: + compress: True + align: 0x1000 + - [0x149AE90] - name: segment_0149B000 type: bin start: 0x149B000 # vram: + compress: True + align: 0x1000 + - [0x149BFB0] - name: segment_0149C000 type: bin start: 0x149C000 # vram: + compress: True + align: 0x1000 + - [0x149CE80] - name: segment_0149D000 type: bin start: 0x149D000 # vram: + compress: True + align: 0x1000 + - [0x149DC60] - name: segment_0149E000 type: bin start: 0x149E000 # vram: + compress: True + align: 0x1000 + - [0x149EE50] - name: segment_0149F000 type: bin start: 0x149F000 # vram: + compress: True + align: 0x1000 + - [0x149FD80] - name: segment_014A0000 type: bin start: 0x14A0000 # vram: + compress: True + align: 0x1000 + - [0x14A0D80] - name: segment_014A1000 type: bin start: 0x14A1000 # vram: + compress: True + align: 0x1000 + - [0x14A1D80] - name: segment_014A2000 type: bin start: 0x14A2000 # vram: + compress: True + align: 0x1000 + - [0x14A2D30] - name: segment_014A3000 type: bin start: 0x14A3000 # vram: + compress: True + align: 0x1000 + - [0x14A4050] - name: segment_014A5000 type: bin start: 0x14A5000 # vram: + compress: True + align: 0x1000 + - [0x14A59C0] - name: segment_014A6000 type: bin start: 0x14A6000 # vram: + compress: True + align: 0x1000 + - [0x14A6D10] - name: segment_014A7000 type: bin start: 0x14A7000 # vram: + compress: True + align: 0x1000 + - [0x14A7C70] - name: segment_014A8000 type: bin start: 0x14A8000 # vram: + compress: True + align: 0x1000 + - [0x14A9090] - name: segment_014AA000 type: bin start: 0x14AA000 # vram: + compress: True + align: 0x1000 + - [0x14AAEF0] - name: segment_014AB000 type: bin start: 0x14AB000 # vram: + compress: True + align: 0x1000 + - [0x14ABB50] - name: segment_014AC000 type: bin start: 0x14AC000 # vram: + compress: True + align: 0x1000 + - [0x14AD0F0] - name: segment_014AE000 type: bin start: 0x14AE000 # vram: + compress: True + align: 0x1000 + - [0x14AEDD0] - name: segment_014AF000 type: bin start: 0x14AF000 # vram: + compress: True + align: 0x1000 + - [0x14AFCF0] - name: segment_014B0000 type: bin start: 0x14B0000 # vram: + compress: True + align: 0x1000 + - [0x14B0D50] - name: segment_014B1000 type: bin start: 0x14B1000 # vram: + compress: True + align: 0x1000 + - [0x14B1B50] - name: segment_014B2000 type: bin start: 0x14B2000 # vram: + compress: True + align: 0x1000 + - [0x14B2BB0] - name: segment_014B3000 type: bin start: 0x14B3000 # vram: + compress: True + align: 0x1000 + - [0x14B3C70] - name: segment_014B4000 type: bin start: 0x14B4000 # vram: + compress: True + align: 0x1000 + - [0x14B5130] - name: segment_014B6000 type: bin start: 0x14B6000 # vram: + compress: True + align: 0x1000 + - [0x14B6CD0] - name: segment_014B7000 type: bin start: 0x14B7000 # vram: + compress: True + align: 0x1000 + - [0x14B7ED0] - name: segment_014B8000 type: bin start: 0x14B8000 # vram: + compress: True + align: 0x1000 + - [0x14B8EF0] - name: segment_014B9000 type: bin start: 0x14B9000 # vram: + compress: True + align: 0x1000 + - [0x14B9EB0] - name: segment_014BA000 type: bin start: 0x14BA000 # vram: + compress: True + align: 0x1000 + - [0x14BAFE0] - name: segment_014BB000 type: bin start: 0x14BB000 # vram: + compress: True + align: 0x1000 + - [0x14BC000] - name: segment_014BC000 type: bin start: 0x14BC000 # vram: + compress: True + align: 0x1000 + - [0x14BCE20] - name: segment_014BD000 type: bin start: 0x14BD000 # vram: + compress: True + align: 0x1000 + - [0x14BDF40] - name: segment_014BE000 type: bin start: 0x14BE000 # vram: + compress: True + align: 0x1000 + - [0x14BEF60] - name: segment_014BF000 type: bin start: 0x14BF000 # vram: + compress: True + align: 0x1000 + - [0x14BFF30] - name: segment_014C0000 type: bin start: 0x14C0000 # vram: + compress: True + align: 0x1000 + - [0x14C0CE0] - name: segment_014C1000 type: bin start: 0x14C1000 # vram: + compress: True + align: 0x1000 + - [0x14C1E40] - name: segment_014C2000 type: bin start: 0x14C2000 # vram: + compress: True + align: 0x1000 + - [0x14C2F70] - name: segment_014C3000 type: bin start: 0x14C3000 # vram: + compress: True + align: 0x1000 + - [0x14C3DD0] - name: segment_014C4000 type: bin start: 0x14C4000 # vram: + compress: True + align: 0x1000 + - [0x14C4FC0] - name: segment_014C5000 type: bin start: 0x14C5000 # vram: + compress: True + align: 0x1000 + - [0x14C5CC0] - name: segment_014C6000 type: bin start: 0x14C6000 # vram: + compress: True + align: 0x1000 + - [0x14C6B30] - name: segment_014C7000 type: bin start: 0x14C7000 # vram: + compress: True + align: 0x1000 + - [0x14C7D30] - name: segment_014C8000 type: bin start: 0x14C8000 # vram: + compress: True + align: 0x1000 + - [0x14C8D30] - name: segment_014C9000 type: bin start: 0x14C9000 # vram: + compress: True + align: 0x1000 + - [0x14C9AF0] - name: segment_014CA000 type: bin start: 0x14CA000 # vram: + compress: True + align: 0x1000 + - [0x14CAC80] - name: segment_014CB000 type: bin start: 0x14CB000 # vram: + compress: True + align: 0x1000 + - [0x14CBC10] - name: segment_014CC000 type: bin start: 0x14CC000 # vram: + compress: True + align: 0x1000 + - [0x14CCB00] - name: segment_014CD000 type: bin start: 0x14CD000 # vram: + compress: True + align: 0x1000 + - [0x14CE290] - name: segment_014CF000 type: bin start: 0x14CF000 # vram: + compress: True + align: 0x1000 + - [0x14CFCE0] - name: segment_014D0000 type: bin start: 0x14D0000 # vram: + compress: True + align: 0x1000 + - [0x14D0B20] - name: segment_014D1000 type: bin start: 0x14D1000 # vram: + compress: True + align: 0x1000 + - [0x14D1B20] - name: segment_014D2000 type: bin start: 0x14D2000 # vram: + compress: True + align: 0x1000 + - [0x14D2B20] - name: segment_014D3000 type: bin start: 0x14D3000 # vram: + compress: True + align: 0x1000 + - [0x14D3D80] - name: segment_014D4000 type: bin start: 0x14D4000 # vram: + compress: True + align: 0x1000 + - [0x14D4A90] - name: segment_014D5000 type: bin start: 0x14D5000 # vram: + compress: True + align: 0x1000 + - [0x14D5CE0] - name: segment_014D6000 type: bin start: 0x14D6000 # vram: + compress: True + align: 0x1000 + - [0x14D6C70] - name: segment_014D7000 type: bin start: 0x14D7000 # vram: + compress: True + align: 0x1000 + - [0x14D7DD0] - name: segment_014D8000 type: bin start: 0x14D8000 # vram: + compress: True + align: 0x1000 + - [0x14D8CB0] - name: segment_014D9000 type: bin start: 0x14D9000 # vram: + compress: True + align: 0x1000 + - [0x14D9CB0] - name: segment_014DA000 type: bin start: 0x14DA000 # vram: + compress: True + align: 0x1000 + - [0x14DACB0] - name: segment_014DB000 type: bin start: 0x14DB000 # vram: + compress: True + align: 0x1000 + - [0x14DBE30] - name: segment_014DC000 type: bin start: 0x14DC000 # vram: + compress: True + align: 0x1000 + - [0x14DD040] - name: segment_014DE000 type: bin start: 0x14DE000 # vram: + compress: True + align: 0x1000 + - [0x14DF120] - name: segment_014E0000 type: bin start: 0x14E0000 # vram: + compress: True + align: 0x1000 + - [0x14E0AD0] - name: segment_014E1000 type: bin start: 0x14E1000 # vram: + compress: True + align: 0x1000 + - [0x14E1C10] - name: segment_014E2000 type: bin start: 0x14E2000 # vram: + compress: True + align: 0x1000 + - [0x14E2DF0] - name: segment_014E3000 type: bin start: 0x14E3000 # vram: + compress: True + align: 0x1000 + - [0x14E3DD0] - name: segment_014E4000 type: bin start: 0x14E4000 # vram: + compress: True + align: 0x1000 + - [0x14E5050] - name: segment_014E6000 type: bin start: 0x14E6000 # vram: + compress: True + align: 0x1000 + - [0x14E6E50] - name: segment_014E7000 type: bin start: 0x14E7000 # vram: + compress: True + align: 0x1000 + - [0x14E7CF0] - name: segment_014E8000 type: bin start: 0x14E8000 # vram: + compress: True + align: 0x1000 + - [0x14E8CF0] - name: segment_014E9000 type: bin start: 0x14E9000 # vram: + compress: True + align: 0x1000 + - [0x14E9CF0] - name: segment_014EA000 type: bin start: 0x14EA000 # vram: + compress: True + align: 0x1000 + - [0x14EACF0] - name: segment_014EB000 type: bin start: 0x14EB000 # vram: + compress: True + align: 0x1000 + - [0x14EBCF0] - name: segment_014EC000 type: bin start: 0x14EC000 # vram: + compress: True + align: 0x1000 + - [0x14ECCF0] - name: segment_014ED000 type: bin start: 0x14ED000 # vram: + compress: True + align: 0x1000 + - [0x14EDCF0] - name: segment_014EE000 type: bin start: 0x14EE000 # vram: + compress: True + align: 0x1000 + - [0x14EECF0] - name: segment_014EF000 type: bin start: 0x14EF000 # vram: + compress: True + align: 0x1000 + - [0x14EFCF0] - name: segment_014F0000 type: bin start: 0x14F0000 # vram: + compress: True + align: 0x1000 + - [0x14F0CF0] - name: segment_014F1000 type: bin start: 0x14F1000 # vram: + compress: True + align: 0x1000 + - [0x14F1CF0] - name: segment_014F2000 type: bin start: 0x14F2000 # vram: + compress: True + align: 0x1000 + - [0x14F2CF0] - name: segment_014F3000 type: bin start: 0x14F3000 # vram: + compress: True + align: 0x1000 + - [0x14F3CF0] - name: segment_014F4000 type: bin start: 0x14F4000 # vram: + compress: True + align: 0x1000 + - [0x14F4CF0] - name: segment_014F5000 type: bin start: 0x14F5000 # vram: + compress: True + align: 0x1000 + - [0x14F5CF0] - name: segment_014F6000 type: bin start: 0x14F6000 # vram: + compress: True + align: 0x1000 + - [0x14F6BA0] - name: segment_014F7000 type: bin start: 0x14F7000 # vram: + compress: True + align: 0x1000 + - [0x14F7C50] - name: segment_014F8000 type: bin start: 0x14F8000 # vram: + compress: True + align: 0x1000 + - [0x14F8E50] - name: segment_014F9000 type: bin start: 0x14F9000 # vram: + compress: True + align: 0x1000 + - [0x14F9C60] - name: segment_014FA000 type: bin start: 0x14FA000 # vram: + compress: True + align: 0x1000 + - [0x14FB170] - name: segment_014FC000 type: bin start: 0x14FC000 # vram: + compress: True + align: 0x1000 + - [0x14FCE50] - name: segment_014FD000 type: bin start: 0x14FD000 # vram: + compress: True + align: 0x1000 + - [0x14FDE60] - name: segment_014FE000 type: bin start: 0x14FE000 # vram: + compress: True + align: 0x1000 + - [0x14FF290] - name: segment_01500000 type: bin start: 0x1500000 # vram: + compress: True + align: 0x1000 + - [0x1501170] - name: segment_01502000 type: bin start: 0x1502000 # vram: + compress: True + align: 0x1000 + - [0x1502F00] - name: segment_01503000 type: bin start: 0x1503000 # vram: + compress: True + align: 0x1000 + - [0x1503DE0] - name: segment_01504000 type: bin start: 0x1504000 # vram: + compress: True + align: 0x1000 + - [0x1505550] - name: segment_01506000 type: bin start: 0x1506000 # vram: + compress: True + align: 0x1000 + - [0x1507250] - name: segment_01508000 type: bin start: 0x1508000 # vram: + compress: True + align: 0x1000 + - [0x1508E90] - name: segment_01509000 type: bin start: 0x1509000 # vram: + compress: True + align: 0x1000 + - [0x1509C40] - name: segment_0150A000 type: bin start: 0x150A000 # vram: + compress: True + align: 0x1000 + - [0x150ACB0] - name: segment_0150B000 type: bin start: 0x150B000 # vram: + compress: True + align: 0x1000 + - [0x150BAA0] - name: segment_0150C000 type: bin start: 0x150C000 # vram: + compress: True + align: 0x1000 + - [0x150CD00] - name: segment_0150D000 type: bin start: 0x150D000 # vram: + compress: True + align: 0x1000 + - [0x150DE50] - name: segment_0150E000 type: bin start: 0x150E000 # vram: + compress: True + align: 0x1000 + - [0x150E960] - name: segment_0150F000 type: bin start: 0x150F000 # vram: + compress: True + align: 0x1000 + - [0x150FCB0] - name: segment_01510000 type: bin start: 0x1510000 # vram: + compress: True + align: 0x1000 + - [0x1510C80] - name: segment_01511000 type: bin start: 0x1511000 # vram: + compress: True + align: 0x1000 + - [0x1511CA0] - name: segment_01512000 type: bin start: 0x1512000 # vram: + compress: True + align: 0x1000 + - [0x1512CE0] - name: segment_01513000 type: bin start: 0x1513000 # vram: + compress: True + align: 0x1000 + - [0x1513D50] - name: segment_01514000 type: bin start: 0x1514000 # vram: + compress: True + align: 0x1000 + - [0x1514E90] - name: segment_01515000 type: bin start: 0x1515000 # vram: + compress: True + align: 0x1000 + - [0x1515A70] - name: segment_01516000 type: bin start: 0x1516000 # vram: + compress: True + align: 0x1000 + - [0x1516D50] - name: segment_01517000 type: bin start: 0x1517000 # vram: + compress: True + align: 0x1000 + - [0x1517D40] - name: segment_01518000 type: bin start: 0x1518000 # vram: + compress: True + align: 0x1000 + - [0x1518BF0] - name: segment_01519000 type: bin start: 0x1519000 # vram: + compress: True + align: 0x1000 + - [0x1519DB0] - name: segment_0151A000 type: bin start: 0x151A000 # vram: + compress: True + align: 0x1000 + - [0x151AC10] - name: segment_0151B000 type: bin start: 0x151B000 # vram: + compress: True + align: 0x1000 + - [0x151BDC0] - name: segment_0151C000 type: bin start: 0x151C000 # vram: + compress: True + align: 0x1000 + - [0x151CC10] - name: segment_0151D000 type: bin start: 0x151D000 # vram: + compress: True + align: 0x1000 + - [0x151DCC0] - name: segment_0151E000 type: bin start: 0x151E000 # vram: + compress: True + align: 0x1000 + - [0x151EC20] - name: segment_0151F000 type: bin start: 0x151F000 # vram: + compress: True + align: 0x1000 + - [0x151FDD0] - name: segment_01520000 type: bin start: 0x1520000 # vram: + compress: True + align: 0x1000 + - [0x1520CC0] - name: segment_01521000 type: bin start: 0x1521000 # vram: + compress: True + align: 0x1000 + - [0x1521D90] - name: segment_01522000 type: bin start: 0x1522000 # vram: + compress: True + align: 0x1000 + - [0x1522E00] - name: segment_01523000 type: bin start: 0x1523000 # vram: + compress: True + align: 0x1000 + - [0x1523DB0] - name: segment_01524000 type: bin start: 0x1524000 # vram: + compress: True + align: 0x1000 + - [0x1524E00] - name: segment_01525000 type: bin start: 0x1525000 # vram: + compress: True + align: 0x1000 + - [0x1525F20] - name: segment_01526000 type: bin start: 0x1526000 # vram: + compress: True + align: 0x1000 + - [0x1526E90] - name: segment_01527000 type: bin start: 0x1527000 # vram: + compress: True + align: 0x1000 + - [0x1527D70] - name: segment_01528000 type: bin start: 0x1528000 # vram: + compress: True + align: 0x1000 + - [0x1528DB0] - name: segment_01529000 type: bin start: 0x1529000 # vram: + compress: True + align: 0x1000 + - [0x1529D70] - name: segment_0152A000 type: bin start: 0x152A000 # vram: + compress: True + align: 0x1000 + - [0x152AC80] - name: segment_0152B000 type: bin start: 0x152B000 # vram: + compress: True + align: 0x1000 + - [0x152BDF0] - name: segment_0152C000 type: bin start: 0x152C000 # vram: + compress: True + align: 0x1000 + - [0x152CC90] - name: segment_0152D000 type: bin start: 0x152D000 # vram: + compress: True + align: 0x1000 + - [0x152DF40] - name: segment_0152E000 type: bin start: 0x152E000 # vram: + compress: True + align: 0x1000 + - [0x152ECA0] - name: segment_0152F000 type: bin start: 0x152F000 # vram: + compress: True + align: 0x1000 + - [0x152FE60] - name: segment_01530000 type: bin start: 0x1530000 # vram: + compress: True + align: 0x1000 + - [0x1530EB0] - name: segment_01531000 type: bin start: 0x1531000 # vram: + compress: True + align: 0x1000 + - [0x1531CB0] - name: segment_01532000 type: bin start: 0x1532000 # vram: + compress: True + align: 0x1000 + - [0x1532D60] - name: segment_01533000 type: bin start: 0x1533000 # vram: + compress: True + align: 0x1000 + - [0x1533D50] - name: segment_01534000 type: bin start: 0x1534000 # vram: + compress: True + align: 0x1000 + - [0x1534EB0] - name: segment_01535000 type: bin start: 0x1535000 # vram: + compress: True + align: 0x1000 + - [0x1535CA0] - name: segment_01536000 type: bin start: 0x1536000 # vram: + compress: True + align: 0x1000 + - [0x1536F10] - name: segment_01537000 type: bin start: 0x1537000 # vram: + compress: True + align: 0x1000 + - [0x1537C10] - name: segment_01538000 type: bin start: 0x1538000 # vram: + compress: True + align: 0x1000 + - [0x1538EC0] - name: segment_01539000 type: bin start: 0x1539000 # vram: + compress: True + align: 0x1000 + - [0x1539C50] - name: segment_0153A000 type: bin start: 0x153A000 # vram: + compress: True + align: 0x1000 + - [0x153ACB0] - name: segment_0153B000 type: bin start: 0x153B000 # vram: + compress: True + align: 0x1000 + - [0x153C040] - name: segment_0153D000 type: bin start: 0x153D000 # vram: + compress: True + align: 0x1000 + - [0x153DF90] - name: segment_0153E000 type: bin start: 0x153E000 # vram: + compress: True + align: 0x1000 + - [0x153ED50] - name: segment_0153F000 type: bin start: 0x153F000 # vram: + compress: True + align: 0x1000 + - [0x153FCC0] - name: segment_01540000 type: bin start: 0x1540000 # vram: + compress: True + align: 0x1000 + - [0x1540E20] - name: segment_01541000 type: bin start: 0x1541000 # vram: + compress: True + align: 0x1000 + - [0x1541F80] - name: segment_01542000 type: bin start: 0x1542000 # vram: + compress: True + align: 0x1000 + - [0x1542F50] - name: segment_01543000 type: bin start: 0x1543000 # vram: + compress: True + align: 0x1000 + - [0x1543FA0] - name: segment_01544000 type: bin start: 0x1544000 # vram: + compress: True + align: 0x1000 + - [0x1544EB0] - name: segment_01545000 type: bin start: 0x1545000 # vram: + compress: True + align: 0x1000 + - [0x1545EE0] - name: segment_01546000 type: bin start: 0x1546000 # vram: + compress: True + align: 0x1000 + - [0x1546E40] - name: segment_01547000 type: bin start: 0x1547000 # vram: + compress: True + align: 0x1000 + - [0x1547FA0] - name: segment_01548000 type: bin start: 0x1548000 # vram: + compress: True + align: 0x1000 + - [0x1548F90] - name: segment_01549000 type: bin start: 0x1549000 # vram: + compress: True + align: 0x1000 + - [0x1549FB0] - name: segment_0154A000 type: bin start: 0x154A000 # vram: + compress: True + align: 0x1000 + - [0x154AAE0] - name: segment_0154B000 type: bin start: 0x154B000 # vram: + compress: True + align: 0x1000 + - [0x154BAE0] - name: segment_0154C000 type: bin start: 0x154C000 # vram: + compress: True + align: 0x1000 + - [0x154CAE0] - name: segment_0154D000 type: bin start: 0x154D000 # vram: + compress: True + align: 0x1000 + - [0x154DD80] - name: segment_0154E000 type: bin start: 0x154E000 # vram: + compress: True + align: 0x1000 + - [0x154EEF0] - name: segment_0154F000 type: bin start: 0x154F000 # vram: + compress: True + align: 0x1000 + - [0x154FFF0] - name: segment_01550000 type: bin start: 0x1550000 # vram: + compress: True + align: 0x1000 + - [0x1551100] - name: segment_01552000 type: bin start: 0x1552000 # vram: + compress: True + align: 0x1000 + - [0x1552B40] - name: segment_01553000 type: bin start: 0x1553000 # vram: + compress: True + align: 0x1000 + - [0x1553B40] - name: segment_01554000 type: bin start: 0x1554000 # vram: + compress: True + align: 0x1000 + - [0x1554B40] - name: segment_01555000 type: bin start: 0x1555000 # vram: + compress: True + align: 0x1000 + - [0x1555E90] - name: segment_01556000 type: bin start: 0x1556000 # vram: + compress: True + align: 0x1000 + - [0x1556FD0] - name: segment_01557000 type: bin start: 0x1557000 # vram: + compress: True + align: 0x1000 + - [0x1558100] - name: segment_01559000 type: bin start: 0x1559000 # vram: + compress: True + align: 0x1000 + - [0x1559F10] - name: segment_0155A000 type: bin start: 0x155A000 # vram: + compress: True + align: 0x1000 + - [0x155AB80] - name: segment_0155B000 type: bin start: 0x155B000 # vram: + compress: True + align: 0x1000 + - [0x155BD10] - name: segment_0155C000 type: bin start: 0x155C000 # vram: + compress: True + align: 0x1000 + - [0x155CD40] - name: segment_0155D000 type: bin start: 0x155D000 # vram: + compress: True + align: 0x1000 + - [0x155DDF0] - name: segment_0155E000 type: bin start: 0x155E000 # vram: + compress: True + align: 0x1000 + - [0x155EDA0] - name: segment_0155F000 type: bin start: 0x155F000 # vram: + compress: True + align: 0x1000 + - [0x155FFA0] - name: segment_01560000 type: bin start: 0x1560000 # vram: + compress: True + align: 0x1000 + - [0x1560D80] - name: segment_01561000 type: bin start: 0x1561000 # vram: + compress: True + align: 0x1000 + - [0x1561E60] - name: segment_01562000 type: bin start: 0x1562000 # vram: + compress: True + align: 0x1000 + - [0x15628E0] - name: segment_01563000 type: bin start: 0x1563000 # vram: + compress: True + align: 0x1000 + - [0x1563BC0] - name: segment_01564000 type: bin start: 0x1564000 # vram: + compress: True + align: 0x1000 + - [0x1564B30] - name: segment_01565000 type: bin start: 0x1565000 # vram: + compress: True + align: 0x1000 + - [0x1565B30] - name: segment_01566000 type: bin start: 0x1566000 # vram: + compress: True + align: 0x1000 + - [0x1566B30] - name: segment_01567000 type: bin start: 0x1567000 # vram: + compress: True + align: 0x1000 + - [0x1567E90] - name: segment_01568000 type: bin start: 0x1568000 # vram: + compress: True + align: 0x1000 + - [0x1568E20] - name: segment_01569000 type: bin start: 0x1569000 # vram: + compress: True + align: 0x1000 + - [0x1569CD0] - name: segment_0156A000 type: bin start: 0x156A000 # vram: + compress: True + align: 0x1000 + - [0x156AC50] - name: segment_0156B000 type: bin start: 0x156B000 # vram: + compress: True + align: 0x1000 + - [0x156BFF0] - name: segment_0156C000 type: bin start: 0x156C000 # vram: + compress: True + align: 0x1000 + - [0x156CC30] - name: segment_0156D000 type: bin start: 0x156D000 # vram: + compress: True + align: 0x1000 + - [0x156DC30] - name: segment_0156E000 type: bin start: 0x156E000 # vram: + compress: True + align: 0x1000 + - [0x156EB60] - name: segment_0156F000 type: bin start: 0x156F000 # vram: + compress: True + align: 0x1000 + - [0x156FF60] - name: segment_01570000 type: bin start: 0x1570000 # vram: + compress: True + align: 0x1000 + - [0x1570CA0] - name: segment_01571000 type: bin start: 0x1571000 # vram: + compress: True + align: 0x1000 + - [0x1571DE0] - name: segment_01572000 type: bin start: 0x1572000 # vram: + compress: True + align: 0x1000 + - [0x1572D90] - name: segment_01573000 type: bin start: 0x1573000 # vram: + compress: True + align: 0x1000 + - [0x1573DD0] - name: segment_01574000 type: bin start: 0x1574000 # vram: + compress: True + align: 0x1000 + - [0x1574DD0] - name: segment_01575000 type: bin start: 0x1575000 # vram: + compress: True + align: 0x1000 + - [0x1575EC0] - name: segment_01576000 type: bin start: 0x1576000 # vram: + compress: True + align: 0x1000 + - [0x1576DE0] - name: segment_01577000 type: bin start: 0x1577000 # vram: + compress: True + align: 0x1000 + - [0x1577F00] - name: segment_01578000 type: bin start: 0x1578000 # vram: + compress: True + align: 0x1000 + - [0x1578ED0] - name: segment_01579000 type: bin start: 0x1579000 # vram: + compress: True + align: 0x1000 + - [0x1579C80] - name: segment_0157A000 type: bin start: 0x157A000 # vram: + compress: True + align: 0x1000 + - [0x157B180] - name: segment_0157C000 type: bin start: 0x157C000 # vram: + compress: True + align: 0x1000 + - [0x157CAC0] - name: segment_0157D000 type: bin start: 0x157D000 # vram: + compress: True + align: 0x1000 + - [0x157DAF0] - name: segment_0157E000 type: bin start: 0x157E000 # vram: + compress: True + align: 0x1000 + - [0x157EC70] - name: segment_0157F000 type: bin start: 0x157F000 # vram: + compress: True + align: 0x1000 + - [0x157FA50] - name: segment_01580000 type: bin start: 0x1580000 # vram: + compress: True + align: 0x1000 + - [0x1580A50] - name: segment_01581000 type: bin start: 0x1581000 # vram: + compress: True + align: 0x1000 + - [0x1581A50] - name: segment_01582000 type: bin start: 0x1582000 # vram: + compress: True + align: 0x1000 + - [0x1582FA0] - name: segment_01583000 type: bin start: 0x1583000 # vram: + compress: True + align: 0x1000 + - [0x1583BD0] - name: segment_01584000 type: bin start: 0x1584000 # vram: + compress: True + align: 0x1000 + - [0x1584EA0] - name: segment_01585000 type: bin start: 0x1585000 # vram: + compress: True + align: 0x1000 + - [0x15860A0] - name: segment_01587000 type: bin start: 0x1587000 # vram: + compress: True + align: 0x1000 + - [0x1587E90] - name: segment_01588000 type: bin start: 0x1588000 # vram: + compress: True + align: 0x1000 + - [0x1588D40] - name: segment_01589000 type: bin start: 0x1589000 # vram: + compress: True + align: 0x1000 + - [0x1589E90] - name: segment_0158A000 type: bin start: 0x158A000 # vram: + compress: True + align: 0x1000 + - [0x158AE10] - name: segment_0158B000 type: bin start: 0x158B000 # vram: + compress: True + align: 0x1000 + - [0x158BE10] - name: segment_0158C000 type: bin start: 0x158C000 # vram: + compress: True + align: 0x1000 + - [0x158D0B0] - name: segment_0158E000 type: bin start: 0x158E000 # vram: + compress: True + align: 0x1000 + - [0x158F030] - name: segment_01590000 type: bin start: 0x1590000 # vram: + compress: True + align: 0x1000 + - [0x1590B90] - name: segment_01591000 type: bin start: 0x1591000 # vram: + compress: True + align: 0x1000 + - [0x1591D00] - name: segment_01592000 type: bin start: 0x1592000 # vram: + compress: True + align: 0x1000 + - [0x1592A70] - name: segment_01593000 type: bin start: 0x1593000 # vram: + compress: True + align: 0x1000 + - [0x1594020] - name: segment_01595000 type: bin start: 0x1595000 # vram: + compress: True + align: 0x1000 + - [0x1595CD0] - name: segment_01596000 type: bin start: 0x1596000 # vram: + compress: True + align: 0x1000 + - [0x1596E90] - name: segment_01597000 type: bin start: 0x1597000 # vram: + compress: True + align: 0x1000 + - [0x1597E40] - name: segment_01598000 type: bin start: 0x1598000 # vram: + compress: True + align: 0x1000 + - [0x1598E80] - name: segment_01599000 type: bin start: 0x1599000 # vram: + compress: True + align: 0x1000 + - [0x1599FC0] - name: segment_0159A000 type: bin start: 0x159A000 # vram: + compress: True + align: 0x1000 + - [0x159AD40] - name: segment_0159B000 type: bin start: 0x159B000 # vram: + compress: True + align: 0x1000 + - [0x159BD70] - name: segment_0159C000 type: bin start: 0x159C000 # vram: + compress: True + align: 0x1000 + - [0x159CE20] - name: segment_0159D000 type: bin start: 0x159D000 # vram: + compress: True + align: 0x1000 + - [0x159E0B0] - name: segment_0159F000 type: bin start: 0x159F000 # vram: + compress: True + align: 0x1000 + - [0x159FC40] - name: segment_015A0000 type: bin start: 0x15A0000 # vram: + compress: True + align: 0x1000 + - [0x15A0B40] - name: segment_015A1000 type: bin start: 0x15A1000 # vram: + compress: True + align: 0x1000 + - [0x15A1B40] - name: segment_015A2000 type: bin start: 0x15A2000 # vram: + compress: True + align: 0x1000 + - [0x15A2DE0] - name: segment_015A3000 type: bin start: 0x15A3000 # vram: + compress: True + align: 0x1000 + - [0x15A40C0] - name: segment_015A5000 type: bin start: 0x15A5000 # vram: + compress: True + align: 0x1000 + - [0x15A5DD0] - name: segment_015A6000 type: bin start: 0x15A6000 # vram: + compress: True + align: 0x1000 + - [0x15A69C0] - name: segment_015A7000 type: bin start: 0x15A7000 # vram: + compress: True + align: 0x1000 + - [0x15A7E20] - name: segment_015A8000 type: bin start: 0x15A8000 # vram: + compress: True + align: 0x1000 + - [0x15A8E50] - name: segment_015A9000 type: bin start: 0x15A9000 # vram: + compress: True + align: 0x1000 + - [0x15A9DB0] - name: segment_015AA000 type: bin start: 0x15AA000 # vram: + compress: True + align: 0x1000 + - [0x15AB1A0] - name: segment_015AC000 type: bin start: 0x15AC000 # vram: + compress: True + align: 0x1000 + - [0x15ACFD0] - name: segment_015AD000 type: bin start: 0x15AD000 # vram: + compress: True + align: 0x1000 + - [0x15AE000] - name: segment_015AE000 type: bin start: 0x15AE000 # vram: + compress: True + align: 0x1000 + - [0x15AE8C0] - name: segment_015AF000 type: bin start: 0x15AF000 # vram: + compress: True + align: 0x1000 + - [0x15B0010] - name: segment_015B1000 type: bin start: 0x15B1000 # vram: + compress: True + align: 0x1000 + - [0x15B1ED0] - name: segment_015B2000 type: bin start: 0x15B2000 # vram: + compress: True + align: 0x1000 + - [0x15B2E70] - name: segment_015B3000 type: bin start: 0x15B3000 # vram: + compress: True + align: 0x1000 + - [0x15B3EC0] - name: segment_015B4000 type: bin start: 0x15B4000 # vram: + compress: True + align: 0x1000 + - [0x15B4CF0] - name: segment_015B5000 type: bin start: 0x15B5000 # vram: + compress: True + align: 0x1000 + - [0x15B5F60] - name: segment_015B6000 type: bin start: 0x15B6000 # vram: + compress: True + align: 0x1000 + - [0x15B6C40] - name: segment_015B7000 type: bin start: 0x15B7000 # vram: + compress: True + align: 0x1000 + - [0x15B7CA0] - name: segment_015B8000 type: bin start: 0x15B8000 # vram: + compress: True + align: 0x1000 + - [0x15B8E80] - name: segment_015B9000 type: bin start: 0x15B9000 # vram: + compress: True + align: 0x1000 + - [0x15B9DA0] - name: segment_015BA000 type: bin start: 0x15BA000 # vram: + compress: True + align: 0x1000 + - [0x15BADF0] - name: segment_015BB000 type: bin start: 0x15BB000 # vram: + compress: True + align: 0x1000 + - [0x15BBC80] - name: segment_015BC000 type: bin start: 0x15BC000 # vram: + compress: True + align: 0x1000 + - [0x15BCEC0] - name: segment_015BD000 type: bin start: 0x15BD000 # vram: + compress: True + align: 0x1000 + - [0x15BDEB0] - name: segment_015BE000 type: bin start: 0x15BE000 # vram: + compress: True + align: 0x1000 + - [0x15BEDB0] - name: segment_015BF000 type: bin start: 0x15BF000 # vram: + compress: True + align: 0x1000 + - [0x15BFE60] - name: segment_015C0000 type: bin start: 0x15C0000 # vram: + compress: True + align: 0x1000 + - [0x15C0D20] - name: segment_015C1000 type: bin start: 0x15C1000 # vram: + compress: True + align: 0x1000 + - [0x15C1D80] - name: segment_015C2000 type: bin start: 0x15C2000 # vram: + compress: True + align: 0x1000 + - [0x15C2D50] - name: segment_015C3000 type: bin start: 0x15C3000 # vram: + compress: True + align: 0x1000 + - [0x15C3E30] - name: segment_015C4000 type: bin start: 0x15C4000 # vram: + compress: True + align: 0x1000 + - [0x15C4F20] - name: segment_015C5000 type: bin start: 0x15C5000 # vram: + compress: True + align: 0x1000 + - [0x15C5F80] - name: segment_015C6000 type: bin start: 0x15C6000 # vram: + compress: True + align: 0x1000 + - [0x15C71E0] - name: segment_015C8000 type: bin start: 0x15C8000 # vram: + compress: True + align: 0x1000 + - [0x15C9020] - name: segment_015CA000 type: bin start: 0x15CA000 # vram: + compress: True + align: 0x1000 + - [0x15CAFC0] - name: segment_015CB000 type: bin start: 0x15CB000 # vram: + compress: True + align: 0x1000 + - [0x15CC1A0] - name: segment_015CD000 type: bin start: 0x15CD000 # vram: + compress: True + align: 0x1000 + - [0x15CDEB0] - name: segment_015CE000 type: bin start: 0x15CE000 # vram: + compress: True + align: 0x1000 + - [0x15CEF50] - name: segment_015CF000 type: bin start: 0x15CF000 # vram: + compress: True + align: 0x1000 + - [0x15CFF50] - name: segment_015D0000 type: bin start: 0x15D0000 # vram: + compress: True + align: 0x1000 + - [0x15D0F70] - name: segment_015D1000 type: bin start: 0x15D1000 # vram: + compress: True + align: 0x1000 + - [0x15D1F70] - name: segment_015D2000 type: bin start: 0x15D2000 # vram: + compress: True + align: 0x1000 + - [0x15D2CF0] - name: segment_015D3000 type: bin start: 0x15D3000 # vram: + compress: True + align: 0x1000 + - [0x15D3F00] - name: segment_015D4000 type: bin start: 0x15D4000 # vram: + compress: True + align: 0x1000 + - [0x15D5130] - name: segment_015D6000 type: bin start: 0x15D6000 # vram: + compress: True + align: 0x1000 + - [0x15D7140] - name: segment_015D8000 type: bin start: 0x15D8000 # vram: + compress: True + align: 0x1000 + - [0x15D9130] - name: segment_015DA000 type: bin start: 0x15DA000 # vram: + compress: True + align: 0x1000 + - [0x15DB170] - name: segment_015DC000 type: bin start: 0x15DC000 # vram: + compress: True + align: 0x1000 + - [0x15DD1E0] - name: segment_015DE000 type: bin start: 0x15DE000 # vram: + compress: True + align: 0x1000 + - [0x15DF150] - name: segment_015E0000 type: bin start: 0x15E0000 # vram: + compress: True + align: 0x1000 + - [0x15E11F0] - name: segment_015E2000 type: bin start: 0x15E2000 # vram: + compress: True + align: 0x1000 + - [0x15E31F0] - name: segment_015E4000 type: bin start: 0x15E4000 # vram: + compress: True + align: 0x1000 + - [0x15E5190] - name: segment_015E6000 type: bin start: 0x15E6000 # vram: + compress: True + align: 0x1000 + - [0x15E7170] - name: segment_015E8000 type: bin start: 0x15E8000 # vram: + compress: True + align: 0x1000 + - [0x15E91D0] - name: segment_015EA000 type: bin start: 0x15EA000 # vram: + compress: True + align: 0x1000 + - [0x15EB1D0] - name: segment_015EC000 type: bin start: 0x15EC000 # vram: + compress: True + align: 0x1000 + - [0x15ED1E0] - name: segment_015EE000 type: bin start: 0x15EE000 # vram: + compress: True + align: 0x1000 + - [0x15EF1E0] - name: segment_015F0000 type: bin start: 0x15F0000 # vram: + compress: True + align: 0x1000 + - [0x15F1250] - name: segment_015F2000 type: bin start: 0x15F2000 # vram: + compress: True + align: 0x1000 + - [0x15F3170] - name: segment_015F4000 type: bin start: 0x15F4000 # vram: + compress: True + align: 0x1000 + - [0x15F5180] - name: segment_015F6000 type: bin start: 0x15F6000 # vram: + compress: True + align: 0x1000 + - [0x15F7170] - name: segment_015F8000 type: bin start: 0x15F8000 # vram: + compress: True + align: 0x1000 + - [0x15F9370] - name: segment_015FA000 type: bin start: 0x15FA000 # vram: + compress: True + align: 0x1000 + - [0x15FB0D0] - name: segment_015FC000 type: bin start: 0x15FC000 # vram: + compress: True + align: 0x1000 + - [0x15FD0D0] - name: segment_015FE000 type: bin start: 0x15FE000 # vram: + compress: True + align: 0x1000 + - [0x15FF130] - name: segment_01600000 type: bin start: 0x1600000 # vram: + compress: True + align: 0x1000 + - [0x1601190] - name: segment_01602000 type: bin start: 0x1602000 # vram: + compress: True + align: 0x1000 + - [0x1603160] - name: segment_01604000 type: bin start: 0x1604000 # vram: + compress: True + align: 0x1000 + - [0x1605140] - name: segment_01606000 type: bin start: 0x1606000 # vram: + compress: True + align: 0x1000 + - [0x1607140] - name: segment_01608000 type: bin start: 0x1608000 # vram: + compress: True + align: 0x1000 + - [0x1609110] - name: segment_0160A000 type: bin start: 0x160A000 # vram: + compress: True + align: 0x1000 + - [0x160B1E0] - name: segment_0160C000 type: bin start: 0x160C000 # vram: + compress: True + align: 0x1000 + - [0x160D130] - name: segment_0160E000 type: bin start: 0x160E000 # vram: + compress: True + align: 0x1000 + - [0x160F110] - name: segment_01610000 type: bin start: 0x1610000 # vram: + compress: True + align: 0x1000 + - [0x1611140] - name: segment_01612000 type: bin start: 0x1612000 # vram: + compress: True + align: 0x1000 + - [0x1613140] - name: segment_01614000 type: bin start: 0x1614000 # vram: + compress: True + align: 0x1000 + - [0x1615160] - name: segment_01616000 type: bin start: 0x1616000 # vram: + compress: True + align: 0x1000 + - [0x1617190] - name: segment_01618000 type: bin start: 0x1618000 # vram: + compress: True + align: 0x1000 + - [0x1619120] - name: segment_0161A000 type: bin start: 0x161A000 # vram: + compress: True + align: 0x1000 + - [0x161B130] - name: segment_0161C000 type: bin start: 0x161C000 # vram: + compress: True + align: 0x1000 + - [0x161D1D0] - name: segment_0161E000 type: bin start: 0x161E000 # vram: + compress: True + align: 0x1000 + - [0x161F1D0] - name: segment_01620000 type: bin start: 0x1620000 # vram: + compress: True + align: 0x1000 + - [0x16211E0] - name: segment_01622000 type: bin start: 0x1622000 # vram: + compress: True + align: 0x1000 + - [0x16231E0] - name: segment_01624000 type: bin start: 0x1624000 # vram: + compress: True + align: 0x1000 + - [0x16251D0] - name: segment_01626000 type: bin start: 0x1626000 # vram: + compress: True + align: 0x1000 + - [0x1627180] - name: segment_01628000 type: bin start: 0x1628000 # vram: + compress: True + align: 0x1000 + - [0x1629140] - name: segment_0162A000 type: bin start: 0x162A000 # vram: + compress: True + align: 0x1000 + - [0x162B160] - name: segment_0162C000 type: bin start: 0x162C000 # vram: + compress: True + align: 0x1000 + - [0x162D140] - name: segment_0162E000 type: bin start: 0x162E000 # vram: + compress: True + align: 0x1000 + - [0x162F140] - name: segment_01630000 type: bin start: 0x1630000 # vram: + compress: True + align: 0x1000 + - [0x1631210] - name: segment_01632000 type: bin start: 0x1632000 # vram: + compress: True + align: 0x1000 + - [0x16332A0] - name: segment_01634000 type: bin start: 0x1634000 # vram: + compress: True + align: 0x1000 + - [0x1635290] - name: segment_01636000 type: bin start: 0x1636000 # vram: + compress: True + align: 0x1000 + - [0x1637240] - name: segment_01638000 type: bin start: 0x1638000 # vram: + compress: True + align: 0x1000 + - [0x1639270] - name: segment_0163A000 type: bin start: 0x163A000 # vram: + compress: True + align: 0x1000 + - [0x163B160] - name: segment_0163C000 type: bin start: 0x163C000 # vram: + compress: True + align: 0x1000 + - [0x163D160] - name: segment_0163E000 type: bin start: 0x163E000 # vram: + compress: True + align: 0x1000 + - [0x163F140] - name: segment_01640000 type: bin start: 0x1640000 # vram: + compress: True + align: 0x1000 + - [0x16411B0] - name: segment_01642000 type: bin start: 0x1642000 # vram: + compress: True + align: 0x1000 + - [0x16431B0] - name: segment_01644000 type: bin start: 0x1644000 # vram: + compress: True + align: 0x1000 + - [0x16451C0] - name: segment_01646000 type: bin start: 0x1646000 # vram: + compress: True + align: 0x1000 + - [0x1647160] - name: segment_01648000 type: bin start: 0x1648000 # vram: + compress: True + align: 0x1000 + - [0x16491E0] - name: segment_0164A000 type: bin start: 0x164A000 # vram: + compress: True + align: 0x1000 + - [0x164B240] - name: segment_0164C000 type: bin start: 0x164C000 # vram: + compress: True + align: 0x1000 + - [0x164D270] - name: segment_0164E000 type: bin start: 0x164E000 # vram: + compress: True + align: 0x1000 + - [0x164F1C0] - name: segment_01650000 type: bin start: 0x1650000 # vram: + compress: True + align: 0x1000 + - [0x16511C0] - name: segment_01652000 type: bin start: 0x1652000 # vram: + compress: True + align: 0x1000 + - [0x16531C0] - name: segment_01654000 type: bin start: 0x1654000 # vram: + compress: True + align: 0x1000 + - [0x16551B0] - name: segment_01656000 type: bin start: 0x1656000 # vram: + compress: True + align: 0x1000 + - [0x16571C0] - name: segment_01658000 type: bin start: 0x1658000 # vram: + compress: True + align: 0x1000 + - [0x16591E0] - name: segment_0165A000 type: bin start: 0x165A000 # vram: + compress: True + align: 0x1000 + - [0x165B190] - name: segment_0165C000 type: bin start: 0x165C000 # vram: + compress: True + align: 0x1000 + - [0x165D1B0] - name: segment_0165E000 type: bin start: 0x165E000 # vram: + compress: True + align: 0x1000 + - [0x165F190] - name: segment_01660000 type: bin start: 0x1660000 # vram: + compress: True + align: 0x1000 + - [0x1661190] - name: segment_01662000 type: bin start: 0x1662000 # vram: + compress: True + align: 0x1000 + - [0x1663350] - name: segment_01664000 type: bin start: 0x1664000 # vram: + compress: True + align: 0x1000 + - [0x1665230] - name: segment_01666000 type: bin start: 0x1666000 # vram: + compress: True + align: 0x1000 + - [0x1667230] - name: segment_01668000 type: bin start: 0x1668000 # vram: + compress: True + align: 0x1000 + - [0x1669230] - name: segment_0166A000 type: bin start: 0x166A000 # vram: + compress: True + align: 0x1000 + - [0x166B1C0] - name: segment_0166C000 type: bin start: 0x166C000 # vram: + compress: True + align: 0x1000 + - [0x166D2E0] - name: segment_0166E000 type: bin start: 0x166E000 # vram: + compress: True + align: 0x1000 + - [0x166F1A0] - name: segment_01670000 type: bin start: 0x1670000 # vram: + compress: True + align: 0x1000 + - [0x1671340] - name: segment_01672000 type: bin start: 0x1672000 # vram: + compress: True + align: 0x1000 + - [0x1673140] - name: segment_01674000 type: bin start: 0x1674000 # vram: + compress: True + align: 0x1000 + - [0x1675140] - name: segment_01676000 type: bin start: 0x1676000 # vram: + compress: True + align: 0x1000 + - [0x1677140] - name: segment_01678000 type: bin start: 0x1678000 # vram: + compress: True + align: 0x1000 + - [0x16791C0] - name: segment_0167A000 type: bin start: 0x167A000 # vram: + compress: True + align: 0x1000 + - [0x167B190] - name: segment_0167C000 type: bin start: 0x167C000 # vram: + compress: True + align: 0x1000 + - [0x167D170] - name: segment_0167E000 type: bin start: 0x167E000 # vram: + compress: True + align: 0x1000 + - [0x167F140] - name: segment_01680000 type: bin start: 0x1680000 # vram: + compress: True + align: 0x1000 + - [0x1681120] - name: segment_01682000 type: bin start: 0x1682000 # vram: + compress: True + align: 0x1000 + - [0x1683170] - name: segment_01684000 type: bin start: 0x1684000 # vram: + compress: True + align: 0x1000 + - [0x1685170] - name: segment_01686000 type: bin start: 0x1686000 # vram: + compress: True + align: 0x1000 + - [0x16871B0] - name: segment_01688000 type: bin start: 0x1688000 # vram: + compress: True + align: 0x1000 + - [0x16891E0] - name: segment_0168A000 type: bin start: 0x168A000 # vram: + compress: True + align: 0x1000 + - [0x168B220] - name: segment_0168C000 type: bin start: 0x168C000 # vram: + compress: True + align: 0x1000 + - [0x168D220] - name: segment_0168E000 type: bin start: 0x168E000 # vram: + compress: True + align: 0x1000 + - [0x168F1C0] - name: segment_01690000 type: bin start: 0x1690000 # vram: + compress: True + align: 0x1000 + - [0x16911B0] - name: segment_01692000 type: bin start: 0x1692000 # vram: + compress: True + align: 0x1000 + - [0x16931C0] - name: segment_01694000 type: bin start: 0x1694000 # vram: + compress: True + align: 0x1000 + - [0x16951A0] - name: segment_01696000 type: bin start: 0x1696000 # vram: + compress: True + align: 0x1000 + - [0x1697160] - name: segment_01698000 type: bin start: 0x1698000 # vram: + compress: True + align: 0x1000 + - [0x1699150] - name: segment_0169A000 type: bin start: 0x169A000 # vram: + compress: True + align: 0x1000 + - [0x169B160] - name: segment_0169C000 type: bin start: 0x169C000 # vram: + compress: True + align: 0x1000 + - [0x169D190] - name: segment_0169E000 type: bin start: 0x169E000 # vram: + compress: True + align: 0x1000 + - [0x169F1B0] - name: segment_016A0000 type: bin start: 0x16A0000 # vram: + compress: True + align: 0x1000 + - [0x16A11B0] - name: segment_016A2000 type: bin start: 0x16A2000 # vram: + compress: True + align: 0x1000 + - [0x16A31B0] - name: segment_016A4000 type: bin start: 0x16A4000 # vram: + compress: True + align: 0x1000 + - [0x16A5130] - name: segment_016A6000 type: bin start: 0x16A6000 # vram: + compress: True + align: 0x1000 + - [0x16A7120] - name: segment_016A8000 type: bin start: 0x16A8000 # vram: + compress: True + align: 0x1000 + - [0x16A9170] - name: segment_016AA000 type: bin start: 0x16AA000 # vram: + compress: True + align: 0x1000 + - [0x16AB160] - name: segment_016AC000 type: bin start: 0x16AC000 # vram: + compress: True + align: 0x1000 + - [0x16AD0D0] - name: segment_016AE000 type: bin start: 0x16AE000 # vram: + compress: True + align: 0x1000 + - [0x16AF140] - name: segment_016B0000 type: bin start: 0x16B0000 # vram: + compress: True + align: 0x1000 + - [0x16B10E0] - name: segment_016B2000 type: bin start: 0x16B2000 # vram: + compress: True + align: 0x1000 + - [0x16B30D0] - name: segment_016B4000 type: bin start: 0x16B4000 # vram: + compress: True + align: 0x1000 + - [0x16B5210] - name: segment_016B6000 type: bin start: 0x16B6000 # vram: + compress: True + align: 0x1000 + - [0x16B7230] - name: segment_016B8000 type: bin start: 0x16B8000 # vram: + compress: True + align: 0x1000 + - [0x16B9230] - name: segment_016BA000 type: bin start: 0x16BA000 # vram: + compress: True + align: 0x1000 + - [0x16BB1E0] - name: segment_016BC000 type: bin start: 0x16BC000 # vram: + compress: True + align: 0x1000 + - [0x16BD210] - name: segment_016BE000 type: bin start: 0x16BE000 # vram: + compress: True + align: 0x1000 + - [0x16BF220] - name: segment_016C0000 type: bin start: 0x16C0000 # vram: + compress: True + align: 0x1000 + - [0x16C11C0] - name: segment_016C2000 type: bin start: 0x16C2000 # vram: + compress: True + align: 0x1000 + - [0x16C31D0] - name: segment_016C4000 type: bin start: 0x16C4000 # vram: + compress: True + align: 0x1000 + - [0x16C5210] - name: segment_016C6000 type: bin start: 0x16C6000 # vram: + compress: True + align: 0x1000 + - [0x16C7150] - name: segment_016C8000 type: bin start: 0x16C8000 # vram: + compress: True + align: 0x1000 + - [0x16C9170] - name: segment_016CA000 type: bin start: 0x16CA000 # vram: + compress: True + align: 0x1000 + - [0x16CB170] - name: segment_016CC000 type: bin start: 0x16CC000 # vram: + compress: True + align: 0x1000 + - [0x16CD1E0] - name: segment_016CE000 type: bin start: 0x16CE000 # vram: + compress: True + align: 0x1000 + - [0x16CF200] - name: segment_016D0000 type: bin start: 0x16D0000 # vram: + compress: True + align: 0x1000 + - [0x16D1280] - name: segment_016D2000 type: bin start: 0x16D2000 # vram: + compress: True + align: 0x1000 + - [0x16D2E90] - name: segment_016D3000 type: bin start: 0x16D3000 # vram: + compress: True + align: 0x1000 + - [0x16D3B30] - name: segment_016D4000 type: bin start: 0x16D4000 # vram: + compress: True + align: 0x1000 + - [0x16D4D20] - name: segment_016D5000 type: bin start: 0x16D5000 # vram: + compress: True + align: 0x1000 + - [0x16D5E80] - name: segment_016D6000 type: bin start: 0x16D6000 # vram: + compress: True + align: 0x1000 + - [0x16D6E80] - name: segment_016D7000 type: bin start: 0x16D7000 # vram: + compress: True + align: 0x1000 + - [0x16D7E80] - name: segment_016D8000 type: bin start: 0x16D8000 # vram: + compress: True + align: 0x1000 + - [0x16D8E80] - name: segment_016D9000 type: bin start: 0x16D9000 # vram: + compress: True + align: 0x1000 + - [0x16D9E80] - name: segment_016DA000 type: bin start: 0x16DA000 # vram: + compress: True + align: 0x1000 + - [0x16DAE80] - name: segment_016DB000 type: bin start: 0x16DB000 # vram: + compress: True + align: 0x1000 + - [0x16DBE60] - name: segment_016DC000 type: bin start: 0x16DC000 # vram: + compress: True + align: 0x1000 + - [0x16DCE70] - name: segment_016DD000 type: bin start: 0x16DD000 # vram: + compress: True + align: 0x1000 + - [0x16DDD30] - name: segment_016DE000 type: bin start: 0x16DE000 # vram: + compress: True + align: 0x1000 + - [0x16DF070] - name: segment_016E0000 type: bin start: 0x16E0000 # vram: + compress: True + align: 0x1000 + - [0x16E10D0] - name: segment_016E2000 type: bin start: 0x16E2000 # vram: + compress: True + align: 0x1000 + - [0x16E30D0] - name: segment_016E4000 type: bin start: 0x16E4000 # vram: + compress: True + align: 0x1000 + - [0x16E50D0] - name: segment_016E6000 type: bin start: 0x16E6000 # vram: + compress: True + align: 0x1000 + - [0x16E7270] - name: segment_016E8000 type: bin start: 0x16E8000 # vram: + compress: True + align: 0x1000 + - [0x16E9370] - name: segment_016EA000 type: bin start: 0x16EA000 # vram: + compress: True + align: 0x1000 + - [0x16EB250] - name: segment_016EC000 type: bin start: 0x16EC000 # vram: + compress: True + align: 0x1000 + - [0x16ED1B0] - name: segment_016EE000 type: bin start: 0x16EE000 # vram: + compress: True + align: 0x1000 + - [0x16EF100] - name: segment_016F0000 type: bin start: 0x16F0000 # vram: + compress: True + align: 0x1000 + - [0x16F1100] - name: segment_016F2000 type: bin start: 0x16F2000 # vram: + compress: True + align: 0x1000 + - [0x16F3100] - name: segment_016F4000 type: bin start: 0x16F4000 # vram: + compress: True + align: 0x1000 + - [0x16F50F0] - name: segment_016F6000 type: bin start: 0x16F6000 # vram: + compress: True + align: 0x1000 + - [0x16F71C0] - name: segment_016F8000 type: bin start: 0x16F8000 # vram: + compress: True + align: 0x1000 + - [0x16F91D0] - name: segment_016FA000 type: bin start: 0x16FA000 # vram: + compress: True + align: 0x1000 + - [0x16FB190] - name: segment_016FC000 type: bin start: 0x16FC000 # vram: + compress: True + align: 0x1000 + - [0x16FD150] - name: segment_016FE000 type: bin start: 0x16FE000 # vram: + compress: True + align: 0x1000 + - [0x16FF1E0] - name: segment_01700000 type: bin start: 0x1700000 # vram: + compress: True + align: 0x1000 + - [0x1701160] - name: segment_01702000 type: bin start: 0x1702000 # vram: + compress: True + align: 0x1000 + - [0x1702FA0] - name: segment_01703000 type: bin start: 0x1703000 # vram: + compress: True + align: 0x1000 + - [0x1703F10] - name: segment_01704000 type: bin start: 0x1704000 # vram: + compress: True + align: 0x1000 + - [0x1704FB0] - name: segment_01705000 type: bin start: 0x1705000 # vram: + compress: True + align: 0x1000 + - [0x1705FC0] - name: segment_01706000 type: bin start: 0x1706000 # vram: + compress: True + align: 0x1000 + - [0x1707050] - name: segment_01708000 type: bin start: 0x1708000 # vram: + compress: True + align: 0x1000 + - [0x1709000] - name: segment_01709000 type: bin start: 0x1709000 # vram: + compress: True + align: 0x1000 + - [0x170A000] - name: segment_0170A000 type: bin start: 0x170A000 # vram: + compress: True + align: 0x1000 + - [0x170AFA0] - name: segment_0170B000 type: bin start: 0x170B000 # vram: + compress: True + align: 0x1000 + - [0x170C050] - name: segment_0170D000 type: bin start: 0x170D000 # vram: + compress: True + align: 0x1000 + - [0x170E140] - name: segment_0170F000 type: bin start: 0x170F000 # vram: + compress: True + align: 0x1000 + - [0x170FFE0] - name: segment_01710000 type: bin start: 0x1710000 # vram: + compress: True + align: 0x1000 + - [0x1710FC0] - name: segment_01711000 type: bin start: 0x1711000 # vram: + compress: True + align: 0x1000 + - [0x1711FF0] - name: segment_01712000 type: bin start: 0x1712000 # vram: + compress: True + align: 0x1000 + - [0x1712F10] - name: segment_01713000 type: bin start: 0x1713000 # vram: + compress: True + align: 0x1000 + - [0x1713E70] - name: segment_01714000 type: bin start: 0x1714000 # vram: + compress: True + align: 0x1000 + - [0x1714EB0] - name: segment_01715000 type: bin start: 0x1715000 # vram: + compress: True + align: 0x1000 + - [0x1715E00] - name: segment_01716000 type: bin start: 0x1716000 # vram: + compress: True + align: 0x1000 + - [0x1716ED0] - name: segment_01717000 type: bin start: 0x1717000 # vram: + compress: True + align: 0x1000 + - [0x1717EE0] - name: segment_01718000 type: bin start: 0x1718000 # vram: + compress: True + align: 0x1000 + - [0x1718F50] - name: segment_01719000 type: bin start: 0x1719000 # vram: + compress: True + align: 0x1000 + - [0x1719F30] - name: segment_0171A000 type: bin start: 0x171A000 # vram: + compress: True + align: 0x1000 + - [0x171AE70] - name: segment_0171B000 type: bin start: 0x171B000 # vram: + compress: True + align: 0x1000 + - [0x171BE50] - name: segment_0171C000 type: bin start: 0x171C000 # vram: + compress: True + align: 0x1000 + - [0x171CF20] - name: segment_0171D000 type: bin start: 0x171D000 # vram: + compress: True + align: 0x1000 + - [0x171DF30] - name: segment_0171E000 type: bin start: 0x171E000 # vram: + compress: True + align: 0x1000 + - [0x171EE70] - name: segment_0171F000 type: bin start: 0x171F000 # vram: + compress: True + align: 0x1000 + - [0x171FFA0] - name: segment_01720000 type: bin start: 0x1720000 # vram: + compress: True + align: 0x1000 + - [0x1720F30] - name: segment_01721000 type: bin start: 0x1721000 # vram: + compress: True + align: 0x1000 + - [0x1721E70] - name: segment_01722000 type: bin start: 0x1722000 # vram: + compress: True + align: 0x1000 + - [0x1722F30] - name: segment_01723000 type: bin start: 0x1723000 # vram: + compress: True + align: 0x1000 + - [0x1723F30] - name: segment_01724000 type: bin start: 0x1724000 # vram: + compress: True + align: 0x1000 + - [0x1724E70] - name: segment_01725000 type: bin start: 0x1725000 # vram: + compress: True + align: 0x1000 + - [0x1725E50] - name: segment_01726000 type: bin start: 0x1726000 # vram: + compress: True + align: 0x1000 + - [0x1726F40] - name: segment_01727000 type: bin start: 0x1727000 # vram: + compress: True + align: 0x1000 + - [0x1727E60] - name: segment_01728000 type: bin start: 0x1728000 # vram: + compress: True + align: 0x1000 + - [0x1728E50] - name: segment_01729000 type: bin start: 0x1729000 # vram: + compress: True + align: 0x1000 + - [0x1729F00] - name: segment_0172A000 type: bin start: 0x172A000 # vram: + compress: True + align: 0x1000 + - [0x172AF60] - name: segment_0172B000 type: bin start: 0x172B000 # vram: + compress: True + align: 0x1000 + - [0x172BE50] - name: segment_0172C000 type: bin start: 0x172C000 # vram: + compress: True + align: 0x1000 + - [0x172CE60] - name: segment_0172D000 type: bin start: 0x172D000 # vram: + compress: True + align: 0x1000 + - [0x172DEE0] - name: segment_0172E000 type: bin start: 0x172E000 # vram: + compress: True + align: 0x1000 + - [0x172EF40] - name: segment_0172F000 type: bin start: 0x172F000 # vram: + compress: True + align: 0x1000 + - [0x172FF40] - name: segment_01730000 type: bin start: 0x1730000 # vram: + compress: True + align: 0x1000 + - [0x1730E60] - name: segment_01731000 type: bin start: 0x1731000 # vram: + compress: True + align: 0x1000 + - [0x1731F40] - name: segment_01732000 type: bin start: 0x1732000 # vram: + compress: True + align: 0x1000 + - [0x1732D60] - name: segment_01733000 type: bin start: 0x1733000 # vram: + compress: True + align: 0x1000 + - [0x1733E70] - name: segment_01734000 type: bin start: 0x1734000 # vram: + compress: True + align: 0x1000 + - [0x1734CC0] - name: segment_01735000 type: bin start: 0x1735000 # vram: + compress: True + align: 0x1000 + - [0x1735C20] - name: segment_01736000 type: bin start: 0x1736000 # vram: + compress: True + align: 0x1000 + - [0x1736C00] - name: segment_01737000 type: bin start: 0x1737000 # vram: + compress: True + align: 0x1000 + - [0x17380F0] - name: segment_01739000 type: bin start: 0x1739000 # vram: + compress: True + align: 0x1000 + - [0x1739F30] - name: segment_0173A000 type: bin start: 0x173A000 # vram: + compress: True + align: 0x1000 + - [0x173AD10] - name: segment_0173B000 type: bin start: 0x173B000 # vram: + compress: True + align: 0x1000 + - [0x173BDF0] - name: segment_0173C000 type: bin start: 0x173C000 # vram: + compress: True + align: 0x1000 + - [0x173CDD0] - name: segment_0173D000 type: bin start: 0x173D000 # vram: + compress: True + align: 0x1000 + - [0x173DDF0] - name: segment_0173E000 type: bin start: 0x173E000 # vram: + compress: True + align: 0x1000 + - [0x173F0B0] - name: segment_01740000 type: bin start: 0x1740000 # vram: + compress: True + align: 0x1000 + - [0x1740F20] - name: segment_01741000 type: bin start: 0x1741000 # vram: + compress: True + align: 0x1000 + - [0x1741F70] - name: segment_01742000 type: bin start: 0x1742000 # vram: + compress: True + align: 0x1000 + - [0x1742E90] - name: segment_01743000 type: bin start: 0x1743000 # vram: + compress: True + align: 0x1000 + - [0x1743E20] - name: segment_01744000 type: bin start: 0x1744000 # vram: + compress: True + align: 0x1000 + - [0x1745010] - name: segment_01746000 type: bin start: 0x1746000 # vram: + compress: True + align: 0x1000 + - [0x1746D00] - name: segment_01747000 type: bin start: 0x1747000 # vram: + compress: True + align: 0x1000 + - [0x1747FA0] - name: segment_01748000 type: bin start: 0x1748000 # vram: + compress: True + align: 0x1000 + - [0x1748CA0] - name: segment_01749000 type: bin start: 0x1749000 # vram: + compress: True + align: 0x1000 + - [0x1749B50] - name: segment_0174A000 type: bin start: 0x174A000 # vram: + compress: True + align: 0x1000 + - [0x174AD90] - name: segment_0174B000 type: bin start: 0x174B000 # vram: + compress: True + align: 0x1000 + - [0x174BE80] - name: segment_0174C000 type: bin start: 0x174C000 # vram: + compress: True + align: 0x1000 + - [0x174CDB0] - name: segment_0174D000 type: bin start: 0x174D000 # vram: + compress: True + align: 0x1000 + - [0x174DDA0] - name: segment_0174E000 type: bin start: 0x174E000 # vram: + compress: True + align: 0x1000 + - [0x174EE30] - name: segment_0174F000 type: bin start: 0x174F000 # vram: + compress: True + align: 0x1000 + - [0x1750070] - name: segment_01751000 type: bin start: 0x1751000 # vram: + compress: True + align: 0x1000 + - [0x1751F40] - name: segment_01752000 type: bin start: 0x1752000 # vram: + compress: True + align: 0x1000 + - [0x17530A0] - name: segment_01754000 type: bin start: 0x1754000 # vram: + compress: True + align: 0x1000 + - [0x1754BD0] - name: segment_01755000 type: bin start: 0x1755000 # vram: + compress: True + align: 0x1000 + - [0x1755BD0] - name: segment_01756000 type: bin start: 0x1756000 # vram: + compress: True + align: 0x1000 + - [0x1756B50] - name: segment_01757000 type: bin start: 0x1757000 # vram: + compress: True + align: 0x1000 + - [0x1757CF0] - name: segment_01758000 type: bin start: 0x1758000 # vram: + compress: True + align: 0x1000 + - [0x1758CA0] - name: segment_01759000 type: bin start: 0x1759000 # vram: + compress: True + align: 0x1000 + - [0x1759D20] - name: segment_0175A000 type: bin start: 0x175A000 # vram: + compress: True + align: 0x1000 + - [0x175AC30] - name: segment_0175B000 type: bin start: 0x175B000 # vram: + compress: True + align: 0x1000 + - [0x175BC30] - name: segment_0175C000 type: bin start: 0x175C000 # vram: + compress: True + align: 0x1000 + - [0x175CC60] - name: segment_0175D000 type: bin start: 0x175D000 # vram: + compress: True + align: 0x1000 + - [0x175DC60] - name: segment_0175E000 type: bin start: 0x175E000 # vram: + compress: True + align: 0x1000 + - [0x175EC10] - name: segment_0175F000 type: bin start: 0x175F000 # vram: + compress: True + align: 0x1000 + - [0x175FC10] - name: segment_01760000 type: bin start: 0x1760000 # vram: + compress: True + align: 0x1000 + - [0x1760D90] - name: segment_01761000 type: bin start: 0x1761000 # vram: + compress: True + align: 0x1000 + - [0x1761D90] - name: segment_01762000 type: bin start: 0x1762000 # vram: + compress: True + align: 0x1000 + - [0x1762D60] - name: segment_01763000 type: bin start: 0x1763000 # vram: + compress: True + align: 0x1000 + - [0x1763D70] - name: segment_01764000 type: bin start: 0x1764000 # vram: + compress: True + align: 0x1000 + - [0x1764BC0] - name: segment_01765000 type: bin start: 0x1765000 # vram: + compress: True + align: 0x1000 + - [0x1765BC0] - name: segment_01766000 type: bin start: 0x1766000 # vram: + compress: True + align: 0x1000 + - [0x1766E40] - name: segment_01767000 type: bin start: 0x1767000 # vram: + compress: True + align: 0x1000 + - [0x17680D0] - name: segment_01769000 type: bin start: 0x1769000 # vram: + compress: True + align: 0x1000 + - [0x1769D20] - name: segment_0176A000 type: bin start: 0x176A000 # vram: + compress: True + align: 0x1000 + - [0x176B2D0] - name: segment_0176C000 type: bin start: 0x176C000 # vram: + compress: True + align: 0x1000 + - [0x176CED0] - name: segment_0176D000 type: bin start: 0x176D000 # vram: + compress: True + align: 0x1000 + - [0x176DB70] - name: segment_0176E000 type: bin start: 0x176E000 # vram: + compress: True + align: 0x1000 + - [0x176EF80] - name: segment_0176F000 type: bin start: 0x176F000 # vram: + compress: True + align: 0x1000 + - [0x176FC50] - name: segment_01770000 type: bin start: 0x1770000 # vram: + compress: True + align: 0x1000 + - [0x1770B50] - name: segment_01771000 type: bin start: 0x1771000 # vram: + compress: True + align: 0x1000 + - [0x1771CE0] - name: segment_01772000 type: bin start: 0x1772000 # vram: + compress: True + align: 0x1000 + - [0x17729E0] - name: segment_01773000 type: bin start: 0x1773000 # vram: + compress: True + align: 0x1000 + - [0x1773D00] - name: segment_01774000 type: bin start: 0x1774000 # vram: + compress: True + align: 0x1000 + - [0x1774D00] - name: segment_01775000 type: bin start: 0x1775000 # vram: + compress: True + align: 0x1000 + - [0x1775FF0] - name: segment_01776000 type: bin start: 0x1776000 # vram: + compress: True + align: 0x1000 + - [0x1776F70] - name: segment_01777000 type: bin start: 0x1777000 # vram: + compress: True + align: 0x1000 + - [0x17781B0] - name: segment_01779000 type: bin start: 0x1779000 # vram: + compress: True + align: 0x1000 + - [0x1779D00] - name: segment_0177A000 type: bin start: 0x177A000 # vram: + compress: True + align: 0x1000 + - [0x177AC00] - name: segment_0177B000 type: bin start: 0x177B000 # vram: + compress: True + align: 0x1000 + - [0x177BE50] - name: segment_0177C000 type: bin start: 0x177C000 # vram: + compress: True + align: 0x1000 + - [0x177CCB0] - name: segment_0177D000 type: bin start: 0x177D000 # vram: + compress: True + align: 0x1000 + - [0x177DBA0] - name: segment_0177E000 type: bin start: 0x177E000 # vram: + compress: True + align: 0x1000 + - [0x177EEF0] - name: segment_0177F000 type: bin start: 0x177F000 # vram: + compress: True + align: 0x1000 + - [0x177FC80] - name: segment_01780000 type: bin start: 0x1780000 # vram: + compress: True + align: 0x1000 + - [0x1780CD0] - name: segment_01781000 type: bin start: 0x1781000 # vram: + compress: True + align: 0x1000 + - [0x1781E70] - name: segment_01782000 type: bin start: 0x1782000 # vram: + compress: True + align: 0x1000 + - [0x1782C30] - name: segment_01783000 type: bin start: 0x1783000 # vram: + compress: True + align: 0x1000 + - [0x1783D70] - name: segment_01784000 type: bin start: 0x1784000 # vram: + compress: True + align: 0x1000 + - [0x1784F30] - name: segment_01785000 type: bin start: 0x1785000 # vram: + compress: True + align: 0x1000 + - [0x1785EC0] - name: segment_01786000 type: bin start: 0x1786000 # vram: + compress: True + align: 0x1000 + - [0x1786BD0] - name: segment_01787000 type: bin start: 0x1787000 # vram: + compress: True + align: 0x1000 + - [0x1787BC0] - name: segment_01788000 type: bin start: 0x1788000 # vram: + compress: True + align: 0x1000 + - [0x1788D60] - name: segment_01789000 type: bin start: 0x1789000 # vram: + compress: True + align: 0x1000 + - [0x1789CE0] - name: segment_0178A000 type: bin start: 0x178A000 # vram: + compress: True + align: 0x1000 + - [0x178AD50] - name: segment_0178B000 type: bin start: 0x178B000 # vram: + compress: True + align: 0x1000 + - [0x178BD60] - name: segment_0178C000 type: bin start: 0x178C000 # vram: + compress: True + align: 0x1000 + - [0x178CF00] - name: segment_0178D000 type: bin start: 0x178D000 # vram: + compress: True + align: 0x1000 + - [0x178DF40] - name: segment_0178E000 type: bin start: 0x178E000 # vram: + compress: True + align: 0x1000 + - [0x178EC10] - name: segment_0178F000 type: bin start: 0x178F000 # vram: + compress: True + align: 0x1000 + - [0x178FB90] - name: segment_01790000 type: bin start: 0x1790000 # vram: + compress: True + align: 0x1000 + - [0x1790C70] - name: segment_01791000 type: bin start: 0x1791000 # vram: + compress: True + align: 0x1000 + - [0x1791B90] - name: segment_01792000 type: bin start: 0x1792000 # vram: + compress: True + align: 0x1000 + - [0x1792D60] - name: segment_01793000 type: bin start: 0x1793000 # vram: + compress: True + align: 0x1000 + - [0x1793E50] - name: segment_01794000 type: bin start: 0x1794000 # vram: + compress: True + align: 0x1000 + - [0x1794C80] - name: segment_01795000 type: bin start: 0x1795000 # vram: + compress: True + align: 0x1000 + - [0x1795D10] - name: segment_01796000 type: bin start: 0x1796000 # vram: + compress: True + align: 0x1000 + - [0x1796D80] - name: segment_01797000 type: bin start: 0x1797000 # vram: + compress: True + align: 0x1000 + - [0x1797CD0] - name: segment_01798000 type: bin start: 0x1798000 # vram: + compress: True + align: 0x1000 + - [0x17990B0] - name: segment_0179A000 type: bin start: 0x179A000 # vram: + compress: True + align: 0x1000 + - [0x179AF10] - name: segment_0179B000 type: bin start: 0x179B000 # vram: + compress: True + align: 0x1000 + - [0x179BE80] - name: segment_0179C000 type: bin start: 0x179C000 # vram: + compress: True + align: 0x1000 + - [0x179D040] - name: segment_0179E000 type: bin start: 0x179E000 # vram: + compress: True + align: 0x1000 + - [0x179E2C0] - name: segment_0179F000 type: bin start: 0x179F000 # vram: + compress: True + align: 0x1000 + - [0x17A0590] - name: segment_017A1000 type: bin start: 0x17A1000 # vram: + compress: False + align: 0x1000 + - [0x1829880] - name: segment_0182A000 type: bin start: 0x182A000 # vram: + compress: False + align: 0x1000 + - [0x186E880] - name: segment_0186F000 type: bin start: 0x186F000 # vram: + compress: True + align: 0x1000 + - [0x1870860] - name: segment_01871000 type: bin start: 0x1871000 # vram: + compress: False + align: 0x1000 + - [0x187FFA0] - name: segment_01880000 type: bin start: 0x1880000 # vram: + compress: True + align: 0x1000 + - [0x18830A0] - name: segment_01884000 type: bin start: 0x1884000 # vram: + compress: True + align: 0x1000 + - [0x18876C0] - name: segment_01888000 type: bin start: 0x1888000 # vram: + compress: True + align: 0x1000 + - [0x188B0A0] - name: segment_0188C000 type: bin start: 0x188C000 # vram: + compress: False + align: 0x1000 + - [0x188C180] - name: segment_0188D000 type: bin start: 0x188D000 # vram: + compress: False + align: 0x1000 + - [0x188D180] - name: segment_0188E000 type: bin start: 0x188E000 # vram: + compress: False + align: 0x1000 + - [0x188E180] - name: segment_0188F000 type: bin start: 0x188F000 # vram: + compress: False + align: 0x1000 + - [0x188F180] - name: segment_01890000 type: bin start: 0x1890000 # vram: + compress: False + align: 0x1000 + - [0x1890180] - name: segment_01891000 type: bin start: 0x1891000 # vram: + compress: True + align: 0x1000 + - [0x1891800] - name: segment_01892000 type: bin start: 0x1892000 # vram: + compress: True + align: 0x1000 + - [0x1892800] - name: segment_01893000 type: bin start: 0x1893000 # vram: + compress: True + align: 0x1000 + - [0x1893800] - name: segment_01894000 type: bin start: 0x1894000 # vram: + compress: True + align: 0x1000 + - [0x1894800] - name: segment_01895000 type: bin start: 0x1895000 # vram: + compress: True + align: 0x1000 + - [0x1895800] - name: segment_01896000 type: bin start: 0x1896000 # vram: + compress: True + align: 0x1000 + - [0x1896800] - name: segment_01897000 type: bin start: 0x1897000 # vram: + compress: True + align: 0x1000 + - [0x1897400] - name: segment_01898000 type: bin start: 0x1898000 # vram: + compress: True + align: 0x1000 + - [0x1898400] - name: segment_01899000 type: bin start: 0x1899000 # vram: + compress: True + align: 0x1000 + - [0x1899200] - name: segment_0189A000 type: bin start: 0x189A000 # vram: + compress: True + align: 0x1000 + - [0x189A200] - name: segment_0189B000 type: bin start: 0x189B000 # vram: + compress: True + align: 0x1000 + - [0x189B800] - name: segment_0189C000 type: bin start: 0x189C000 # vram: + compress: True + align: 0x1000 + - [0x189C800] - name: segment_0189D000 type: bin start: 0x189D000 # vram: + compress: True + align: 0x1000 + - [0x189D800] - name: segment_0189E000 type: bin start: 0x189E000 # vram: + compress: True + align: 0x1000 + - [0x189E800] - name: segment_0189F000 type: bin start: 0x189F000 # vram: + compress: True + align: 0x1000 + - [0x189F800] - name: segment_018A0000 type: bin start: 0x18A0000 # vram: + compress: True + align: 0x1000 + - [0x18A0800] - name: segment_018A1000 type: bin start: 0x18A1000 # vram: + compress: True + align: 0x1000 + - [0x18A1400] - name: segment_018A2000 type: bin start: 0x18A2000 # vram: + compress: True + align: 0x1000 + - [0x18A2400] - name: segment_018A3000 type: bin start: 0x18A3000 # vram: + compress: True + align: 0x1000 + - [0x18A3200] - name: segment_018A4000 type: bin start: 0x18A4000 # vram: + compress: True + align: 0x1000 + - [0x18A4200] - name: segment_018A5000 type: bin start: 0x18A5000 # vram: + compress: True + align: 0x1000 + - [0x18A5800] - name: segment_018A6000 type: bin start: 0x18A6000 # vram: + compress: True + align: 0x1000 + - [0x18A6800] - name: segment_018A7000 type: bin start: 0x18A7000 # vram: + compress: True + align: 0x1000 + - [0x18A7800] - name: segment_018A8000 type: bin start: 0x18A8000 # vram: + compress: True + align: 0x1000 + - [0x18A8800] - name: segment_018A9000 type: bin start: 0x18A9000 # vram: + compress: True + align: 0x1000 + - [0x18A9800] - name: segment_018AA000 type: bin start: 0x18AA000 # vram: + compress: True + align: 0x1000 + - [0x18AA800] - name: segment_018AB000 type: bin start: 0x18AB000 # vram: + compress: True + align: 0x1000 + - [0x18AB020] - name: segment_018AC000 type: bin start: 0x18AC000 # vram: + compress: True + align: 0x1000 + - [0x18AC020] - name: segment_018AD000 type: bin start: 0x18AD000 # vram: + compress: True + align: 0x1000 + - [0x18AD020] - name: segment_018AE000 type: bin start: 0x18AE000 # vram: + compress: True + align: 0x1000 + - [0x18AE020] - name: segment_018AF000 type: bin start: 0x18AF000 # vram: + compress: True + align: 0x1000 + - [0x18AF800] - name: segment_018B0000 type: bin start: 0x18B0000 # vram: + compress: True + align: 0x1000 + - [0x18B0800] - name: segment_018B1000 type: bin start: 0x18B1000 # vram: + compress: True + align: 0x1000 + - [0x18B1800] - name: segment_018B2000 type: bin start: 0x18B2000 # vram: + compress: True + align: 0x1000 + - [0x18B2800] - name: segment_018B3000 type: bin start: 0x18B3000 # vram: + compress: True + align: 0x1000 + - [0x18B3400] - name: segment_018B4000 type: bin start: 0x18B4000 # vram: + compress: True + align: 0x1000 + - [0x18B4100] - name: segment_018B5000 type: bin start: 0x18B5000 # vram: + compress: True + align: 0x1000 + - [0x18B5400] - name: segment_018B6000 type: bin start: 0x18B6000 # vram: + compress: True + align: 0x1000 + - [0x18B6400] - name: segment_018B7000 type: bin start: 0x18B7000 # vram: + compress: True + align: 0x1000 + - [0x18B7400] - name: segment_018B8000 type: bin start: 0x18B8000 # vram: + compress: True + align: 0x1000 + - [0x18B8800] - name: segment_018B9000 type: bin start: 0x18B9000 # vram: + compress: True + align: 0x1000 + - [0x18B9400] - name: segment_018BA000 type: bin start: 0x18BA000 # vram: + compress: True + align: 0x1000 + - [0x18BA200] - name: segment_018BB000 type: bin start: 0x18BB000 # vram: + compress: True + align: 0x1000 + - [0x18BB200] - name: segment_018BC000 type: bin start: 0x18BC000 # vram: + compress: False + align: 0x1000 + - [0x18C3410] - name: segment_018C4000 type: bin start: 0x18C4000 # vram: + compress: True + align: 0x1000 + - [0x18C6200] - name: segment_018C7000 type: bin start: 0x18C7000 # vram: + compress: False + align: 0x1000 + - [0x18C7090] - name: segment_018C8000 type: bin start: 0x18C8000 # vram: + compress: False + align: 0x1000 + - [0x18C8050] - name: segment_018C9000 type: bin start: 0x18C9000 # vram: + compress: False + align: 0x1000 + - [0x18C9080] - name: segment_018CA000 type: bin start: 0x18CA000 # vram: + compress: False + align: 0x1000 + - [0x18CA050] - name: segment_018CB000 type: bin start: 0x18CB000 # vram: + compress: False + align: 0x1000 + - [0x18CB050] - name: segment_018CC000 type: bin start: 0x18CC000 # vram: + compress: False + align: 0x1000 + - [0x18CC080] - name: segment_018CD000 type: bin start: 0x18CD000 # vram: + compress: False + align: 0x1000 + - [0x18CD030] - name: segment_018CE000 type: bin start: 0x18CE000 # vram: + compress: True + align: 0x1000 + - [0x18CE0B0] - name: segment_018CF000 type: bin start: 0x18CF000 # vram: + compress: False + align: 0x1000 + - [0x18CF080] - name: segment_018D0000 type: bin start: 0x18D0000 # vram: + compress: False + align: 0x1000 + - [0x18D0050] - name: segment_018D1000 type: bin start: 0x18D1000 # vram: + compress: True + align: 0x1000 + - [0x18D1090] - name: segment_018D2000 type: bin start: 0x18D2000 # vram: + compress: True + align: 0x1000 + - [0x18D2090] - name: segment_018D3000 type: bin start: 0x18D3000 # vram: + compress: True + align: 0x1000 + - [0x18D3080] - name: segment_018D4000 type: bin start: 0x18D4000 # vram: + compress: True + align: 0x1000 + - [0x18D4090] - name: segment_018D5000 type: bin start: 0x18D5000 # vram: + compress: True + align: 0x1000 + - [0x18D5090] - name: segment_018D6000 type: bin start: 0x18D6000 # vram: + compress: True + align: 0x1000 + - [0x18D6080] - name: segment_018D7000 type: bin start: 0x18D7000 # vram: + compress: True + align: 0x1000 + - [0x18D70B0] - name: segment_018D8000 type: bin start: 0x18D8000 # vram: + compress: True + align: 0x1000 + - [0x18D80B0] - name: segment_018D9000 type: bin start: 0x18D9000 # vram: + compress: True + align: 0x1000 + - [0x18D90B0] - name: segment_018DA000 type: bin start: 0x18DA000 # vram: + compress: False + align: 0x1000 + - [0x18DA050] - name: segment_018DB000 type: bin start: 0x18DB000 # vram: + compress: False + align: 0x1000 + - [0x18DB050] - name: segment_018DC000 type: bin start: 0x18DC000 # vram: + compress: True + align: 0x1000 + - [0x18DC0C0] - name: segment_018DD000 type: bin start: 0x18DD000 # vram: + compress: True + align: 0x1000 + - [0x18DD0B0] - name: segment_018DE000 type: bin start: 0x18DE000 # vram: + compress: True + align: 0x1000 + - [0x18DE070] - name: segment_018DF000 type: bin start: 0x18DF000 # vram: + compress: True + align: 0x1000 + - [0x18DF070] - name: segment_018E0000 type: bin start: 0x18E0000 # vram: + compress: True + align: 0x1000 + - [0x18E00A0] - name: segment_018E1000 type: bin start: 0x18E1000 # vram: + compress: True + align: 0x1000 + - [0x18E1070] - name: segment_018E2000 type: bin start: 0x18E2000 # vram: + compress: True + align: 0x1000 + - [0x18E2050] - name: segment_018E3000 type: bin start: 0x18E3000 # vram: + compress: True + align: 0x1000 + - [0x18E3050] - name: segment_018E4000 type: bin start: 0x18E4000 # vram: + compress: True + align: 0x1000 + - [0x18E4050] - name: segment_018E5000 type: bin start: 0x18E5000 # vram: + compress: True + align: 0x1000 + - [0x18E5050] - name: segment_018E6000 type: bin start: 0x18E6000 # vram: + compress: True + align: 0x1000 + - [0x18E6050] - name: segment_018E7000 type: bin start: 0x18E7000 # vram: + compress: True + align: 0x1000 + - [0x18E7080] - name: segment_018E8000 type: bin start: 0x18E8000 # vram: + compress: True + align: 0x1000 + - [0x18E8070] - name: segment_018E9000 type: bin start: 0x18E9000 # vram: + compress: True + align: 0x1000 + - [0x18E9070] - name: segment_018EA000 type: bin start: 0x18EA000 # vram: + compress: True + align: 0x1000 + - [0x18EA0B0] - name: segment_018EB000 type: bin start: 0x18EB000 # vram: + compress: True + align: 0x1000 + - [0x18EB110] - name: segment_018EC000 type: bin start: 0x18EC000 # vram: + compress: True + align: 0x1000 + - [0x18EC0C0] - name: segment_018ED000 type: bin start: 0x18ED000 # vram: + compress: True + align: 0x1000 + - [0x18ED030] - name: segment_018EE000 type: bin start: 0x18EE000 # vram: + compress: True + align: 0x1000 + - [0x18EE030] - name: segment_018EF000 type: bin start: 0x18EF000 # vram: + compress: True + align: 0x1000 + - [0x18EF030] - name: segment_018F0000 type: bin start: 0x18F0000 # vram: + compress: True + align: 0x1000 + - [0x18F0060] - name: segment_018F1000 type: bin start: 0x18F1000 # vram: + compress: True + align: 0x1000 + - [0x18F1020] - name: segment_018F2000 type: bin start: 0x18F2000 # vram: + compress: True + align: 0x1000 + - [0x18F2050] - name: segment_018F3000 type: bin start: 0x18F3000 # vram: + compress: True + align: 0x1000 + - [0x18F3050] - name: segment_018F4000 type: bin start: 0x18F4000 # vram: + compress: True + align: 0x1000 + - [0x18F4050] - name: segment_018F5000 type: bin start: 0x18F5000 # vram: + compress: True + align: 0x1000 + - [0x18F5050] - name: segment_018F6000 type: bin start: 0x18F6000 # vram: + compress: True + align: 0x1000 + - [0x18F6050] - name: segment_018F7000 type: bin start: 0x18F7000 # vram: + compress: True + align: 0x1000 + - [0x18F7060] - name: segment_018F8000 type: bin start: 0x18F8000 # vram: + compress: True + align: 0x1000 + - [0x18F8050] - name: segment_018F9000 type: bin start: 0x18F9000 # vram: + compress: True + align: 0x1000 + - [0x18F9020] - name: segment_018FA000 type: bin start: 0x18FA000 # vram: + compress: True + align: 0x1000 + - [0x18FA030] - name: segment_018FB000 type: bin start: 0x18FB000 # vram: + compress: True + align: 0x1000 + - [0x18FB060] - name: segment_018FC000 type: bin start: 0x18FC000 # vram: + compress: True + align: 0x1000 + - [0x18FC060] - name: segment_018FD000 type: bin start: 0x18FD000 # vram: + compress: True + align: 0x1000 + - [0x18FD020] - name: segment_018FE000 type: bin start: 0x18FE000 # vram: + compress: True + align: 0x1000 + - [0x18FE030] - name: segment_018FF000 type: bin start: 0x18FF000 # vram: + compress: True + align: 0x1000 + - [0x18FF030] - name: segment_01900000 type: bin start: 0x1900000 # vram: + compress: True + align: 0x1000 + - [0x1900030] - name: segment_01901000 type: bin start: 0x1901000 # vram: + compress: True + align: 0x1000 + - [0x1901030] - name: segment_01902000 type: bin start: 0x1902000 # vram: + compress: True + align: 0x1000 + - [0x1902030] - name: segment_01903000 type: bin start: 0x1903000 # vram: + compress: True + align: 0x1000 + - [0x1903030] - name: segment_01904000 type: bin start: 0x1904000 # vram: + compress: True + align: 0x1000 + - [0x1904020] - name: segment_01905000 type: bin start: 0x1905000 # vram: + compress: True + align: 0x1000 + - [0x1905030] - name: segment_01906000 type: bin start: 0x1906000 # vram: + compress: True + align: 0x1000 + - [0x1906180] - name: anime_model_1_static type: bin start: 0x1907000 # vram: + compress: True + align: 0x1000 + - [0x1907010] - name: anime_model_2_static type: bin start: 0x1908000 # vram: + compress: True + align: 0x1000 + - [0x1908010] - name: anime_model_3_static type: bin start: 0x1909000 # vram: + compress: True + align: 0x1000 + - [0x1909010] - name: anime_model_4_static type: bin start: 0x190A000 # vram: + compress: True + align: 0x1000 + - [0x190A010] - name: anime_model_5_static type: bin start: 0x190B000 # vram: + compress: True + align: 0x1000 + - [0x190B010] - name: anime_model_6_static type: bin start: 0x190C000 # vram: + compress: True + align: 0x1000 + - [0x190C010] - name: anime_texture_1_static type: bin start: 0x190D000 # vram: + compress: True + align: 0x1000 + - [0x190D010] - name: anime_texture_2_static type: bin start: 0x190E000 # vram: + compress: True + align: 0x1000 + - [0x190E010] - name: anime_texture_3_static type: bin start: 0x190F000 # vram: + compress: True + align: 0x1000 + - [0x190F010] - name: anime_texture_4_static type: bin start: 0x1910000 # vram: + compress: True + align: 0x1000 + - [0x1910010] - name: anime_texture_5_static type: bin start: 0x1911000 # vram: + compress: True + align: 0x1000 + - [0x1911010] - name: anime_texture_6_static type: bin start: 0x1912000 # vram: + compress: True + align: 0x1000 + - [0x1912010] - name: softsprite_matrix_static type: bin start: 0x1913000 # vram: + compress: True + align: 0x1000 - - [0x1914000] + - [0x1913040] diff --git a/yamls/jp/boot.yaml b/yamls/jp/boot.yaml index 7f7f9cf..863e3c2 100644 --- a/yamls/jp/boot.yaml +++ b/yamls/jp/boot.yaml @@ -2,7 +2,7 @@ type: code start: 0x001060 vram: 0x80025C60 - follows_vram: entry + follows_vram: makerom bss_size: 0x5D50 subsegments: - [0x001060, c, boot/boot_main] @@ -239,7 +239,7 @@ vram: 0x80044690 follows_vram: boot subsegments: - - [0x019D40, data, dmadata/dmadata] + - [0x019D40, .data, dmadata/dmadata] - name: segment_027130 type: bin diff --git a/yamls/jp/code.yaml b/yamls/jp/code.yaml index acc629c..0a69518 100644 --- a/yamls/jp/code.yaml +++ b/yamls/jp/code.yaml @@ -3,6 +3,7 @@ start: 0x675720 vram: 0x80051A80 follows_vram: dmadata + compress: True bss_size: 0x36C90 subsegments: - [0x675720, asm, code/c_keyframe] diff --git a/yamls/jp/header.yaml b/yamls/jp/header.yaml index 196ac90..76f2fdd 100644 --- a/yamls/jp/header.yaml +++ b/yamls/jp/header.yaml @@ -50,5 +50,6 @@ options: libultra_symbols: True hardware_regs: True asm_emit_size_directive: False + segment_end_before_align: True segments: diff --git a/yamls/jp/makerom.yaml b/yamls/jp/makerom.yaml index c7d94c4..9c8d417 100644 --- a/yamls/jp/makerom.yaml +++ b/yamls/jp/makerom.yaml @@ -1,14 +1,8 @@ - - name: header - type: header - start: 0x0 - - - name: ipl3 - type: bin - start: 0x40 - - - name: entry + - name: makerom type: code - start: 0x001000 - vram: 0x80025C00 + start: 0x000000 + vram: 0x80024C00 subsegments: - - [0x1000, hasm, entry/entry] + - [0x000000, header, makerom/header] + - [0x000040, bin, makerom/ipl3] + - [0x001000, hasm, makerom/entry] diff --git a/yamls/jp/overlays.yaml b/yamls/jp/overlays.yaml index 2d58b53..47e4c4a 100644 --- a/yamls/jp/overlays.yaml +++ b/yamls/jp/overlays.yaml @@ -2,6 +2,7 @@ type: code start: 0x73F4D0 vram: 0x80800000 + compress: True bss_size: 0x0 subsegments: - [0x73F4D0, asm, overlays/ovl_0073F4D0] @@ -12,6 +13,7 @@ start: 0x741A40 vram: 0x80802570 follows_vram: ovl_0073F4D0 + compress: True subsegments: - [0x741A40, data, overlays/ovl_0073F4D0_reloc] @@ -20,6 +22,7 @@ start: 0x741EA0 vram: 0x808029D0 follows_vram: ovl_0073F4D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x741EA0, asm, overlays/ovl_00741EA0] @@ -28,6 +31,7 @@ start: 0x741F80 vram: 0x80802AB0 follows_vram: ovl_00741EA0 + compress: True subsegments: - [0x741F80, data, overlays/ovl_00741EA0_reloc] @@ -36,6 +40,7 @@ start: 0x741FB0 vram: 0x80802AE0 follows_vram: ovl_00741EA0_reloc + compress: True bss_size: 0xF0 subsegments: - [0x741FB0, asm, overlays/ovl_00741FB0] @@ -47,6 +52,7 @@ start: 0x743950 vram: 0x80804570 follows_vram: ovl_00741FB0 + compress: True subsegments: - [0x743950, data, overlays/ovl_00741FB0_reloc] @@ -55,6 +61,7 @@ start: 0x743B70 vram: 0x80804790 follows_vram: ovl_00741FB0_reloc + compress: True bss_size: 0x0 subsegments: - [0x743B70, asm, overlays/ovl_00743B70] @@ -63,6 +70,7 @@ start: 0x743CA0 vram: 0x808048C0 follows_vram: ovl_00743B70 + compress: True subsegments: - [0x743CA0, data, overlays/ovl_00743B70_reloc] @@ -71,6 +79,7 @@ start: 0x743CD0 vram: 0x808048F0 follows_vram: ovl_00743B70_reloc + compress: True bss_size: 0x0 subsegments: - [0x743CD0, asm, overlays/ovl_00743CD0] @@ -79,6 +88,7 @@ start: 0x743FE0 vram: 0x80804C00 follows_vram: ovl_00743CD0 + compress: True subsegments: - [0x743FE0, data, overlays/ovl_00743CD0_reloc] @@ -87,6 +97,7 @@ start: 0x744020 vram: 0x80804C40 follows_vram: ovl_00743CD0_reloc + compress: True bss_size: 0x20170 subsegments: - [0x744020, asm, overlays/ovl_00744020] @@ -98,6 +109,7 @@ start: 0x747940 vram: 0x808286D0 follows_vram: ovl_00744020 + compress: True subsegments: - [0x747940, data, overlays/ovl_00744020_reloc] @@ -106,6 +118,7 @@ start: 0x747AA0 vram: 0x80828830 follows_vram: ovl_00744020_reloc + compress: True bss_size: 0x0 subsegments: - [0x747AA0, asm, overlays/ovl_00747AA0] @@ -116,6 +129,7 @@ start: 0x7485F0 vram: 0x80829380 follows_vram: ovl_00747AA0 + compress: True subsegments: - [0x7485F0, data, overlays/ovl_00747AA0_reloc] @@ -124,6 +138,7 @@ start: 0x7486E0 vram: 0x80829470 follows_vram: ovl_00747AA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x7486E0, asm, overlays/ovl_007486E0] @@ -134,6 +149,7 @@ start: 0x749200 vram: 0x80829F90 follows_vram: ovl_007486E0 + compress: True subsegments: - [0x749200, data, overlays/ovl_007486E0_reloc] @@ -142,6 +158,7 @@ start: 0x7492E0 vram: 0x8082A070 follows_vram: ovl_007486E0_reloc + compress: True bss_size: 0x6370 subsegments: - [0x7492E0, asm, overlays/ovl_007492E0] @@ -153,6 +170,7 @@ start: 0x771900 vram: 0x80858A00 follows_vram: ovl_007492E0 + compress: True subsegments: - [0x771900, data, overlays/ovl_007492E0_reloc] @@ -161,6 +179,7 @@ start: 0x7745B0 vram: 0x8085B6B0 follows_vram: ovl_007492E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x7745B0, asm, overlays/ovl_007745B0] @@ -170,6 +189,7 @@ start: 0x774980 vram: 0x8085BA80 follows_vram: ovl_007745B0 + compress: True subsegments: - [0x774980, data, overlays/ovl_007745B0_reloc] @@ -178,6 +198,7 @@ start: 0x7749C0 vram: 0x8085BAC0 follows_vram: ovl_007745B0_reloc + compress: True bss_size: 0x10730 subsegments: - [0x7749C0, asm, overlays/ovl_submenu] @@ -189,6 +210,7 @@ start: 0x7778B0 vram: 0x8086F0E0 follows_vram: ovl_submenu + compress: True subsegments: - [0x7778B0, data, overlays/ovl_submenu_reloc] @@ -197,6 +219,7 @@ start: 0x777AE0 vram: 0x8086F310 follows_vram: ovl_submenu_reloc + compress: True bss_size: 0x120 subsegments: - [0x777AE0, asm, overlays/ovl_00777AE0] @@ -208,6 +231,7 @@ start: 0x781D60 vram: 0x808796B0 follows_vram: ovl_00777AE0 + compress: True subsegments: - [0x781D60, data, overlays/ovl_00777AE0_reloc] @@ -216,6 +240,7 @@ start: 0x7829E0 vram: 0x8087A330 follows_vram: ovl_00777AE0_reloc + compress: True bss_size: 0x300 subsegments: - [0x7829E0, asm, overlays/ovl_007829E0] @@ -227,6 +252,7 @@ start: 0x784DE0 vram: 0x8087CA30 follows_vram: ovl_007829E0 + compress: True subsegments: - [0x784DE0, data, overlays/ovl_007829E0_reloc] @@ -235,6 +261,7 @@ start: 0x784FC0 vram: 0x8087CC10 follows_vram: ovl_007829E0_reloc + compress: True bss_size: 0x130 subsegments: - [0x784FC0, asm, overlays/ovl_00784FC0] @@ -246,6 +273,7 @@ start: 0x785690 vram: 0x8087D410 follows_vram: ovl_00784FC0 + compress: True subsegments: - [0x785690, data, overlays/ovl_00784FC0_reloc] @@ -254,6 +282,7 @@ start: 0x785700 vram: 0x8087D480 follows_vram: ovl_00784FC0_reloc + compress: True bss_size: 0x5E0 subsegments: - [0x785700, asm, overlays/ovl_00785700] @@ -265,6 +294,7 @@ start: 0x7898C0 vram: 0x80881C20 follows_vram: ovl_00785700 + compress: True subsegments: - [0x7898C0, data, overlays/ovl_00785700_reloc] @@ -273,6 +303,7 @@ start: 0x789B60 vram: 0x80881EC0 follows_vram: ovl_00785700_reloc + compress: True bss_size: 0x10 subsegments: - [0x789B60, asm, overlays/ovl_00789B60] @@ -283,6 +314,7 @@ start: 0x78A4F0 vram: 0x80882860 follows_vram: ovl_00789B60 + compress: True subsegments: - [0x78A4F0, data, overlays/ovl_00789B60_reloc] @@ -291,6 +323,7 @@ start: 0x78A560 vram: 0x808828D0 follows_vram: ovl_00789B60_reloc + compress: True bss_size: 0x0 subsegments: - [0x78A560, asm, overlays/ovl_0078A560] @@ -301,6 +334,7 @@ start: 0x78ADC0 vram: 0x80883130 follows_vram: ovl_0078A560 + compress: True subsegments: - [0x78ADC0, data, overlays/ovl_0078A560_reloc] @@ -309,6 +343,7 @@ start: 0x78AE30 vram: 0x808831A0 follows_vram: ovl_0078A560_reloc + compress: True bss_size: 0x20 subsegments: - [0x78AE30, asm, overlays/ovl_0078AE30] @@ -319,6 +354,7 @@ start: 0x78BEE0 vram: 0x80884270 follows_vram: ovl_0078AE30 + compress: True subsegments: - [0x78BEE0, data, overlays/ovl_0078AE30_reloc] @@ -327,6 +363,7 @@ start: 0x78BFB0 vram: 0x80884340 follows_vram: ovl_0078AE30_reloc + compress: True bss_size: 0x230 subsegments: - [0x78BFB0, asm, overlays/ovl_0078BFB0] @@ -338,6 +375,7 @@ start: 0x78CAD0 vram: 0x80885090 follows_vram: ovl_0078BFB0 + compress: True subsegments: - [0x78CAD0, data, overlays/ovl_0078BFB0_reloc] @@ -346,6 +384,7 @@ start: 0x78CB80 vram: 0x80885140 follows_vram: ovl_0078BFB0_reloc + compress: True bss_size: 0x30 subsegments: - [0x78CB80, asm, overlays/ovl_0078CB80] @@ -357,6 +396,7 @@ start: 0x790530 vram: 0x80888B20 follows_vram: ovl_0078CB80 + compress: True subsegments: - [0x790530, data, overlays/ovl_0078CB80_reloc] @@ -365,6 +405,7 @@ start: 0x7908A0 vram: 0x80888E90 follows_vram: ovl_0078CB80_reloc + compress: True bss_size: 0xC0 subsegments: - [0x7908A0, asm, overlays/ovl_007908A0] @@ -376,6 +417,7 @@ start: 0x792610 vram: 0x8088ACC0 follows_vram: ovl_007908A0 + compress: True subsegments: - [0x792610, data, overlays/ovl_007908A0_reloc] @@ -384,6 +426,7 @@ start: 0x792700 vram: 0x8088ADB0 follows_vram: ovl_007908A0_reloc + compress: True bss_size: 0x1A0 subsegments: - [0x792700, asm, overlays/ovl_00792700] @@ -395,6 +438,7 @@ start: 0x794240 vram: 0x8088CA90 follows_vram: ovl_00792700 + compress: True subsegments: - [0x794240, data, overlays/ovl_00792700_reloc] @@ -403,6 +447,7 @@ start: 0x794380 vram: 0x8088CBD0 follows_vram: ovl_00792700_reloc + compress: True bss_size: 0x30 subsegments: - [0x794380, asm, overlays/ovl_00794380] @@ -413,6 +458,7 @@ start: 0x795290 vram: 0x8088DB10 follows_vram: ovl_00794380 + compress: True subsegments: - [0x795290, data, overlays/ovl_00794380_reloc] @@ -421,6 +467,7 @@ start: 0x795350 vram: 0x8088DBD0 follows_vram: ovl_00794380_reloc + compress: True bss_size: 0x3F80 subsegments: - [0x795350, asm, overlays/ovl_00795350] @@ -432,6 +479,7 @@ start: 0x797870 vram: 0x80894070 follows_vram: ovl_00795350 + compress: True subsegments: - [0x797870, data, overlays/ovl_00795350_reloc] @@ -440,6 +488,7 @@ start: 0x797A50 vram: 0x80894250 follows_vram: ovl_00795350_reloc + compress: True bss_size: 0x80 subsegments: - [0x797A50, asm, overlays/ovl_00797A50] @@ -451,6 +500,7 @@ start: 0x799450 vram: 0x80895CD0 follows_vram: ovl_00797A50 + compress: True subsegments: - [0x799450, data, overlays/ovl_00797A50_reloc] @@ -459,6 +509,7 @@ start: 0x799580 vram: 0x80895E00 follows_vram: ovl_00797A50_reloc + compress: True bss_size: 0x10 subsegments: - [0x799580, asm, overlays/ovl_00799580] @@ -470,6 +521,7 @@ start: 0x79A1E0 vram: 0x80896A70 follows_vram: ovl_00799580 + compress: True subsegments: - [0x79A1E0, data, overlays/ovl_00799580_reloc] @@ -478,6 +530,7 @@ start: 0x79A290 vram: 0x80896B20 follows_vram: ovl_00799580_reloc + compress: True bss_size: 0x10 subsegments: - [0x79A290, asm, overlays/ovl_0079A290] @@ -488,6 +541,7 @@ start: 0x79AFD0 vram: 0x80897870 follows_vram: ovl_0079A290 + compress: True subsegments: - [0x79AFD0, data, overlays/ovl_0079A290_reloc] @@ -496,6 +550,7 @@ start: 0x79B120 vram: 0x808979C0 follows_vram: ovl_0079A290_reloc + compress: True bss_size: 0x30 subsegments: - [0x79B120, asm, overlays/ovl_0079B120] @@ -507,6 +562,7 @@ start: 0x79BF10 vram: 0x808987E0 follows_vram: ovl_0079B120 + compress: True subsegments: - [0x79BF10, data, overlays/ovl_0079B120_reloc] @@ -515,6 +571,7 @@ start: 0x79C020 vram: 0x808988F0 follows_vram: ovl_0079B120_reloc + compress: True bss_size: 0x30 subsegments: - [0x79C020, asm, overlays/ovl_0079C020] @@ -526,6 +583,7 @@ start: 0x79D8B0 vram: 0x8089A1B0 follows_vram: ovl_0079C020 + compress: True subsegments: - [0x79D8B0, data, overlays/ovl_0079C020_reloc] @@ -534,6 +592,7 @@ start: 0x79DA50 vram: 0x8089A350 follows_vram: ovl_0079C020_reloc + compress: True bss_size: 0x10 subsegments: - [0x79DA50, asm, overlays/ovl_0079DA50] @@ -544,6 +603,7 @@ start: 0x79E370 vram: 0x8089AC80 follows_vram: ovl_0079DA50 + compress: True subsegments: - [0x79E370, data, overlays/ovl_0079DA50_reloc] @@ -552,6 +612,7 @@ start: 0x79E430 vram: 0x8089AD40 follows_vram: ovl_0079DA50_reloc + compress: True bss_size: 0x6D80 subsegments: - [0x79E430, asm, overlays/ovl_0079E430] @@ -563,6 +624,7 @@ start: 0x79F770 vram: 0x808A2E00 follows_vram: ovl_0079E430 + compress: True subsegments: - [0x79F770, data, overlays/ovl_0079E430_reloc] @@ -571,6 +633,7 @@ start: 0x79F810 vram: 0x808A2EA0 follows_vram: ovl_0079E430_reloc + compress: True bss_size: 0x10 subsegments: - [0x79F810, asm, overlays/ovl_0079F810] @@ -582,6 +645,7 @@ start: 0x7A0F40 vram: 0x808A45E0 follows_vram: ovl_0079F810 + compress: True subsegments: - [0x7A0F40, data, overlays/ovl_0079F810_reloc] @@ -590,6 +654,7 @@ start: 0x7A10E0 vram: 0x808A4780 follows_vram: ovl_0079F810_reloc + compress: True bss_size: 0x170 subsegments: - [0x7A10E0, asm, overlays/ovl_007A10E0] @@ -600,6 +665,7 @@ start: 0x7A2820 vram: 0x808A6030 follows_vram: ovl_007A10E0 + compress: True subsegments: - [0x7A2820, data, overlays/ovl_007A10E0_reloc] @@ -608,6 +674,7 @@ start: 0x7A28F0 vram: 0x808A6100 follows_vram: ovl_007A10E0_reloc + compress: True bss_size: 0x3120 subsegments: - [0x7A28F0, asm, overlays/ovl_007A28F0] @@ -619,6 +686,7 @@ start: 0x7AC200 vram: 0x808B2B30 follows_vram: ovl_007A28F0 + compress: True subsegments: - [0x7AC200, data, overlays/ovl_007A28F0_reloc] @@ -627,6 +695,7 @@ start: 0x7AC420 vram: 0x808B2D50 follows_vram: ovl_007A28F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x7AC420, asm, overlays/ovl_player_actor] @@ -637,6 +706,7 @@ start: 0x7D9BA0 vram: 0x808E04D0 follows_vram: ovl_player_actor + compress: True subsegments: - [0x7D9BA0, data, overlays/ovl_player_actor_reloc] @@ -645,6 +715,7 @@ start: 0x7DE050 vram: 0x808E4980 follows_vram: ovl_player_actor_reloc + compress: True bss_size: 0x0 subsegments: - [0x7DE050, asm, overlays/ovl_007DE050] @@ -655,6 +726,7 @@ start: 0x7DF070 vram: 0x808E59A0 follows_vram: ovl_007DE050 + compress: True subsegments: - [0x7DF070, data, overlays/ovl_007DE050_reloc] @@ -663,6 +735,7 @@ start: 0x7DF180 vram: 0x808E5AB0 follows_vram: ovl_007DE050_reloc + compress: True bss_size: 0x0 subsegments: - [0x7DF180, asm, overlays/ovl_007DF180] @@ -673,6 +746,7 @@ start: 0x7E0780 vram: 0x808E70B0 follows_vram: ovl_007DF180 + compress: True subsegments: - [0x7E0780, data, overlays/ovl_007DF180_reloc] @@ -681,6 +755,7 @@ start: 0x7E08D0 vram: 0x808E7200 follows_vram: ovl_007DF180_reloc + compress: True bss_size: 0x0 subsegments: - [0x7E08D0, asm, overlays/ovl_007E08D0] @@ -691,6 +766,7 @@ start: 0x7E17F0 vram: 0x808E8120 follows_vram: ovl_007E08D0 + compress: True subsegments: - [0x7E17F0, data, overlays/ovl_007E08D0_reloc] @@ -699,6 +775,7 @@ start: 0x7E18F0 vram: 0x808E8220 follows_vram: ovl_007E08D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x7E18F0, asm, overlays/ovl_007E18F0] @@ -709,6 +786,7 @@ start: 0x7E2380 vram: 0x808E8CB0 follows_vram: ovl_007E18F0 + compress: True subsegments: - [0x7E2380, data, overlays/ovl_007E18F0_reloc] @@ -717,6 +795,7 @@ start: 0x7E2440 vram: 0x808E8D70 follows_vram: ovl_007E18F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x7E2440, asm, overlays/ovl_007E2440] @@ -727,6 +806,7 @@ start: 0x7E30C0 vram: 0x808E99F0 follows_vram: ovl_007E2440 + compress: True subsegments: - [0x7E30C0, data, overlays/ovl_007E2440_reloc] @@ -735,6 +815,7 @@ start: 0x7E3170 vram: 0x808E9AA0 follows_vram: ovl_007E2440_reloc + compress: True bss_size: 0x0 subsegments: - [0x7E3170, asm, overlays/ovl_007E3170] @@ -745,6 +826,7 @@ start: 0x7E38F0 vram: 0x808EA220 follows_vram: ovl_007E3170 + compress: True subsegments: - [0x7E38F0, data, overlays/ovl_007E3170_reloc] @@ -753,6 +835,7 @@ start: 0x7E3990 vram: 0x808EA2C0 follows_vram: ovl_007E3170_reloc + compress: True bss_size: 0x0 subsegments: - [0x7E3990, asm, overlays/ovl_007E3990] @@ -763,6 +846,7 @@ start: 0x7E4070 vram: 0x808EA9A0 follows_vram: ovl_007E3990 + compress: True subsegments: - [0x7E4070, data, overlays/ovl_007E3990_reloc] @@ -771,6 +855,7 @@ start: 0x7E4130 vram: 0x808EAA60 follows_vram: ovl_007E3990_reloc + compress: True bss_size: 0x0 subsegments: - [0x7E4130, asm, overlays/ovl_007E4130] @@ -781,6 +866,7 @@ start: 0x7E4D30 vram: 0x808EB660 follows_vram: ovl_007E4130 + compress: True subsegments: - [0x7E4D30, data, overlays/ovl_007E4130_reloc] @@ -789,6 +875,7 @@ start: 0x7E4DF0 vram: 0x808EB720 follows_vram: ovl_007E4130_reloc + compress: True bss_size: 0x20 subsegments: - [0x7E4DF0, asm, overlays/ovl_007E4DF0] @@ -800,6 +887,7 @@ start: 0x7E55B0 vram: 0x808EBF00 follows_vram: ovl_007E4DF0 + compress: True subsegments: - [0x7E55B0, data, overlays/ovl_007E4DF0_reloc] @@ -808,6 +896,7 @@ start: 0x7E5640 vram: 0x808EBF90 follows_vram: ovl_007E4DF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x7E5640, asm, overlays/ovl_007E5640] @@ -818,6 +907,7 @@ start: 0x7E5850 vram: 0x808EC1A0 follows_vram: ovl_007E5640 + compress: True subsegments: - [0x7E5850, data, overlays/ovl_007E5640_reloc] @@ -826,6 +916,7 @@ start: 0x7E5880 vram: 0x808EC1D0 follows_vram: ovl_007E5640_reloc + compress: True bss_size: 0x490 subsegments: - [0x7E5880, asm, overlays/ovl_007E5880] @@ -837,6 +928,7 @@ start: 0x7EF1F0 vram: 0x808F5FD0 follows_vram: ovl_007E5880 + compress: True subsegments: - [0x7EF1F0, data, overlays/ovl_007E5880_reloc] @@ -845,6 +937,7 @@ start: 0x7F0350 vram: 0x808F7130 follows_vram: ovl_007E5880_reloc + compress: True bss_size: 0x490 subsegments: - [0x7F0350, asm, overlays/ovl_007F0350] @@ -856,6 +949,7 @@ start: 0x7F9D60 vram: 0x80900FD0 follows_vram: ovl_007F0350 + compress: True subsegments: - [0x7F9D60, data, overlays/ovl_007F0350_reloc] @@ -864,6 +958,7 @@ start: 0x7FAEB0 vram: 0x80902120 follows_vram: ovl_007F0350_reloc + compress: True bss_size: 0x490 subsegments: - [0x7FAEB0, asm, overlays/ovl_007FAEB0] @@ -875,6 +970,7 @@ start: 0x804CC0 vram: 0x8090C3C0 follows_vram: ovl_007FAEB0 + compress: True subsegments: - [0x804CC0, data, overlays/ovl_007FAEB0_reloc] @@ -883,6 +979,7 @@ start: 0x805E30 vram: 0x8090D530 follows_vram: ovl_007FAEB0_reloc + compress: True bss_size: 0x490 subsegments: - [0x805E30, asm, overlays/ovl_00805E30] @@ -894,6 +991,7 @@ start: 0x80F760 vram: 0x809172F0 follows_vram: ovl_00805E30 + compress: True subsegments: - [0x80F760, data, overlays/ovl_00805E30_reloc] @@ -902,6 +1000,7 @@ start: 0x8108C0 vram: 0x80918450 follows_vram: ovl_00805E30_reloc + compress: True bss_size: 0x0 subsegments: - [0x8108C0, asm, overlays/ovl_008108C0] @@ -912,6 +1011,7 @@ start: 0x814C50 vram: 0x8091C7E0 follows_vram: ovl_008108C0 + compress: True subsegments: - [0x814C50, data, overlays/ovl_008108C0_reloc] @@ -920,6 +1020,7 @@ start: 0x814FA0 vram: 0x8091CB30 follows_vram: ovl_008108C0_reloc + compress: True bss_size: 0xB0 subsegments: - [0x814FA0, asm, overlays/ovl_00814FA0] @@ -930,6 +1031,7 @@ start: 0x815AD0 vram: 0x8091D710 follows_vram: ovl_00814FA0 + compress: True subsegments: - [0x815AD0, data, overlays/ovl_00814FA0_reloc] @@ -938,6 +1040,7 @@ start: 0x815B70 vram: 0x8091D7B0 follows_vram: ovl_00814FA0_reloc + compress: True bss_size: 0x160 subsegments: - [0x815B70, asm, overlays/ovl_00815B70] @@ -948,6 +1051,7 @@ start: 0x81A1A0 vram: 0x80921F40 follows_vram: ovl_00815B70 + compress: True subsegments: - [0x81A1A0, data, overlays/ovl_00815B70_reloc] @@ -956,6 +1060,7 @@ start: 0x81AA60 vram: 0x80922800 follows_vram: ovl_00815B70_reloc + compress: True bss_size: 0x270 subsegments: - [0x81AA60, asm, overlays/ovl_0081AA60] @@ -967,6 +1072,7 @@ start: 0x81D540 vram: 0x80925550 follows_vram: ovl_0081AA60 + compress: True subsegments: - [0x81D540, data, overlays/ovl_0081AA60_reloc] @@ -975,6 +1081,7 @@ start: 0x81D9D0 vram: 0x809259E0 follows_vram: ovl_0081AA60_reloc + compress: True bss_size: 0x4E0 subsegments: - [0x81D9D0, asm, overlays/ovl_0081D9D0] @@ -985,6 +1092,7 @@ start: 0x821740 vram: 0x80929C30 follows_vram: ovl_0081D9D0 + compress: True subsegments: - [0x821740, data, overlays/ovl_0081D9D0_reloc] @@ -993,6 +1101,7 @@ start: 0x821B40 vram: 0x8092A030 follows_vram: ovl_0081D9D0_reloc + compress: True bss_size: 0x310 subsegments: - [0x821B40, asm, overlays/ovl_00821B40] @@ -1003,6 +1112,7 @@ start: 0x8240D0 vram: 0x8092C8D0 follows_vram: ovl_00821B40 + compress: True subsegments: - [0x8240D0, data, overlays/ovl_00821B40_reloc] @@ -1011,6 +1121,7 @@ start: 0x824500 vram: 0x8092CD00 follows_vram: ovl_00821B40_reloc + compress: True bss_size: 0x0 subsegments: - [0x824500, asm, overlays/ovl_00824500] @@ -1020,6 +1131,7 @@ start: 0x8252E0 vram: 0x8092DAE0 follows_vram: ovl_00824500 + compress: True subsegments: - [0x8252E0, data, overlays/ovl_00824500_reloc] @@ -1028,6 +1140,7 @@ start: 0x8253C0 vram: 0x8092DBC0 follows_vram: ovl_00824500_reloc + compress: True bss_size: 0x380 subsegments: - [0x8253C0, asm, overlays/ovl_008253C0] @@ -1038,6 +1151,7 @@ start: 0x827BE0 vram: 0x80930760 follows_vram: ovl_008253C0 + compress: True subsegments: - [0x827BE0, data, overlays/ovl_008253C0_reloc] @@ -1046,6 +1160,7 @@ start: 0x827DE0 vram: 0x80930960 follows_vram: ovl_008253C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x827DE0, asm, overlays/ovl_00827DE0] @@ -1056,6 +1171,7 @@ start: 0x828C00 vram: 0x80931780 follows_vram: ovl_00827DE0 + compress: True subsegments: - [0x828C00, data, overlays/ovl_00827DE0_reloc] @@ -1064,6 +1180,7 @@ start: 0x828C50 vram: 0x809317D0 follows_vram: ovl_00827DE0_reloc + compress: False bss_size: 0x0 subsegments: - [0x828C50, asm, overlays/ovl_00828C50] @@ -1074,6 +1191,7 @@ start: 0x82B0C0 vram: 0x80933C40 follows_vram: ovl_00828C50 + compress: False subsegments: - [0x82B0C0, data, overlays/ovl_00828C50_reloc] @@ -1082,6 +1200,7 @@ start: 0x82B3C0 vram: 0x80933F40 follows_vram: ovl_00828C50_reloc + compress: True bss_size: 0x40 subsegments: - [0x82B3C0, asm, overlays/ovl_0082B3C0] @@ -1092,6 +1211,7 @@ start: 0x82BAE0 vram: 0x809346A0 follows_vram: ovl_0082B3C0 + compress: True subsegments: - [0x82BAE0, data, overlays/ovl_0082B3C0_reloc] @@ -1100,6 +1220,7 @@ start: 0x82BB80 vram: 0x80934740 follows_vram: ovl_0082B3C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x82BB80, asm, overlays/ovl_0082BB80] @@ -1109,6 +1230,7 @@ start: 0x82BBF0 vram: 0x809347B0 follows_vram: ovl_0082BB80 + compress: True subsegments: - [0x82BBF0, data, overlays/ovl_0082BB80_reloc] @@ -1117,6 +1239,7 @@ start: 0x82BC20 vram: 0x809347E0 follows_vram: ovl_0082BB80_reloc + compress: True bss_size: 0x360 subsegments: - [0x82BC20, asm, overlays/ovl_0082BC20] @@ -1128,6 +1251,7 @@ start: 0x82CDE0 vram: 0x80935D00 follows_vram: ovl_0082BC20 + compress: True subsegments: - [0x82CDE0, data, overlays/ovl_0082BC20_reloc] @@ -1136,6 +1260,7 @@ start: 0x82CED0 vram: 0x80935DF0 follows_vram: ovl_0082BC20_reloc + compress: True bss_size: 0x0 subsegments: - [0x82CED0, asm, overlays/ovl_0082CED0] @@ -1145,6 +1270,7 @@ start: 0x82D7A0 vram: 0x809366C0 follows_vram: ovl_0082CED0 + compress: True subsegments: - [0x82D7A0, data, overlays/ovl_0082CED0_reloc] @@ -1153,6 +1279,7 @@ start: 0x82D7F0 vram: 0x80936710 follows_vram: ovl_0082CED0_reloc + compress: True bss_size: 0x22F0 subsegments: - [0x82D7F0, asm, overlays/ovl_0082D7F0] @@ -1164,6 +1291,7 @@ start: 0x844400 vram: 0x8094F610 follows_vram: ovl_0082D7F0 + compress: True subsegments: - [0x844400, data, overlays/ovl_0082D7F0_reloc] @@ -1172,6 +1300,7 @@ start: 0x845C40 vram: 0x80950E50 follows_vram: ovl_0082D7F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x845C40, asm, overlays/ovl_00845C40] @@ -1182,6 +1311,7 @@ start: 0x8463A0 vram: 0x809515B0 follows_vram: ovl_00845C40 + compress: True subsegments: - [0x8463A0, data, overlays/ovl_00845C40_reloc] @@ -1190,6 +1320,7 @@ start: 0x846430 vram: 0x80951640 follows_vram: ovl_00845C40_reloc + compress: True bss_size: 0x0 subsegments: - [0x846430, asm, overlays/ovl_00846430] @@ -1199,6 +1330,7 @@ start: 0x8464A0 vram: 0x809516B0 follows_vram: ovl_00846430 + compress: True subsegments: - [0x8464A0, data, overlays/ovl_00846430_reloc] @@ -1207,6 +1339,7 @@ start: 0x8464D0 vram: 0x809516E0 follows_vram: ovl_00846430_reloc + compress: True bss_size: 0x0 subsegments: - [0x8464D0, asm, overlays/ovl_008464D0] @@ -1216,6 +1349,7 @@ start: 0x846810 vram: 0x80951A20 follows_vram: ovl_008464D0 + compress: True subsegments: - [0x846810, data, overlays/ovl_008464D0_reloc] @@ -1224,6 +1358,7 @@ start: 0x846860 vram: 0x80951A70 follows_vram: ovl_008464D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x846860, asm, overlays/ovl_00846860] @@ -1234,6 +1369,7 @@ start: 0x8476A0 vram: 0x809528B0 follows_vram: ovl_00846860 + compress: True subsegments: - [0x8476A0, data, overlays/ovl_00846860_reloc] @@ -1242,6 +1378,7 @@ start: 0x8477A0 vram: 0x809529B0 follows_vram: ovl_00846860_reloc + compress: True bss_size: 0x10 subsegments: - [0x8477A0, asm, overlays/ovl_008477A0] @@ -1253,6 +1390,7 @@ start: 0x8484C0 vram: 0x809536E0 follows_vram: ovl_008477A0 + compress: True subsegments: - [0x8484C0, data, overlays/ovl_008477A0_reloc] @@ -1261,6 +1399,7 @@ start: 0x848600 vram: 0x80953820 follows_vram: ovl_008477A0_reloc + compress: True bss_size: 0x10 subsegments: - [0x848600, asm, overlays/ovl_00848600] @@ -1272,6 +1411,7 @@ start: 0x848B40 vram: 0x80953D70 follows_vram: ovl_00848600 + compress: True subsegments: - [0x848B40, data, overlays/ovl_00848600_reloc] @@ -1280,6 +1420,7 @@ start: 0x848BF0 vram: 0x80953E20 follows_vram: ovl_00848600_reloc + compress: True bss_size: 0x0 subsegments: - [0x848BF0, asm, overlays/ovl_00848BF0] @@ -1289,6 +1430,7 @@ start: 0x849AC0 vram: 0x80954CF0 follows_vram: ovl_00848BF0 + compress: True subsegments: - [0x849AC0, data, overlays/ovl_00848BF0_reloc] @@ -1297,6 +1439,7 @@ start: 0x849B50 vram: 0x80954D80 follows_vram: ovl_00848BF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x849B50, asm, overlays/ovl_00849B50] @@ -1306,6 +1449,7 @@ start: 0x84C8A0 vram: 0x80957AD0 follows_vram: ovl_00849B50 + compress: True subsegments: - [0x84C8A0, data, overlays/ovl_00849B50_reloc] @@ -1314,6 +1458,7 @@ start: 0x84CBC0 vram: 0x80957DF0 follows_vram: ovl_00849B50_reloc + compress: True bss_size: 0x0 subsegments: - [0x84CBC0, asm, overlays/ovl_0084CBC0] @@ -1323,6 +1468,7 @@ start: 0x84D110 vram: 0x80958340 follows_vram: ovl_0084CBC0 + compress: True subsegments: - [0x84D110, data, overlays/ovl_0084CBC0_reloc] @@ -1331,6 +1477,7 @@ start: 0x84D180 vram: 0x809583B0 follows_vram: ovl_0084CBC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x84D180, asm, overlays/ovl_0084D180] @@ -1340,6 +1487,7 @@ start: 0x84E000 vram: 0x80959230 follows_vram: ovl_0084D180 + compress: True subsegments: - [0x84E000, data, overlays/ovl_0084D180_reloc] @@ -1348,6 +1496,7 @@ start: 0x84E080 vram: 0x809592B0 follows_vram: ovl_0084D180_reloc + compress: True bss_size: 0x0 subsegments: - [0x84E080, asm, overlays/ovl_0084E080] @@ -1358,6 +1507,7 @@ start: 0x84F0E0 vram: 0x8095A310 follows_vram: ovl_0084E080 + compress: True subsegments: - [0x84F0E0, data, overlays/ovl_0084E080_reloc] @@ -1366,6 +1516,7 @@ start: 0x84F180 vram: 0x8095A3B0 follows_vram: ovl_0084E080_reloc + compress: True bss_size: 0x0 subsegments: - [0x84F180, asm, overlays/ovl_0084F180] @@ -1376,6 +1527,7 @@ start: 0x8504F0 vram: 0x8095B720 follows_vram: ovl_0084F180 + compress: True subsegments: - [0x8504F0, data, overlays/ovl_0084F180_reloc] @@ -1384,6 +1536,7 @@ start: 0x850680 vram: 0x8095B8B0 follows_vram: ovl_0084F180_reloc + compress: True bss_size: 0x130 subsegments: - [0x850680, asm, overlays/ovl_00850680] @@ -1395,6 +1548,7 @@ start: 0x857100 vram: 0x80962460 follows_vram: ovl_00850680 + compress: True subsegments: - [0x857100, data, overlays/ovl_00850680_reloc] @@ -1403,6 +1557,7 @@ start: 0x8576C0 vram: 0x80962A20 follows_vram: ovl_00850680_reloc + compress: True bss_size: 0x10 subsegments: - [0x8576C0, asm, overlays/ovl_008576C0] @@ -1414,6 +1569,7 @@ start: 0x858960 vram: 0x80963CD0 follows_vram: ovl_008576C0 + compress: True subsegments: - [0x858960, data, overlays/ovl_008576C0_reloc] @@ -1422,6 +1578,7 @@ start: 0x858A50 vram: 0x80963DC0 follows_vram: ovl_008576C0_reloc + compress: True bss_size: 0x30 subsegments: - [0x858A50, asm, overlays/ovl_00858A50] @@ -1433,6 +1590,7 @@ start: 0x85A180 vram: 0x80965520 follows_vram: ovl_00858A50 + compress: True subsegments: - [0x85A180, data, overlays/ovl_00858A50_reloc] @@ -1441,6 +1599,7 @@ start: 0x85A400 vram: 0x809657A0 follows_vram: ovl_00858A50_reloc + compress: True bss_size: 0x10 subsegments: - [0x85A400, asm, overlays/ovl_0085A400] @@ -1451,6 +1610,7 @@ start: 0x85A880 vram: 0x80965C30 follows_vram: ovl_0085A400 + compress: True subsegments: - [0x85A880, data, overlays/ovl_0085A400_reloc] @@ -1459,6 +1619,7 @@ start: 0x85A8E0 vram: 0x80965C90 follows_vram: ovl_0085A400_reloc + compress: True bss_size: 0x0 subsegments: - [0x85A8E0, asm, overlays/ovl_0085A8E0] @@ -1469,6 +1630,7 @@ start: 0x85B0F0 vram: 0x809664A0 follows_vram: ovl_0085A8E0 + compress: True subsegments: - [0x85B0F0, data, overlays/ovl_0085A8E0_reloc] @@ -1477,6 +1639,7 @@ start: 0x85B170 vram: 0x80966520 follows_vram: ovl_0085A8E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x85B170, asm, overlays/ovl_0085B170] @@ -1487,6 +1650,7 @@ start: 0x85B8D0 vram: 0x80966C80 follows_vram: ovl_0085B170 + compress: True subsegments: - [0x85B8D0, data, overlays/ovl_0085B170_reloc] @@ -1495,6 +1659,7 @@ start: 0x85B960 vram: 0x80966D10 follows_vram: ovl_0085B170_reloc + compress: True bss_size: 0x0 subsegments: - [0x85B960, asm, overlays/ovl_0085B960] @@ -1505,6 +1670,7 @@ start: 0x85C160 vram: 0x80967510 follows_vram: ovl_0085B960 + compress: True subsegments: - [0x85C160, data, overlays/ovl_0085B960_reloc] @@ -1513,6 +1679,7 @@ start: 0x85C200 vram: 0x809675B0 follows_vram: ovl_0085B960_reloc + compress: True bss_size: 0x0 subsegments: - [0x85C200, asm, overlays/ovl_0085C200] @@ -1522,6 +1689,7 @@ start: 0x85C510 vram: 0x809678C0 follows_vram: ovl_0085C200 + compress: True subsegments: - [0x85C510, data, overlays/ovl_0085C200_reloc] @@ -1530,6 +1698,7 @@ start: 0x85C570 vram: 0x80967920 follows_vram: ovl_0085C200_reloc + compress: True bss_size: 0x0 subsegments: - [0x85C570, asm, overlays/ovl_0085C570] @@ -1540,6 +1709,7 @@ start: 0x85D4B0 vram: 0x80968860 follows_vram: ovl_0085C570 + compress: True subsegments: - [0x85D4B0, data, overlays/ovl_0085C570_reloc] @@ -1548,6 +1718,7 @@ start: 0x85D660 vram: 0x80968A10 follows_vram: ovl_0085C570_reloc + compress: True bss_size: 0x10 subsegments: - [0x85D660, asm, overlays/ovl_0085D660] @@ -1559,6 +1730,7 @@ start: 0x85F5D0 vram: 0x8096A990 follows_vram: ovl_0085D660 + compress: True subsegments: - [0x85F5D0, data, overlays/ovl_0085D660_reloc] @@ -1567,6 +1739,7 @@ start: 0x85F7D0 vram: 0x8096AB90 follows_vram: ovl_0085D660_reloc + compress: True bss_size: 0x0 subsegments: - [0x85F7D0, asm, overlays/ovl_0085F7D0] @@ -1577,6 +1750,7 @@ start: 0x861260 vram: 0x8096C620 follows_vram: ovl_0085F7D0 + compress: True subsegments: - [0x861260, data, overlays/ovl_0085F7D0_reloc] @@ -1585,6 +1759,7 @@ start: 0x861420 vram: 0x8096C7E0 follows_vram: ovl_0085F7D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x861420, asm, overlays/ovl_00861420] @@ -1594,6 +1769,7 @@ start: 0x8622A0 vram: 0x8096D660 follows_vram: ovl_00861420 + compress: True subsegments: - [0x8622A0, data, overlays/ovl_00861420_reloc] @@ -1602,6 +1778,7 @@ start: 0x8623E0 vram: 0x8096D7A0 follows_vram: ovl_00861420_reloc + compress: True bss_size: 0x0 subsegments: - [0x8623E0, asm, overlays/ovl_008623E0] @@ -1611,6 +1788,7 @@ start: 0x862840 vram: 0x8096DC00 follows_vram: ovl_008623E0 + compress: True subsegments: - [0x862840, data, overlays/ovl_008623E0_reloc] @@ -1619,6 +1797,7 @@ start: 0x862870 vram: 0x8096DC30 follows_vram: ovl_008623E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x862870, asm, overlays/ovl_00862870] @@ -1629,6 +1808,7 @@ start: 0x866A80 vram: 0x80971E40 follows_vram: ovl_00862870 + compress: True subsegments: - [0x866A80, data, overlays/ovl_00862870_reloc] @@ -1637,6 +1817,7 @@ start: 0x866ED0 vram: 0x80972290 follows_vram: ovl_00862870_reloc + compress: True bss_size: 0x0 subsegments: - [0x866ED0, asm, overlays/ovl_00866ED0] @@ -1647,6 +1828,7 @@ start: 0x8675C0 vram: 0x80972980 follows_vram: ovl_00866ED0 + compress: True subsegments: - [0x8675C0, data, overlays/ovl_00866ED0_reloc] @@ -1655,6 +1837,7 @@ start: 0x867620 vram: 0x809729E0 follows_vram: ovl_00866ED0_reloc + compress: True bss_size: 0x0 subsegments: - [0x867620, asm, overlays/ovl_00867620] @@ -1664,6 +1847,7 @@ start: 0x867880 vram: 0x80972C40 follows_vram: ovl_00867620 + compress: True subsegments: - [0x867880, data, overlays/ovl_00867620_reloc] @@ -1672,6 +1856,7 @@ start: 0x8678C0 vram: 0x80972C80 follows_vram: ovl_00867620_reloc + compress: True bss_size: 0x0 subsegments: - [0x8678C0, asm, overlays/ovl_008678C0] @@ -1682,6 +1867,7 @@ start: 0x867C20 vram: 0x80972FE0 follows_vram: ovl_008678C0 + compress: True subsegments: - [0x867C20, data, overlays/ovl_008678C0_reloc] @@ -1690,6 +1876,7 @@ start: 0x867C60 vram: 0x80973020 follows_vram: ovl_008678C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x867C60, asm, overlays/ovl_00867C60] @@ -1699,6 +1886,7 @@ start: 0x867CD0 vram: 0x80973090 follows_vram: ovl_00867C60 + compress: True subsegments: - [0x867CD0, data, overlays/ovl_00867C60_reloc] @@ -1707,6 +1895,7 @@ start: 0x867D00 vram: 0x809730C0 follows_vram: ovl_00867C60_reloc + compress: True bss_size: 0x0 subsegments: - [0x867D00, asm, overlays/ovl_00867D00] @@ -1716,6 +1905,7 @@ start: 0x867D70 vram: 0x80973130 follows_vram: ovl_00867D00 + compress: True subsegments: - [0x867D70, data, overlays/ovl_00867D00_reloc] @@ -1724,6 +1914,7 @@ start: 0x867DA0 vram: 0x80973160 follows_vram: ovl_00867D00_reloc + compress: True bss_size: 0x0 subsegments: - [0x867DA0, asm, overlays/ovl_00867DA0] @@ -1733,6 +1924,7 @@ start: 0x8681B0 vram: 0x80973570 follows_vram: ovl_00867DA0 + compress: True subsegments: - [0x8681B0, data, overlays/ovl_00867DA0_reloc] @@ -1741,6 +1933,7 @@ start: 0x8681F0 vram: 0x809735B0 follows_vram: ovl_00867DA0_reloc + compress: True bss_size: 0x10F70 subsegments: - [0x8681F0, asm, overlays/ovl_008681F0] @@ -1752,6 +1945,7 @@ start: 0x878550 vram: 0x80994880 follows_vram: ovl_008681F0 + compress: True subsegments: - [0x878550, data, overlays/ovl_008681F0_reloc] @@ -1760,6 +1954,7 @@ start: 0x8798C0 vram: 0x80995BF0 follows_vram: ovl_008681F0_reloc + compress: True bss_size: 0x4C0 subsegments: - [0x8798C0, asm, overlays/ovl_008798C0] @@ -1771,6 +1966,7 @@ start: 0x886FA0 vram: 0x809A3790 follows_vram: ovl_008798C0 + compress: True subsegments: - [0x886FA0, data, overlays/ovl_008798C0_reloc] @@ -1779,6 +1975,7 @@ start: 0x887F90 vram: 0x809A4780 follows_vram: ovl_008798C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x887F90, asm, overlays/ovl_00887F90] @@ -1788,6 +1985,7 @@ start: 0x889110 vram: 0x809A5900 follows_vram: ovl_00887F90 + compress: True subsegments: - [0x889110, data, overlays/ovl_00887F90_reloc] @@ -1796,6 +1994,7 @@ start: 0x889270 vram: 0x809A5A60 follows_vram: ovl_00887F90_reloc + compress: True bss_size: 0x0 subsegments: - [0x889270, asm, overlays/ovl_00889270] @@ -1805,6 +2004,7 @@ start: 0x889400 vram: 0x809A5BF0 follows_vram: ovl_00889270 + compress: True subsegments: - [0x889400, data, overlays/ovl_00889270_reloc] @@ -1813,6 +2013,7 @@ start: 0x889440 vram: 0x809A5C30 follows_vram: ovl_00889270_reloc + compress: True bss_size: 0x0 subsegments: - [0x889440, asm, overlays/ovl_00889440] @@ -1823,6 +2024,7 @@ start: 0x88D780 vram: 0x809A9F70 follows_vram: ovl_00889440 + compress: True subsegments: - [0x88D780, data, overlays/ovl_00889440_reloc] @@ -1831,6 +2033,7 @@ start: 0x88DD00 vram: 0x809AA4F0 follows_vram: ovl_00889440_reloc + compress: True bss_size: 0x0 subsegments: - [0x88DD00, asm, overlays/ovl_0088DD00] @@ -1841,6 +2044,7 @@ start: 0x892070 vram: 0x809AE860 follows_vram: ovl_0088DD00 + compress: True subsegments: - [0x892070, data, overlays/ovl_0088DD00_reloc] @@ -1849,6 +2053,7 @@ start: 0x892600 vram: 0x809AEDF0 follows_vram: ovl_0088DD00_reloc + compress: True bss_size: 0x0 subsegments: - [0x892600, asm, overlays/ovl_00892600] @@ -1858,6 +2063,7 @@ start: 0x8927D0 vram: 0x809AEFC0 follows_vram: ovl_00892600 + compress: True subsegments: - [0x8927D0, data, overlays/ovl_00892600_reloc] @@ -1866,6 +2072,7 @@ start: 0x892810 vram: 0x809AF000 follows_vram: ovl_00892600_reloc + compress: True bss_size: 0x0 subsegments: - [0x892810, asm, overlays/ovl_00892810] @@ -1876,6 +2083,7 @@ start: 0x8947C0 vram: 0x809B0FB0 follows_vram: ovl_00892810 + compress: True subsegments: - [0x8947C0, data, overlays/ovl_00892810_reloc] @@ -1884,6 +2092,7 @@ start: 0x894A70 vram: 0x809B1260 follows_vram: ovl_00892810_reloc + compress: True bss_size: 0x0 subsegments: - [0x894A70, asm, overlays/ovl_00894A70] @@ -1894,6 +2103,7 @@ start: 0x8967C0 vram: 0x809B2FB0 follows_vram: ovl_00894A70 + compress: True subsegments: - [0x8967C0, data, overlays/ovl_00894A70_reloc] @@ -1902,6 +2112,7 @@ start: 0x896A30 vram: 0x809B3220 follows_vram: ovl_00894A70_reloc + compress: True bss_size: 0x0 subsegments: - [0x896A30, asm, overlays/ovl_00896A30] @@ -1912,6 +2123,7 @@ start: 0x897350 vram: 0x809B3B40 follows_vram: ovl_00896A30 + compress: True subsegments: - [0x897350, data, overlays/ovl_00896A30_reloc] @@ -1920,6 +2132,7 @@ start: 0x897450 vram: 0x809B3C40 follows_vram: ovl_00896A30_reloc + compress: True bss_size: 0x0 subsegments: - [0x897450, asm, overlays/ovl_00897450] @@ -1930,6 +2143,7 @@ start: 0x8980D0 vram: 0x809B48C0 follows_vram: ovl_00897450 + compress: True subsegments: - [0x8980D0, data, overlays/ovl_00897450_reloc] @@ -1938,6 +2152,7 @@ start: 0x898220 vram: 0x809B4A10 follows_vram: ovl_00897450_reloc + compress: True bss_size: 0x0 subsegments: - [0x898220, asm, overlays/ovl_00898220] @@ -1948,6 +2163,7 @@ start: 0x899040 vram: 0x809B5830 follows_vram: ovl_00898220 + compress: True subsegments: - [0x899040, data, overlays/ovl_00898220_reloc] @@ -1956,6 +2172,7 @@ start: 0x8991B0 vram: 0x809B59A0 follows_vram: ovl_00898220_reloc + compress: True bss_size: 0x10 subsegments: - [0x8991B0, asm, overlays/ovl_008991B0] @@ -1967,6 +2184,7 @@ start: 0x89A020 vram: 0x809B6820 follows_vram: ovl_008991B0 + compress: True subsegments: - [0x89A020, data, overlays/ovl_008991B0_reloc] @@ -1975,6 +2193,7 @@ start: 0x89A1B0 vram: 0x809B69B0 follows_vram: ovl_008991B0_reloc + compress: True bss_size: 0x10 subsegments: - [0x89A1B0, asm, overlays/ovl_0089A1B0] @@ -1986,6 +2205,7 @@ start: 0x8A0B50 vram: 0x809BD360 follows_vram: ovl_0089A1B0 + compress: True subsegments: - [0x8A0B50, data, overlays/ovl_0089A1B0_reloc] @@ -1994,6 +2214,7 @@ start: 0x8A1160 vram: 0x809BD970 follows_vram: ovl_0089A1B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8A1160, asm, overlays/ovl_008A1160] @@ -2003,6 +2224,7 @@ start: 0x8A1E00 vram: 0x809BE610 follows_vram: ovl_008A1160 + compress: True subsegments: - [0x8A1E00, data, overlays/ovl_008A1160_reloc] @@ -2011,6 +2233,7 @@ start: 0x8A1F10 vram: 0x809BE720 follows_vram: ovl_008A1160_reloc + compress: True bss_size: 0x0 subsegments: - [0x8A1F10, asm, overlays/ovl_008A1F10] @@ -2021,6 +2244,7 @@ start: 0x8A4630 vram: 0x809C0E40 follows_vram: ovl_008A1F10 + compress: True subsegments: - [0x8A4630, data, overlays/ovl_008A1F10_reloc] @@ -2029,6 +2253,7 @@ start: 0x8A4940 vram: 0x809C1150 follows_vram: ovl_008A1F10_reloc + compress: True bss_size: 0x0 subsegments: - [0x8A4940, asm, overlays/ovl_008A4940] @@ -2038,6 +2263,7 @@ start: 0x8A5670 vram: 0x809C1E80 follows_vram: ovl_008A4940 + compress: True subsegments: - [0x8A5670, data, overlays/ovl_008A4940_reloc] @@ -2046,6 +2272,7 @@ start: 0x8A5760 vram: 0x809C1F70 follows_vram: ovl_008A4940_reloc + compress: True bss_size: 0x0 subsegments: - [0x8A5760, asm, overlays/ovl_008A5760] @@ -2056,6 +2283,7 @@ start: 0x8A6A60 vram: 0x809C3270 follows_vram: ovl_008A5760 + compress: True subsegments: - [0x8A6A60, data, overlays/ovl_008A5760_reloc] @@ -2064,6 +2292,7 @@ start: 0x8A6C10 vram: 0x809C3420 follows_vram: ovl_008A5760_reloc + compress: True bss_size: 0x0 subsegments: - [0x8A6C10, asm, overlays/ovl_008A6C10] @@ -2074,6 +2303,7 @@ start: 0x8A8A10 vram: 0x809C5220 follows_vram: ovl_008A6C10 + compress: True subsegments: - [0x8A8A10, data, overlays/ovl_008A6C10_reloc] @@ -2082,6 +2312,7 @@ start: 0x8A8C80 vram: 0x809C5490 follows_vram: ovl_008A6C10_reloc + compress: True bss_size: 0x0 subsegments: - [0x8A8C80, asm, overlays/ovl_008A8C80] @@ -2092,6 +2323,7 @@ start: 0x8AA170 vram: 0x809C6980 follows_vram: ovl_008A8C80 + compress: True subsegments: - [0x8AA170, data, overlays/ovl_008A8C80_reloc] @@ -2100,6 +2332,7 @@ start: 0x8AA370 vram: 0x809C6B80 follows_vram: ovl_008A8C80_reloc + compress: True bss_size: 0x0 subsegments: - [0x8AA370, asm, overlays/ovl_008AA370] @@ -2110,6 +2343,7 @@ start: 0x8AB600 vram: 0x809C7E10 follows_vram: ovl_008AA370 + compress: True subsegments: - [0x8AB600, data, overlays/ovl_008AA370_reloc] @@ -2118,6 +2352,7 @@ start: 0x8AB7E0 vram: 0x809C7FF0 follows_vram: ovl_008AA370_reloc + compress: True bss_size: 0x0 subsegments: - [0x8AB7E0, asm, overlays/ovl_008AB7E0] @@ -2128,6 +2363,7 @@ start: 0x8ADBA0 vram: 0x809CA3B0 follows_vram: ovl_008AB7E0 + compress: True subsegments: - [0x8ADBA0, data, overlays/ovl_008AB7E0_reloc] @@ -2136,6 +2372,7 @@ start: 0x8ADF40 vram: 0x809CA750 follows_vram: ovl_008AB7E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8ADF40, asm, overlays/ovl_008ADF40] @@ -2146,6 +2383,7 @@ start: 0x8B2140 vram: 0x809CE950 follows_vram: ovl_008ADF40 + compress: True subsegments: - [0x8B2140, data, overlays/ovl_008ADF40_reloc] @@ -2154,6 +2392,7 @@ start: 0x8B26B0 vram: 0x809CEEC0 follows_vram: ovl_008ADF40_reloc + compress: True bss_size: 0x0 subsegments: - [0x8B26B0, asm, overlays/ovl_008B26B0] @@ -2163,6 +2402,7 @@ start: 0x8B2C20 vram: 0x809CF430 follows_vram: ovl_008B26B0 + compress: True subsegments: - [0x8B2C20, data, overlays/ovl_008B26B0_reloc] @@ -2171,6 +2411,7 @@ start: 0x8B2CE0 vram: 0x809CF4F0 follows_vram: ovl_008B26B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8B2CE0, asm, overlays/ovl_008B2CE0] @@ -2181,6 +2422,7 @@ start: 0x8B7410 vram: 0x809D3C20 follows_vram: ovl_008B2CE0 + compress: True subsegments: - [0x8B7410, data, overlays/ovl_008B2CE0_reloc] @@ -2189,6 +2431,7 @@ start: 0x8B79B0 vram: 0x809D41C0 follows_vram: ovl_008B2CE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8B79B0, asm, overlays/ovl_008B79B0] @@ -2199,6 +2442,7 @@ start: 0x8B8E00 vram: 0x809D5610 follows_vram: ovl_008B79B0 + compress: True subsegments: - [0x8B8E00, data, overlays/ovl_008B79B0_reloc] @@ -2207,6 +2451,7 @@ start: 0x8B8FC0 vram: 0x809D57D0 follows_vram: ovl_008B79B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8B8FC0, asm, overlays/ovl_008B8FC0] @@ -2216,6 +2461,7 @@ start: 0x8BA290 vram: 0x809D6AA0 follows_vram: ovl_008B8FC0 + compress: True subsegments: - [0x8BA290, data, overlays/ovl_008B8FC0_reloc] @@ -2224,6 +2470,7 @@ start: 0x8BA3B0 vram: 0x809D6BC0 follows_vram: ovl_008B8FC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8BA3B0, asm, overlays/ovl_008BA3B0] @@ -2233,6 +2480,7 @@ start: 0x8BADB0 vram: 0x809D75C0 follows_vram: ovl_008BA3B0 + compress: True subsegments: - [0x8BADB0, data, overlays/ovl_008BA3B0_reloc] @@ -2241,6 +2489,7 @@ start: 0x8BAE60 vram: 0x809D7670 follows_vram: ovl_008BA3B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8BAE60, asm, overlays/ovl_008BAE60] @@ -2251,6 +2500,7 @@ start: 0x8BB990 vram: 0x809D81A0 follows_vram: ovl_008BAE60 + compress: True subsegments: - [0x8BB990, data, overlays/ovl_008BAE60_reloc] @@ -2259,6 +2509,7 @@ start: 0x8BBAA0 vram: 0x809D82B0 follows_vram: ovl_008BAE60_reloc + compress: True bss_size: 0x0 subsegments: - [0x8BBAA0, asm, overlays/ovl_008BBAA0] @@ -2269,6 +2520,7 @@ start: 0x8BD250 vram: 0x809D9A60 follows_vram: ovl_008BBAA0 + compress: True subsegments: - [0x8BD250, data, overlays/ovl_008BBAA0_reloc] @@ -2277,6 +2529,7 @@ start: 0x8BD480 vram: 0x809D9C90 follows_vram: ovl_008BBAA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8BD480, asm, overlays/ovl_008BD480] @@ -2286,6 +2539,7 @@ start: 0x8BE570 vram: 0x809DAD80 follows_vram: ovl_008BD480 + compress: True subsegments: - [0x8BE570, data, overlays/ovl_008BD480_reloc] @@ -2294,6 +2548,7 @@ start: 0x8BE690 vram: 0x809DAEA0 follows_vram: ovl_008BD480_reloc + compress: True bss_size: 0x0 subsegments: - [0x8BE690, asm, overlays/ovl_008BE690] @@ -2304,6 +2559,7 @@ start: 0x8BFAB0 vram: 0x809DC2C0 follows_vram: ovl_008BE690 + compress: True subsegments: - [0x8BFAB0, data, overlays/ovl_008BE690_reloc] @@ -2312,6 +2568,7 @@ start: 0x8BFC40 vram: 0x809DC450 follows_vram: ovl_008BE690_reloc + compress: True bss_size: 0x0 subsegments: - [0x8BFC40, asm, overlays/ovl_008BFC40] @@ -2321,6 +2578,7 @@ start: 0x8C0320 vram: 0x809DCB30 follows_vram: ovl_008BFC40 + compress: True subsegments: - [0x8C0320, data, overlays/ovl_008BFC40_reloc] @@ -2329,6 +2587,7 @@ start: 0x8C03E0 vram: 0x809DCBF0 follows_vram: ovl_008BFC40_reloc + compress: True bss_size: 0x0 subsegments: - [0x8C03E0, asm, overlays/ovl_008C03E0] @@ -2339,6 +2598,7 @@ start: 0x8C0F20 vram: 0x809DD730 follows_vram: ovl_008C03E0 + compress: True subsegments: - [0x8C0F20, data, overlays/ovl_008C03E0_reloc] @@ -2347,6 +2607,7 @@ start: 0x8C1040 vram: 0x809DD850 follows_vram: ovl_008C03E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8C1040, asm, overlays/ovl_008C1040] @@ -2356,6 +2617,7 @@ start: 0x8C1A20 vram: 0x809DE230 follows_vram: ovl_008C1040 + compress: True subsegments: - [0x8C1A20, data, overlays/ovl_008C1040_reloc] @@ -2364,6 +2626,7 @@ start: 0x8C1B30 vram: 0x809DE340 follows_vram: ovl_008C1040_reloc + compress: True bss_size: 0x0 subsegments: - [0x8C1B30, asm, overlays/ovl_008C1B30] @@ -2373,6 +2636,7 @@ start: 0x8C2370 vram: 0x809DEB80 follows_vram: ovl_008C1B30 + compress: True subsegments: - [0x8C2370, data, overlays/ovl_008C1B30_reloc] @@ -2381,6 +2645,7 @@ start: 0x8C2480 vram: 0x809DEC90 follows_vram: ovl_008C1B30_reloc + compress: True bss_size: 0x0 subsegments: - [0x8C2480, asm, overlays/ovl_008C2480] @@ -2391,6 +2656,7 @@ start: 0x8C2E60 vram: 0x809DF670 follows_vram: ovl_008C2480 + compress: True subsegments: - [0x8C2E60, data, overlays/ovl_008C2480_reloc] @@ -2399,6 +2665,7 @@ start: 0x8C2F70 vram: 0x809DF780 follows_vram: ovl_008C2480_reloc + compress: True bss_size: 0x0 subsegments: - [0x8C2F70, asm, overlays/ovl_008C2F70] @@ -2408,6 +2675,7 @@ start: 0x8C31C0 vram: 0x809DF9D0 follows_vram: ovl_008C2F70 + compress: True subsegments: - [0x8C31C0, data, overlays/ovl_008C2F70_reloc] @@ -2416,6 +2684,7 @@ start: 0x8C3210 vram: 0x809DFA20 follows_vram: ovl_008C2F70_reloc + compress: True bss_size: 0x0 subsegments: - [0x8C3210, asm, overlays/ovl_008C3210] @@ -2425,6 +2694,7 @@ start: 0x8C3930 vram: 0x809E0140 follows_vram: ovl_008C3210 + compress: True subsegments: - [0x8C3930, data, overlays/ovl_008C3210_reloc] @@ -2433,6 +2703,7 @@ start: 0x8C3A00 vram: 0x809E0210 follows_vram: ovl_008C3210_reloc + compress: True bss_size: 0x0 subsegments: - [0x8C3A00, asm, overlays/ovl_008C3A00] @@ -2442,6 +2713,7 @@ start: 0x8C4230 vram: 0x809E0A40 follows_vram: ovl_008C3A00 + compress: True subsegments: - [0x8C4230, data, overlays/ovl_008C3A00_reloc] @@ -2450,6 +2722,7 @@ start: 0x8C4300 vram: 0x809E0B10 follows_vram: ovl_008C3A00_reloc + compress: True bss_size: 0x0 subsegments: - [0x8C4300, asm, overlays/ovl_008C4300] @@ -2459,6 +2732,7 @@ start: 0x8C4E40 vram: 0x809E1650 follows_vram: ovl_008C4300 + compress: True subsegments: - [0x8C4E40, data, overlays/ovl_008C4300_reloc] @@ -2467,6 +2741,7 @@ start: 0x8C4F70 vram: 0x809E1780 follows_vram: ovl_008C4300_reloc + compress: True bss_size: 0x0 subsegments: - [0x8C4F70, asm, overlays/ovl_008C4F70] @@ -2477,6 +2752,7 @@ start: 0x8C6210 vram: 0x809E2A20 follows_vram: ovl_008C4F70 + compress: True subsegments: - [0x8C6210, data, overlays/ovl_008C4F70_reloc] @@ -2485,6 +2761,7 @@ start: 0x8C6390 vram: 0x809E2BA0 follows_vram: ovl_008C4F70_reloc + compress: True bss_size: 0x20 subsegments: - [0x8C6390, asm, overlays/ovl_008C6390] @@ -2495,6 +2772,7 @@ start: 0x8C6C50 vram: 0x809E3480 follows_vram: ovl_008C6390 + compress: True subsegments: - [0x8C6C50, data, overlays/ovl_008C6390_reloc] @@ -2503,6 +2781,7 @@ start: 0x8C6D80 vram: 0x809E35B0 follows_vram: ovl_008C6390_reloc + compress: True bss_size: 0x0 subsegments: - [0x8C6D80, asm, overlays/ovl_008C6D80] @@ -2513,6 +2792,7 @@ start: 0x8C7FD0 vram: 0x809E4800 follows_vram: ovl_008C6D80 + compress: True subsegments: - [0x8C7FD0, data, overlays/ovl_008C6D80_reloc] @@ -2521,6 +2801,7 @@ start: 0x8C81F0 vram: 0x809E4A20 follows_vram: ovl_008C6D80_reloc + compress: True bss_size: 0x0 subsegments: - [0x8C81F0, asm, overlays/ovl_008C81F0] @@ -2530,6 +2811,7 @@ start: 0x8C8DF0 vram: 0x809E5620 follows_vram: ovl_008C81F0 + compress: True subsegments: - [0x8C8DF0, data, overlays/ovl_008C81F0_reloc] @@ -2538,6 +2820,7 @@ start: 0x8C8F10 vram: 0x809E5740 follows_vram: ovl_008C81F0_reloc + compress: True bss_size: 0x10 subsegments: - [0x8C8F10, asm, overlays/ovl_008C8F10] @@ -2548,6 +2831,7 @@ start: 0x8C9AC0 vram: 0x809E6300 follows_vram: ovl_008C8F10 + compress: True subsegments: - [0x8C9AC0, data, overlays/ovl_008C8F10_reloc] @@ -2556,6 +2840,7 @@ start: 0x8C9BB0 vram: 0x809E63F0 follows_vram: ovl_008C8F10_reloc + compress: True bss_size: 0x0 subsegments: - [0x8C9BB0, asm, overlays/ovl_008C9BB0] @@ -2565,6 +2850,7 @@ start: 0x8CA870 vram: 0x809E70B0 follows_vram: ovl_008C9BB0 + compress: True subsegments: - [0x8CA870, data, overlays/ovl_008C9BB0_reloc] @@ -2573,6 +2859,7 @@ start: 0x8CA950 vram: 0x809E7190 follows_vram: ovl_008C9BB0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8CA950, asm, overlays/ovl_008CA950] @@ -2582,6 +2869,7 @@ start: 0x8CB5C0 vram: 0x809E7E00 follows_vram: ovl_008CA950 + compress: True subsegments: - [0x8CB5C0, data, overlays/ovl_008CA950_reloc] @@ -2590,6 +2878,7 @@ start: 0x8CB690 vram: 0x809E7ED0 follows_vram: ovl_008CA950_reloc + compress: True bss_size: 0x14AF0 subsegments: - [0x8CB690, asm, overlays/ovl_008CB690] @@ -2601,6 +2890,7 @@ start: 0x8CD350 vram: 0x809FE680 follows_vram: ovl_008CB690 + compress: True subsegments: - [0x8CD350, data, overlays/ovl_008CB690_reloc] @@ -2609,6 +2899,7 @@ start: 0x8CD550 vram: 0x809FE880 follows_vram: ovl_008CB690_reloc + compress: True bss_size: 0x0 subsegments: - [0x8CD550, asm, overlays/ovl_008CD550] @@ -2619,6 +2910,7 @@ start: 0x8CE770 vram: 0x809FFAA0 follows_vram: ovl_008CD550 + compress: True subsegments: - [0x8CE770, data, overlays/ovl_008CD550_reloc] @@ -2627,6 +2919,7 @@ start: 0x8CE890 vram: 0x809FFBC0 follows_vram: ovl_008CD550_reloc + compress: True bss_size: 0x0 subsegments: - [0x8CE890, asm, overlays/ovl_008CE890] @@ -2637,6 +2930,7 @@ start: 0x8CFA70 vram: 0x80A00DA0 follows_vram: ovl_008CE890 + compress: True subsegments: - [0x8CFA70, data, overlays/ovl_008CE890_reloc] @@ -2645,6 +2939,7 @@ start: 0x8CFBA0 vram: 0x80A00ED0 follows_vram: ovl_008CE890_reloc + compress: True bss_size: 0x0 subsegments: - [0x8CFBA0, asm, overlays/ovl_008CFBA0] @@ -2655,6 +2950,7 @@ start: 0x8D0BF0 vram: 0x80A01F20 follows_vram: ovl_008CFBA0 + compress: True subsegments: - [0x8D0BF0, data, overlays/ovl_008CFBA0_reloc] @@ -2663,6 +2959,7 @@ start: 0x8D0D20 vram: 0x80A02050 follows_vram: ovl_008CFBA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8D0D20, asm, overlays/ovl_008D0D20] @@ -2673,6 +2970,7 @@ start: 0x8D1DD0 vram: 0x80A03100 follows_vram: ovl_008D0D20 + compress: True subsegments: - [0x8D1DD0, data, overlays/ovl_008D0D20_reloc] @@ -2681,6 +2979,7 @@ start: 0x8D1F00 vram: 0x80A03230 follows_vram: ovl_008D0D20_reloc + compress: True bss_size: 0x0 subsegments: - [0x8D1F00, asm, overlays/ovl_008D1F00] @@ -2690,6 +2989,7 @@ start: 0x8D2140 vram: 0x80A03470 follows_vram: ovl_008D1F00 + compress: True subsegments: - [0x8D2140, data, overlays/ovl_008D1F00_reloc] @@ -2698,6 +2998,7 @@ start: 0x8D2170 vram: 0x80A034A0 follows_vram: ovl_008D1F00_reloc + compress: True bss_size: 0x0 subsegments: - [0x8D2170, asm, overlays/ovl_008D2170] @@ -2707,6 +3008,7 @@ start: 0x8D2410 vram: 0x80A03740 follows_vram: ovl_008D2170 + compress: True subsegments: - [0x8D2410, data, overlays/ovl_008D2170_reloc] @@ -2715,6 +3017,7 @@ start: 0x8D2440 vram: 0x80A03770 follows_vram: ovl_008D2170_reloc + compress: True bss_size: 0x0 subsegments: - [0x8D2440, asm, overlays/ovl_008D2440] @@ -2725,6 +3028,7 @@ start: 0x8D3B80 vram: 0x80A04EB0 follows_vram: ovl_008D2440 + compress: True subsegments: - [0x8D3B80, data, overlays/ovl_008D2440_reloc] @@ -2733,6 +3037,7 @@ start: 0x8D3D00 vram: 0x80A05030 follows_vram: ovl_008D2440_reloc + compress: True bss_size: 0x0 subsegments: - [0x8D3D00, asm, overlays/ovl_008D3D00] @@ -2743,6 +3048,7 @@ start: 0x8D4970 vram: 0x80A05CA0 follows_vram: ovl_008D3D00 + compress: True subsegments: - [0x8D4970, data, overlays/ovl_008D3D00_reloc] @@ -2751,6 +3057,7 @@ start: 0x8D4A20 vram: 0x80A05D50 follows_vram: ovl_008D3D00_reloc + compress: True bss_size: 0x0 subsegments: - [0x8D4A20, asm, overlays/ovl_008D4A20] @@ -2761,6 +3068,7 @@ start: 0x8D6340 vram: 0x80A07670 follows_vram: ovl_008D4A20 + compress: True subsegments: - [0x8D6340, data, overlays/ovl_008D4A20_reloc] @@ -2769,6 +3077,7 @@ start: 0x8D6550 vram: 0x80A07880 follows_vram: ovl_008D4A20_reloc + compress: True bss_size: 0x0 subsegments: - [0x8D6550, asm, overlays/ovl_008D6550] @@ -2779,6 +3088,7 @@ start: 0x8D6F10 vram: 0x80A08240 follows_vram: ovl_008D6550 + compress: True subsegments: - [0x8D6F10, data, overlays/ovl_008D6550_reloc] @@ -2787,6 +3097,7 @@ start: 0x8D6FC0 vram: 0x80A082F0 follows_vram: ovl_008D6550_reloc + compress: True bss_size: 0x0 subsegments: - [0x8D6FC0, asm, overlays/ovl_008D6FC0] @@ -2797,6 +3108,7 @@ start: 0x8D7ED0 vram: 0x80A09200 follows_vram: ovl_008D6FC0 + compress: True subsegments: - [0x8D7ED0, data, overlays/ovl_008D6FC0_reloc] @@ -2805,6 +3117,7 @@ start: 0x8D8000 vram: 0x80A09330 follows_vram: ovl_008D6FC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8D8000, asm, overlays/ovl_008D8000] @@ -2814,6 +3127,7 @@ start: 0x8D84A0 vram: 0x80A097D0 follows_vram: ovl_008D8000 + compress: True subsegments: - [0x8D84A0, data, overlays/ovl_008D8000_reloc] @@ -2822,6 +3136,7 @@ start: 0x8D8510 vram: 0x80A09840 follows_vram: ovl_008D8000_reloc + compress: True bss_size: 0x0 subsegments: - [0x8D8510, asm, overlays/ovl_008D8510] @@ -2832,6 +3147,7 @@ start: 0x8D8E40 vram: 0x80A0A170 follows_vram: ovl_008D8510 + compress: True subsegments: - [0x8D8E40, data, overlays/ovl_008D8510_reloc] @@ -2840,6 +3156,7 @@ start: 0x8D8EC0 vram: 0x80A0A1F0 follows_vram: ovl_008D8510_reloc + compress: True bss_size: 0x10 subsegments: - [0x8D8EC0, asm, overlays/ovl_008D8EC0] @@ -2851,6 +3168,7 @@ start: 0x8D9FA0 vram: 0x80A0B2E0 follows_vram: ovl_008D8EC0 + compress: True subsegments: - [0x8D9FA0, data, overlays/ovl_008D8EC0_reloc] @@ -2859,6 +3177,7 @@ start: 0x8DA0C0 vram: 0x80A0B400 follows_vram: ovl_008D8EC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8DA0C0, asm, overlays/ovl_008DA0C0] @@ -2869,6 +3188,7 @@ start: 0x8DB170 vram: 0x80A0C4B0 follows_vram: ovl_008DA0C0 + compress: True subsegments: - [0x8DB170, data, overlays/ovl_008DA0C0_reloc] @@ -2877,6 +3197,7 @@ start: 0x8DB2A0 vram: 0x80A0C5E0 follows_vram: ovl_008DA0C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8DB2A0, asm, overlays/ovl_008DB2A0] @@ -2887,6 +3208,7 @@ start: 0x8DBE70 vram: 0x80A0D1B0 follows_vram: ovl_008DB2A0 + compress: True subsegments: - [0x8DBE70, data, overlays/ovl_008DB2A0_reloc] @@ -2895,6 +3217,7 @@ start: 0x8DBF00 vram: 0x80A0D240 follows_vram: ovl_008DB2A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8DBF00, asm, overlays/ovl_008DBF00] @@ -2905,6 +3228,7 @@ start: 0x8DC730 vram: 0x80A0DA70 follows_vram: ovl_008DBF00 + compress: True subsegments: - [0x8DC730, data, overlays/ovl_008DBF00_reloc] @@ -2913,6 +3237,7 @@ start: 0x8DC7D0 vram: 0x80A0DB10 follows_vram: ovl_008DBF00_reloc + compress: True bss_size: 0x0 subsegments: - [0x8DC7D0, asm, overlays/ovl_008DC7D0] @@ -2923,6 +3248,7 @@ start: 0x8DD7E0 vram: 0x80A0EB20 follows_vram: ovl_008DC7D0 + compress: True subsegments: - [0x8DD7E0, data, overlays/ovl_008DC7D0_reloc] @@ -2931,6 +3257,7 @@ start: 0x8DD910 vram: 0x80A0EC50 follows_vram: ovl_008DC7D0_reloc + compress: True bss_size: 0x10 subsegments: - [0x8DD910, asm, overlays/ovl_008DD910] @@ -2942,6 +3269,7 @@ start: 0x8DED10 vram: 0x80A10060 follows_vram: ovl_008DD910 + compress: True subsegments: - [0x8DED10, data, overlays/ovl_008DD910_reloc] @@ -2950,6 +3278,7 @@ start: 0x8DEEC0 vram: 0x80A10210 follows_vram: ovl_008DD910_reloc + compress: True bss_size: 0x5410 subsegments: - [0x8DEEC0, asm, overlays/ovl_008DEEC0] @@ -2961,6 +3290,7 @@ start: 0x8E0870 vram: 0x80A16FD0 follows_vram: ovl_008DEEC0 + compress: True subsegments: - [0x8E0870, data, overlays/ovl_008DEEC0_reloc] @@ -2969,6 +3299,7 @@ start: 0x8E0A30 vram: 0x80A17190 follows_vram: ovl_008DEEC0_reloc + compress: True bss_size: 0x1DD0 subsegments: - [0x8E0A30, asm, overlays/ovl_008E0A30] @@ -2980,6 +3311,7 @@ start: 0x8E4170 vram: 0x80A1C6A0 follows_vram: ovl_008E0A30 + compress: True subsegments: - [0x8E4170, data, overlays/ovl_008E0A30_reloc] @@ -2988,6 +3320,7 @@ start: 0x8E46A0 vram: 0x80A1CBD0 follows_vram: ovl_008E0A30_reloc + compress: True bss_size: 0x10 subsegments: - [0x8E46A0, asm, overlays/ovl_008E46A0] @@ -2999,6 +3332,7 @@ start: 0x8E6640 vram: 0x80A1EB80 follows_vram: ovl_008E46A0 + compress: True subsegments: - [0x8E6640, data, overlays/ovl_008E46A0_reloc] @@ -3007,6 +3341,7 @@ start: 0x8E6770 vram: 0x80A1ECB0 follows_vram: ovl_008E46A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8E6770, asm, overlays/ovl_008E6770] @@ -3017,6 +3352,7 @@ start: 0x8E6F10 vram: 0x80A1F450 follows_vram: ovl_008E6770 + compress: True subsegments: - [0x8E6F10, data, overlays/ovl_008E6770_reloc] @@ -3025,6 +3361,7 @@ start: 0x8E6FD0 vram: 0x80A1F510 follows_vram: ovl_008E6770_reloc + compress: True bss_size: 0x0 subsegments: - [0x8E6FD0, asm, overlays/ovl_008E6FD0] @@ -3035,6 +3372,7 @@ start: 0x8E74D0 vram: 0x80A1FA10 follows_vram: ovl_008E6FD0 + compress: True subsegments: - [0x8E74D0, data, overlays/ovl_008E6FD0_reloc] @@ -3043,6 +3381,7 @@ start: 0x8E7560 vram: 0x80A1FAA0 follows_vram: ovl_008E6FD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8E7560, asm, overlays/ovl_008E7560] @@ -3053,6 +3392,7 @@ start: 0x8E7830 vram: 0x80A1FD70 follows_vram: ovl_008E7560 + compress: True subsegments: - [0x8E7830, data, overlays/ovl_008E7560_reloc] @@ -3061,6 +3401,7 @@ start: 0x8E78A0 vram: 0x80A1FDE0 follows_vram: ovl_008E7560_reloc + compress: True bss_size: 0x0 subsegments: - [0x8E78A0, asm, overlays/ovl_008E78A0] @@ -3071,6 +3412,7 @@ start: 0x8E7B80 vram: 0x80A200C0 follows_vram: ovl_008E78A0 + compress: True subsegments: - [0x8E7B80, data, overlays/ovl_008E78A0_reloc] @@ -3079,6 +3421,7 @@ start: 0x8E7BF0 vram: 0x80A20130 follows_vram: ovl_008E78A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8E7BF0, asm, overlays/ovl_008E7BF0] @@ -3089,6 +3432,7 @@ start: 0x8E7EC0 vram: 0x80A20400 follows_vram: ovl_008E7BF0 + compress: True subsegments: - [0x8E7EC0, data, overlays/ovl_008E7BF0_reloc] @@ -3097,6 +3441,7 @@ start: 0x8E7F30 vram: 0x80A20470 follows_vram: ovl_008E7BF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8E7F30, asm, overlays/ovl_008E7F30] @@ -3107,6 +3452,7 @@ start: 0x8E8200 vram: 0x80A20740 follows_vram: ovl_008E7F30 + compress: True subsegments: - [0x8E8200, data, overlays/ovl_008E7F30_reloc] @@ -3115,6 +3461,7 @@ start: 0x8E8270 vram: 0x80A207B0 follows_vram: ovl_008E7F30_reloc + compress: True bss_size: 0x0 subsegments: - [0x8E8270, asm, overlays/ovl_008E8270] @@ -3125,6 +3472,7 @@ start: 0x8E86E0 vram: 0x80A20C20 follows_vram: ovl_008E8270 + compress: True subsegments: - [0x8E86E0, data, overlays/ovl_008E8270_reloc] @@ -3133,6 +3481,7 @@ start: 0x8E8720 vram: 0x80A20C60 follows_vram: ovl_008E8270_reloc + compress: True bss_size: 0x0 subsegments: - [0x8E8720, asm, overlays/ovl_008E8720] @@ -3143,6 +3492,7 @@ start: 0x8E89F0 vram: 0x80A20F30 follows_vram: ovl_008E8720 + compress: True subsegments: - [0x8E89F0, data, overlays/ovl_008E8720_reloc] @@ -3151,6 +3501,7 @@ start: 0x8E8A60 vram: 0x80A20FA0 follows_vram: ovl_008E8720_reloc + compress: True bss_size: 0x0 subsegments: - [0x8E8A60, asm, overlays/ovl_008E8A60] @@ -3161,6 +3512,7 @@ start: 0x8E8DD0 vram: 0x80A21310 follows_vram: ovl_008E8A60 + compress: True subsegments: - [0x8E8DD0, data, overlays/ovl_008E8A60_reloc] @@ -3169,6 +3521,7 @@ start: 0x8E8E20 vram: 0x80A21360 follows_vram: ovl_008E8A60_reloc + compress: True bss_size: 0x0 subsegments: - [0x8E8E20, asm, overlays/ovl_008E8E20] @@ -3179,6 +3532,7 @@ start: 0x8E90E0 vram: 0x80A21620 follows_vram: ovl_008E8E20 + compress: True subsegments: - [0x8E90E0, data, overlays/ovl_008E8E20_reloc] @@ -3187,6 +3541,7 @@ start: 0x8E9130 vram: 0x80A21670 follows_vram: ovl_008E8E20_reloc + compress: True bss_size: 0x0 subsegments: - [0x8E9130, asm, overlays/ovl_008E9130] @@ -3197,6 +3552,7 @@ start: 0x8EA800 vram: 0x80A22D40 follows_vram: ovl_008E9130 + compress: True subsegments: - [0x8EA800, data, overlays/ovl_008E9130_reloc] @@ -3205,6 +3561,7 @@ start: 0x8EA970 vram: 0x80A22EB0 follows_vram: ovl_008E9130_reloc + compress: True bss_size: 0x20 subsegments: - [0x8EA970, asm, overlays/ovl_008EA970] @@ -3216,6 +3573,7 @@ start: 0x8ED0E0 vram: 0x80A25640 follows_vram: ovl_008EA970 + compress: True subsegments: - [0x8ED0E0, data, overlays/ovl_008EA970_reloc] @@ -3224,6 +3582,7 @@ start: 0x8ED290 vram: 0x80A257F0 follows_vram: ovl_008EA970_reloc + compress: True bss_size: 0x0 subsegments: - [0x8ED290, asm, overlays/ovl_008ED290] @@ -3234,6 +3593,7 @@ start: 0x8ED580 vram: 0x80A25AE0 follows_vram: ovl_008ED290 + compress: True subsegments: - [0x8ED580, data, overlays/ovl_008ED290_reloc] @@ -3242,6 +3602,7 @@ start: 0x8ED5C0 vram: 0x80A25B20 follows_vram: ovl_008ED290_reloc + compress: True bss_size: 0x0 subsegments: - [0x8ED5C0, asm, overlays/ovl_008ED5C0] @@ -3252,6 +3613,7 @@ start: 0x8EDB20 vram: 0x80A26080 follows_vram: ovl_008ED5C0 + compress: True subsegments: - [0x8EDB20, data, overlays/ovl_008ED5C0_reloc] @@ -3260,6 +3622,7 @@ start: 0x8EDB70 vram: 0x80A260D0 follows_vram: ovl_008ED5C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8EDB70, asm, overlays/ovl_008EDB70] @@ -3270,6 +3633,7 @@ start: 0x8EDD80 vram: 0x80A262E0 follows_vram: ovl_008EDB70 + compress: True subsegments: - [0x8EDD80, data, overlays/ovl_008EDB70_reloc] @@ -3278,6 +3642,7 @@ start: 0x8EDDB0 vram: 0x80A26310 follows_vram: ovl_008EDB70_reloc + compress: True bss_size: 0x0 subsegments: - [0x8EDDB0, asm, overlays/ovl_008EDDB0] @@ -3288,6 +3653,7 @@ start: 0x8EE2B0 vram: 0x80A26810 follows_vram: ovl_008EDDB0 + compress: True subsegments: - [0x8EE2B0, data, overlays/ovl_008EDDB0_reloc] @@ -3296,6 +3662,7 @@ start: 0x8EE310 vram: 0x80A26870 follows_vram: ovl_008EDDB0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8EE310, asm, overlays/ovl_008EE310] @@ -3306,6 +3673,7 @@ start: 0x8EECC0 vram: 0x80A27220 follows_vram: ovl_008EE310 + compress: True subsegments: - [0x8EECC0, data, overlays/ovl_008EE310_reloc] @@ -3314,6 +3682,7 @@ start: 0x8EED90 vram: 0x80A272F0 follows_vram: ovl_008EE310_reloc + compress: True bss_size: 0x0 subsegments: - [0x8EED90, asm, overlays/ovl_008EED90] @@ -3324,6 +3693,7 @@ start: 0x8EF400 vram: 0x80A27960 follows_vram: ovl_008EED90 + compress: True subsegments: - [0x8EF400, data, overlays/ovl_008EED90_reloc] @@ -3332,6 +3702,7 @@ start: 0x8EF480 vram: 0x80A279E0 follows_vram: ovl_008EED90_reloc + compress: True bss_size: 0x0 subsegments: - [0x8EF480, asm, overlays/ovl_008EF480] @@ -3342,6 +3713,7 @@ start: 0x8EFEF0 vram: 0x80A28450 follows_vram: ovl_008EF480 + compress: True subsegments: - [0x8EFEF0, data, overlays/ovl_008EF480_reloc] @@ -3350,6 +3722,7 @@ start: 0x8EFF50 vram: 0x80A284B0 follows_vram: ovl_008EF480_reloc + compress: True bss_size: 0x0 subsegments: - [0x8EFF50, asm, overlays/ovl_008EFF50] @@ -3360,6 +3733,7 @@ start: 0x8F0680 vram: 0x80A28BE0 follows_vram: ovl_008EFF50 + compress: True subsegments: - [0x8F0680, data, overlays/ovl_008EFF50_reloc] @@ -3368,6 +3742,7 @@ start: 0x8F0730 vram: 0x80A28C90 follows_vram: ovl_008EFF50_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F0730, asm, overlays/ovl_008F0730] @@ -3378,6 +3753,7 @@ start: 0x8F0A30 vram: 0x80A28F90 follows_vram: ovl_008F0730 + compress: True subsegments: - [0x8F0A30, data, overlays/ovl_008F0730_reloc] @@ -3386,6 +3762,7 @@ start: 0x8F0A80 vram: 0x80A28FE0 follows_vram: ovl_008F0730_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F0A80, asm, overlays/ovl_008F0A80] @@ -3396,6 +3773,7 @@ start: 0x8F0FA0 vram: 0x80A29500 follows_vram: ovl_008F0A80 + compress: True subsegments: - [0x8F0FA0, data, overlays/ovl_008F0A80_reloc] @@ -3404,6 +3782,7 @@ start: 0x8F1010 vram: 0x80A29570 follows_vram: ovl_008F0A80_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F1010, asm, overlays/ovl_008F1010] @@ -3414,6 +3793,7 @@ start: 0x8F1410 vram: 0x80A29970 follows_vram: ovl_008F1010 + compress: True subsegments: - [0x8F1410, data, overlays/ovl_008F1010_reloc] @@ -3422,6 +3802,7 @@ start: 0x8F1470 vram: 0x80A299D0 follows_vram: ovl_008F1010_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F1470, asm, overlays/ovl_008F1470] @@ -3432,6 +3813,7 @@ start: 0x8F1790 vram: 0x80A29CF0 follows_vram: ovl_008F1470 + compress: True subsegments: - [0x8F1790, data, overlays/ovl_008F1470_reloc] @@ -3440,6 +3822,7 @@ start: 0x8F17C0 vram: 0x80A29D20 follows_vram: ovl_008F1470_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F17C0, asm, overlays/ovl_008F17C0] @@ -3449,6 +3832,7 @@ start: 0x8F1920 vram: 0x80A29E80 follows_vram: ovl_008F17C0 + compress: True subsegments: - [0x8F1920, data, overlays/ovl_008F17C0_reloc] @@ -3457,6 +3841,7 @@ start: 0x8F1950 vram: 0x80A29EB0 follows_vram: ovl_008F17C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F1950, asm, overlays/ovl_008F1950] @@ -3467,6 +3852,7 @@ start: 0x8F1BB0 vram: 0x80A2A110 follows_vram: ovl_008F1950 + compress: True subsegments: - [0x8F1BB0, data, overlays/ovl_008F1950_reloc] @@ -3475,6 +3861,7 @@ start: 0x8F1BF0 vram: 0x80A2A150 follows_vram: ovl_008F1950_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F1BF0, asm, overlays/ovl_008F1BF0] @@ -3485,6 +3872,7 @@ start: 0x8F1FC0 vram: 0x80A2A520 follows_vram: ovl_008F1BF0 + compress: True subsegments: - [0x8F1FC0, data, overlays/ovl_008F1BF0_reloc] @@ -3493,6 +3881,7 @@ start: 0x8F2020 vram: 0x80A2A580 follows_vram: ovl_008F1BF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F2020, asm, overlays/ovl_008F2020] @@ -3503,6 +3892,7 @@ start: 0x8F23F0 vram: 0x80A2A950 follows_vram: ovl_008F2020 + compress: True subsegments: - [0x8F23F0, data, overlays/ovl_008F2020_reloc] @@ -3511,6 +3901,7 @@ start: 0x8F2430 vram: 0x80A2A990 follows_vram: ovl_008F2020_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F2430, asm, overlays/ovl_008F2430] @@ -3520,6 +3911,7 @@ start: 0x8F2680 vram: 0x80A2ABE0 follows_vram: ovl_008F2430 + compress: True subsegments: - [0x8F2680, data, overlays/ovl_008F2430_reloc] @@ -3528,6 +3920,7 @@ start: 0x8F26B0 vram: 0x80A2AC10 follows_vram: ovl_008F2430_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F26B0, asm, overlays/ovl_008F26B0] @@ -3538,6 +3931,7 @@ start: 0x8F29F0 vram: 0x80A2AF50 follows_vram: ovl_008F26B0 + compress: True subsegments: - [0x8F29F0, data, overlays/ovl_008F26B0_reloc] @@ -3546,6 +3940,7 @@ start: 0x8F2A50 vram: 0x80A2AFB0 follows_vram: ovl_008F26B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F2A50, asm, overlays/ovl_008F2A50] @@ -3556,6 +3951,7 @@ start: 0x8F2DF0 vram: 0x80A2B350 follows_vram: ovl_008F2A50 + compress: True subsegments: - [0x8F2DF0, data, overlays/ovl_008F2A50_reloc] @@ -3564,6 +3960,7 @@ start: 0x8F2E40 vram: 0x80A2B3A0 follows_vram: ovl_008F2A50_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F2E40, asm, overlays/ovl_008F2E40] @@ -3574,6 +3971,7 @@ start: 0x8F3230 vram: 0x80A2B790 follows_vram: ovl_008F2E40 + compress: True subsegments: - [0x8F3230, data, overlays/ovl_008F2E40_reloc] @@ -3582,6 +3980,7 @@ start: 0x8F3280 vram: 0x80A2B7E0 follows_vram: ovl_008F2E40_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F3280, asm, overlays/ovl_008F3280] @@ -3592,6 +3991,7 @@ start: 0x8F3730 vram: 0x80A2BC90 follows_vram: ovl_008F3280 + compress: True subsegments: - [0x8F3730, data, overlays/ovl_008F3280_reloc] @@ -3600,6 +4000,7 @@ start: 0x8F3780 vram: 0x80A2BCE0 follows_vram: ovl_008F3280_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F3780, asm, overlays/ovl_008F3780] @@ -3610,6 +4011,7 @@ start: 0x8F3E30 vram: 0x80A2C390 follows_vram: ovl_008F3780 + compress: True subsegments: - [0x8F3E30, data, overlays/ovl_008F3780_reloc] @@ -3618,6 +4020,7 @@ start: 0x8F3EC0 vram: 0x80A2C420 follows_vram: ovl_008F3780_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F3EC0, asm, overlays/ovl_008F3EC0] @@ -3628,6 +4031,7 @@ start: 0x8F4290 vram: 0x80A2C7F0 follows_vram: ovl_008F3EC0 + compress: True subsegments: - [0x8F4290, data, overlays/ovl_008F3EC0_reloc] @@ -3636,6 +4040,7 @@ start: 0x8F42E0 vram: 0x80A2C840 follows_vram: ovl_008F3EC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F42E0, asm, overlays/ovl_008F42E0] @@ -3645,6 +4050,7 @@ start: 0x8F44C0 vram: 0x80A2CA20 follows_vram: ovl_008F42E0 + compress: True subsegments: - [0x8F44C0, data, overlays/ovl_008F42E0_reloc] @@ -3653,6 +4059,7 @@ start: 0x8F44F0 vram: 0x80A2CA50 follows_vram: ovl_008F42E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F44F0, asm, overlays/ovl_008F44F0] @@ -3663,6 +4070,7 @@ start: 0x8F4840 vram: 0x80A2CDA0 follows_vram: ovl_008F44F0 + compress: True subsegments: - [0x8F4840, data, overlays/ovl_008F44F0_reloc] @@ -3671,6 +4079,7 @@ start: 0x8F4890 vram: 0x80A2CDF0 follows_vram: ovl_008F44F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F4890, asm, overlays/ovl_008F4890] @@ -3681,6 +4090,7 @@ start: 0x8F4D80 vram: 0x80A2D2E0 follows_vram: ovl_008F4890 + compress: True subsegments: - [0x8F4D80, data, overlays/ovl_008F4890_reloc] @@ -3689,6 +4099,7 @@ start: 0x8F4DC0 vram: 0x80A2D320 follows_vram: ovl_008F4890_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F4DC0, asm, overlays/ovl_008F4DC0] @@ -3698,6 +4109,7 @@ start: 0x8F4F60 vram: 0x80A2D4C0 follows_vram: ovl_008F4DC0 + compress: True subsegments: - [0x8F4F60, data, overlays/ovl_008F4DC0_reloc] @@ -3706,6 +4118,7 @@ start: 0x8F4F90 vram: 0x80A2D4F0 follows_vram: ovl_008F4DC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F4F90, asm, overlays/ovl_008F4F90] @@ -3716,6 +4129,7 @@ start: 0x8F5220 vram: 0x80A2D780 follows_vram: ovl_008F4F90 + compress: True subsegments: - [0x8F5220, data, overlays/ovl_008F4F90_reloc] @@ -3724,6 +4138,7 @@ start: 0x8F5270 vram: 0x80A2D7D0 follows_vram: ovl_008F4F90_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F5270, asm, overlays/ovl_008F5270] @@ -3734,6 +4149,7 @@ start: 0x8F5620 vram: 0x80A2DB80 follows_vram: ovl_008F5270 + compress: True subsegments: - [0x8F5620, data, overlays/ovl_008F5270_reloc] @@ -3742,6 +4158,7 @@ start: 0x8F56A0 vram: 0x80A2DC00 follows_vram: ovl_008F5270_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F56A0, asm, overlays/ovl_008F56A0] @@ -3752,6 +4169,7 @@ start: 0x8F5A20 vram: 0x80A2DF80 follows_vram: ovl_008F56A0 + compress: True subsegments: - [0x8F5A20, data, overlays/ovl_008F56A0_reloc] @@ -3760,6 +4178,7 @@ start: 0x8F5A80 vram: 0x80A2DFE0 follows_vram: ovl_008F56A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F5A80, asm, overlays/ovl_008F5A80] @@ -3769,6 +4188,7 @@ start: 0x8F5C90 vram: 0x80A2E1F0 follows_vram: ovl_008F5A80 + compress: True subsegments: - [0x8F5C90, data, overlays/ovl_008F5A80_reloc] @@ -3777,6 +4197,7 @@ start: 0x8F5CD0 vram: 0x80A2E230 follows_vram: ovl_008F5A80_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F5CD0, asm, overlays/ovl_008F5CD0] @@ -3787,6 +4208,7 @@ start: 0x8F5F20 vram: 0x80A2E480 follows_vram: ovl_008F5CD0 + compress: True subsegments: - [0x8F5F20, data, overlays/ovl_008F5CD0_reloc] @@ -3795,6 +4217,7 @@ start: 0x8F5F70 vram: 0x80A2E4D0 follows_vram: ovl_008F5CD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F5F70, asm, overlays/ovl_008F5F70] @@ -3805,6 +4228,7 @@ start: 0x8F62E0 vram: 0x80A2E840 follows_vram: ovl_008F5F70 + compress: True subsegments: - [0x8F62E0, data, overlays/ovl_008F5F70_reloc] @@ -3813,6 +4237,7 @@ start: 0x8F6320 vram: 0x80A2E880 follows_vram: ovl_008F5F70_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F6320, asm, overlays/ovl_008F6320] @@ -3822,6 +4247,7 @@ start: 0x8F65D0 vram: 0x80A2EB30 follows_vram: ovl_008F6320 + compress: True subsegments: - [0x8F65D0, data, overlays/ovl_008F6320_reloc] @@ -3830,6 +4256,7 @@ start: 0x8F6600 vram: 0x80A2EB60 follows_vram: ovl_008F6320_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F6600, asm, overlays/ovl_008F6600] @@ -3840,6 +4267,7 @@ start: 0x8F6B70 vram: 0x80A2F0D0 follows_vram: ovl_008F6600 + compress: True subsegments: - [0x8F6B70, data, overlays/ovl_008F6600_reloc] @@ -3848,6 +4276,7 @@ start: 0x8F6BE0 vram: 0x80A2F140 follows_vram: ovl_008F6600_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F6BE0, asm, overlays/ovl_008F6BE0] @@ -3858,6 +4287,7 @@ start: 0x8F6E90 vram: 0x80A2F3F0 follows_vram: ovl_008F6BE0 + compress: True subsegments: - [0x8F6E90, data, overlays/ovl_008F6BE0_reloc] @@ -3866,6 +4296,7 @@ start: 0x8F6ED0 vram: 0x80A2F430 follows_vram: ovl_008F6BE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F6ED0, asm, overlays/ovl_008F6ED0] @@ -3876,6 +4307,7 @@ start: 0x8F7350 vram: 0x80A2F8B0 follows_vram: ovl_008F6ED0 + compress: True subsegments: - [0x8F7350, data, overlays/ovl_008F6ED0_reloc] @@ -3884,6 +4316,7 @@ start: 0x8F73B0 vram: 0x80A2F910 follows_vram: ovl_008F6ED0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F73B0, asm, overlays/ovl_008F73B0] @@ -3894,6 +4327,7 @@ start: 0x8F7740 vram: 0x80A2FCA0 follows_vram: ovl_008F73B0 + compress: True subsegments: - [0x8F7740, data, overlays/ovl_008F73B0_reloc] @@ -3902,6 +4336,7 @@ start: 0x8F7770 vram: 0x80A2FCD0 follows_vram: ovl_008F73B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F7770, asm, overlays/ovl_008F7770] @@ -3912,6 +4347,7 @@ start: 0x8F80C0 vram: 0x80A30620 follows_vram: ovl_008F7770 + compress: True subsegments: - [0x8F80C0, data, overlays/ovl_008F7770_reloc] @@ -3920,6 +4356,7 @@ start: 0x8F8140 vram: 0x80A306A0 follows_vram: ovl_008F7770_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F8140, asm, overlays/ovl_008F8140] @@ -3930,6 +4367,7 @@ start: 0x8F8630 vram: 0x80A30B90 follows_vram: ovl_008F8140 + compress: True subsegments: - [0x8F8630, data, overlays/ovl_008F8140_reloc] @@ -3938,6 +4376,7 @@ start: 0x8F8690 vram: 0x80A30BF0 follows_vram: ovl_008F8140_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F8690, asm, overlays/ovl_008F8690] @@ -3948,6 +4387,7 @@ start: 0x8F8A30 vram: 0x80A30F90 follows_vram: ovl_008F8690 + compress: True subsegments: - [0x8F8A30, data, overlays/ovl_008F8690_reloc] @@ -3956,6 +4396,7 @@ start: 0x8F8A80 vram: 0x80A30FE0 follows_vram: ovl_008F8690_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F8A80, asm, overlays/ovl_008F8A80] @@ -3966,6 +4407,7 @@ start: 0x8F8FA0 vram: 0x80A31500 follows_vram: ovl_008F8A80 + compress: True subsegments: - [0x8F8FA0, data, overlays/ovl_008F8A80_reloc] @@ -3974,6 +4416,7 @@ start: 0x8F8FE0 vram: 0x80A31540 follows_vram: ovl_008F8A80_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F8FE0, asm, overlays/ovl_008F8FE0] @@ -3984,6 +4427,7 @@ start: 0x8F95C0 vram: 0x80A31B20 follows_vram: ovl_008F8FE0 + compress: True subsegments: - [0x8F95C0, data, overlays/ovl_008F8FE0_reloc] @@ -3992,6 +4436,7 @@ start: 0x8F9650 vram: 0x80A31BB0 follows_vram: ovl_008F8FE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F9650, asm, overlays/ovl_008F9650] @@ -4001,6 +4446,7 @@ start: 0x8F98B0 vram: 0x80A31E10 follows_vram: ovl_008F9650 + compress: True subsegments: - [0x8F98B0, data, overlays/ovl_008F9650_reloc] @@ -4009,6 +4455,7 @@ start: 0x8F98E0 vram: 0x80A31E40 follows_vram: ovl_008F9650_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F98E0, asm, overlays/ovl_008F98E0] @@ -4019,6 +4466,7 @@ start: 0x8F9CE0 vram: 0x80A32240 follows_vram: ovl_008F98E0 + compress: True subsegments: - [0x8F9CE0, data, overlays/ovl_008F98E0_reloc] @@ -4027,6 +4475,7 @@ start: 0x8F9D20 vram: 0x80A32280 follows_vram: ovl_008F98E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F9D20, asm, overlays/ovl_008F9D20] @@ -4036,6 +4485,7 @@ start: 0x8F9ED0 vram: 0x80A32430 follows_vram: ovl_008F9D20 + compress: True subsegments: - [0x8F9ED0, data, overlays/ovl_008F9D20_reloc] @@ -4044,6 +4494,7 @@ start: 0x8F9F00 vram: 0x80A32460 follows_vram: ovl_008F9D20_reloc + compress: True bss_size: 0x0 subsegments: - [0x8F9F00, asm, overlays/ovl_008F9F00] @@ -4054,6 +4505,7 @@ start: 0x8FA2F0 vram: 0x80A32850 follows_vram: ovl_008F9F00 + compress: True subsegments: - [0x8FA2F0, data, overlays/ovl_008F9F00_reloc] @@ -4062,6 +4514,7 @@ start: 0x8FA340 vram: 0x80A328A0 follows_vram: ovl_008F9F00_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FA340, asm, overlays/ovl_008FA340] @@ -4071,6 +4524,7 @@ start: 0x8FA5B0 vram: 0x80A32B10 follows_vram: ovl_008FA340 + compress: True subsegments: - [0x8FA5B0, data, overlays/ovl_008FA340_reloc] @@ -4079,6 +4533,7 @@ start: 0x8FA5E0 vram: 0x80A32B40 follows_vram: ovl_008FA340_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FA5E0, asm, overlays/ovl_008FA5E0] @@ -4089,6 +4544,7 @@ start: 0x8FABD0 vram: 0x80A33130 follows_vram: ovl_008FA5E0 + compress: True subsegments: - [0x8FABD0, data, overlays/ovl_008FA5E0_reloc] @@ -4097,6 +4553,7 @@ start: 0x8FAC50 vram: 0x80A331B0 follows_vram: ovl_008FA5E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FAC50, asm, overlays/ovl_008FAC50] @@ -4107,6 +4564,7 @@ start: 0x8FAE90 vram: 0x80A333F0 follows_vram: ovl_008FAC50 + compress: True subsegments: - [0x8FAE90, data, overlays/ovl_008FAC50_reloc] @@ -4115,6 +4573,7 @@ start: 0x8FAED0 vram: 0x80A33430 follows_vram: ovl_008FAC50_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FAED0, asm, overlays/ovl_008FAED0] @@ -4125,6 +4584,7 @@ start: 0x8FB3F0 vram: 0x80A33950 follows_vram: ovl_008FAED0 + compress: True subsegments: - [0x8FB3F0, data, overlays/ovl_008FAED0_reloc] @@ -4133,6 +4593,7 @@ start: 0x8FB460 vram: 0x80A339C0 follows_vram: ovl_008FAED0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FB460, asm, overlays/ovl_008FB460] @@ -4143,6 +4604,7 @@ start: 0x8FB6D0 vram: 0x80A33C30 follows_vram: ovl_008FB460 + compress: True subsegments: - [0x8FB6D0, data, overlays/ovl_008FB460_reloc] @@ -4151,6 +4613,7 @@ start: 0x8FB710 vram: 0x80A33C70 follows_vram: ovl_008FB460_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FB710, asm, overlays/ovl_008FB710] @@ -4161,6 +4624,7 @@ start: 0x8FBB40 vram: 0x80A340A0 follows_vram: ovl_008FB710 + compress: True subsegments: - [0x8FBB40, data, overlays/ovl_008FB710_reloc] @@ -4169,6 +4633,7 @@ start: 0x8FBB90 vram: 0x80A340F0 follows_vram: ovl_008FB710_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FBB90, asm, overlays/ovl_008FBB90] @@ -4179,6 +4644,7 @@ start: 0x8FBF30 vram: 0x80A34490 follows_vram: ovl_008FBB90 + compress: True subsegments: - [0x8FBF30, data, overlays/ovl_008FBB90_reloc] @@ -4187,6 +4653,7 @@ start: 0x8FBF70 vram: 0x80A344D0 follows_vram: ovl_008FBB90_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FBF70, asm, overlays/ovl_008FBF70] @@ -4197,6 +4664,7 @@ start: 0x8FC1E0 vram: 0x80A34740 follows_vram: ovl_008FBF70 + compress: True subsegments: - [0x8FC1E0, data, overlays/ovl_008FBF70_reloc] @@ -4205,6 +4673,7 @@ start: 0x8FC210 vram: 0x80A34770 follows_vram: ovl_008FBF70_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FC210, asm, overlays/ovl_008FC210] @@ -4215,6 +4684,7 @@ start: 0x8FC780 vram: 0x80A34CE0 follows_vram: ovl_008FC210 + compress: True subsegments: - [0x8FC780, data, overlays/ovl_008FC210_reloc] @@ -4223,6 +4693,7 @@ start: 0x8FC7E0 vram: 0x80A34D40 follows_vram: ovl_008FC210_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FC7E0, asm, overlays/ovl_008FC7E0] @@ -4233,6 +4704,7 @@ start: 0x8FC9E0 vram: 0x80A34F40 follows_vram: ovl_008FC7E0 + compress: True subsegments: - [0x8FC9E0, data, overlays/ovl_008FC7E0_reloc] @@ -4241,6 +4713,7 @@ start: 0x8FCA20 vram: 0x80A34F80 follows_vram: ovl_008FC7E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FCA20, asm, overlays/ovl_008FCA20] @@ -4251,6 +4724,7 @@ start: 0x8FD460 vram: 0x80A359C0 follows_vram: ovl_008FCA20 + compress: True subsegments: - [0x8FD460, data, overlays/ovl_008FCA20_reloc] @@ -4259,6 +4733,7 @@ start: 0x8FD520 vram: 0x80A35A80 follows_vram: ovl_008FCA20_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FD520, asm, overlays/ovl_008FD520] @@ -4269,6 +4744,7 @@ start: 0x8FDD60 vram: 0x80A362C0 follows_vram: ovl_008FD520 + compress: True subsegments: - [0x8FDD60, data, overlays/ovl_008FD520_reloc] @@ -4277,6 +4753,7 @@ start: 0x8FDE10 vram: 0x80A36370 follows_vram: ovl_008FD520_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FDE10, asm, overlays/ovl_008FDE10] @@ -4286,6 +4763,7 @@ start: 0x8FDF60 vram: 0x80A364C0 follows_vram: ovl_008FDE10 + compress: True subsegments: - [0x8FDF60, data, overlays/ovl_008FDE10_reloc] @@ -4294,6 +4772,7 @@ start: 0x8FDF90 vram: 0x80A364F0 follows_vram: ovl_008FDE10_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FDF90, asm, overlays/ovl_008FDF90] @@ -4304,6 +4783,7 @@ start: 0x8FE390 vram: 0x80A368F0 follows_vram: ovl_008FDF90 + compress: True subsegments: - [0x8FE390, data, overlays/ovl_008FDF90_reloc] @@ -4312,6 +4792,7 @@ start: 0x8FE3E0 vram: 0x80A36940 follows_vram: ovl_008FDF90_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FE3E0, asm, overlays/ovl_008FE3E0] @@ -4322,6 +4803,7 @@ start: 0x8FEAE0 vram: 0x80A37040 follows_vram: ovl_008FE3E0 + compress: True subsegments: - [0x8FEAE0, data, overlays/ovl_008FE3E0_reloc] @@ -4330,6 +4812,7 @@ start: 0x8FEB60 vram: 0x80A370C0 follows_vram: ovl_008FE3E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FEB60, asm, overlays/ovl_008FEB60] @@ -4340,6 +4823,7 @@ start: 0x8FEE50 vram: 0x80A373B0 follows_vram: ovl_008FEB60 + compress: True subsegments: - [0x8FEE50, data, overlays/ovl_008FEB60_reloc] @@ -4348,6 +4832,7 @@ start: 0x8FEE80 vram: 0x80A373E0 follows_vram: ovl_008FEB60_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FEE80, asm, overlays/ovl_008FEE80] @@ -4357,6 +4842,7 @@ start: 0x8FF140 vram: 0x80A376A0 follows_vram: ovl_008FEE80 + compress: True subsegments: - [0x8FF140, data, overlays/ovl_008FEE80_reloc] @@ -4365,6 +4851,7 @@ start: 0x8FF170 vram: 0x80A376D0 follows_vram: ovl_008FEE80_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FF170, asm, overlays/ovl_008FF170] @@ -4375,6 +4862,7 @@ start: 0x8FF730 vram: 0x80A37C90 follows_vram: ovl_008FF170 + compress: True subsegments: - [0x8FF730, data, overlays/ovl_008FF170_reloc] @@ -4383,6 +4871,7 @@ start: 0x8FF7C0 vram: 0x80A37D20 follows_vram: ovl_008FF170_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FF7C0, asm, overlays/ovl_008FF7C0] @@ -4393,6 +4882,7 @@ start: 0x8FFC20 vram: 0x80A38180 follows_vram: ovl_008FF7C0 + compress: True subsegments: - [0x8FFC20, data, overlays/ovl_008FF7C0_reloc] @@ -4401,6 +4891,7 @@ start: 0x8FFC90 vram: 0x80A381F0 follows_vram: ovl_008FF7C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x8FFC90, asm, overlays/ovl_008FFC90] @@ -4411,6 +4902,7 @@ start: 0x9004B0 vram: 0x80A38A10 follows_vram: ovl_008FFC90 + compress: True subsegments: - [0x9004B0, data, overlays/ovl_008FFC90_reloc] @@ -4419,6 +4911,7 @@ start: 0x900530 vram: 0x80A38A90 follows_vram: ovl_008FFC90_reloc + compress: True bss_size: 0x0 subsegments: - [0x900530, asm, overlays/ovl_00900530] @@ -4429,6 +4922,7 @@ start: 0x900C60 vram: 0x80A391C0 follows_vram: ovl_00900530 + compress: True subsegments: - [0x900C60, data, overlays/ovl_00900530_reloc] @@ -4437,6 +4931,7 @@ start: 0x900CD0 vram: 0x80A39230 follows_vram: ovl_00900530_reloc + compress: True bss_size: 0x0 subsegments: - [0x900CD0, asm, overlays/ovl_00900CD0] @@ -4447,6 +4942,7 @@ start: 0x901540 vram: 0x80A39AA0 follows_vram: ovl_00900CD0 + compress: True subsegments: - [0x901540, data, overlays/ovl_00900CD0_reloc] @@ -4455,6 +4951,7 @@ start: 0x9015C0 vram: 0x80A39B20 follows_vram: ovl_00900CD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9015C0, asm, overlays/ovl_009015C0] @@ -4465,6 +4962,7 @@ start: 0x901CF0 vram: 0x80A3A250 follows_vram: ovl_009015C0 + compress: True subsegments: - [0x901CF0, data, overlays/ovl_009015C0_reloc] @@ -4473,6 +4971,7 @@ start: 0x901D60 vram: 0x80A3A2C0 follows_vram: ovl_009015C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x901D60, asm, overlays/ovl_00901D60] @@ -4483,6 +4982,7 @@ start: 0x9020D0 vram: 0x80A3A630 follows_vram: ovl_00901D60 + compress: True subsegments: - [0x9020D0, data, overlays/ovl_00901D60_reloc] @@ -4491,6 +4991,7 @@ start: 0x902120 vram: 0x80A3A680 follows_vram: ovl_00901D60_reloc + compress: True bss_size: 0x0 subsegments: - [0x902120, asm, overlays/ovl_00902120] @@ -4500,6 +5001,7 @@ start: 0x902780 vram: 0x80A3ACE0 follows_vram: ovl_00902120 + compress: True subsegments: - [0x902780, data, overlays/ovl_00902120_reloc] @@ -4508,6 +5010,7 @@ start: 0x902810 vram: 0x80A3AD70 follows_vram: ovl_00902120_reloc + compress: True bss_size: 0x0 subsegments: - [0x902810, asm, overlays/ovl_00902810] @@ -4517,6 +5020,7 @@ start: 0x902C10 vram: 0x80A3B170 follows_vram: ovl_00902810 + compress: True subsegments: - [0x902C10, data, overlays/ovl_00902810_reloc] @@ -4525,6 +5029,7 @@ start: 0x902C40 vram: 0x80A3B1A0 follows_vram: ovl_00902810_reloc + compress: True bss_size: 0x0 subsegments: - [0x902C40, asm, overlays/ovl_00902C40] @@ -4535,6 +5040,7 @@ start: 0x9031A0 vram: 0x80A3B700 follows_vram: ovl_00902C40 + compress: True subsegments: - [0x9031A0, data, overlays/ovl_00902C40_reloc] @@ -4543,6 +5049,7 @@ start: 0x9031F0 vram: 0x80A3B750 follows_vram: ovl_00902C40_reloc + compress: True bss_size: 0x0 subsegments: - [0x9031F0, asm, overlays/ovl_009031F0] @@ -4552,6 +5059,7 @@ start: 0x903430 vram: 0x80A3B990 follows_vram: ovl_009031F0 + compress: True subsegments: - [0x903430, data, overlays/ovl_009031F0_reloc] @@ -4560,6 +5068,7 @@ start: 0x903460 vram: 0x80A3B9C0 follows_vram: ovl_009031F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x903460, asm, overlays/ovl_00903460] @@ -4570,6 +5079,7 @@ start: 0x903B40 vram: 0x80A3C0A0 follows_vram: ovl_00903460 + compress: True subsegments: - [0x903B40, data, overlays/ovl_00903460_reloc] @@ -4578,6 +5088,7 @@ start: 0x903B90 vram: 0x80A3C0F0 follows_vram: ovl_00903460_reloc + compress: True bss_size: 0x0 subsegments: - [0x903B90, data, overlays/ovl_00903B90] @@ -4586,6 +5097,7 @@ start: 0x903BB0 vram: 0x80A3C110 follows_vram: ovl_00903B90 + compress: True subsegments: - [0x903BB0, data, overlays/ovl_00903B90_reloc] @@ -4594,6 +5106,7 @@ start: 0x903BD0 vram: 0x80A3C130 follows_vram: ovl_00903B90_reloc + compress: True bss_size: 0x0 subsegments: - [0x903BD0, asm, overlays/ovl_00903BD0] @@ -4603,6 +5116,7 @@ start: 0x9042B0 vram: 0x80A3C810 follows_vram: ovl_00903BD0 + compress: True subsegments: - [0x9042B0, data, overlays/ovl_00903BD0_reloc] @@ -4611,6 +5125,7 @@ start: 0x904330 vram: 0x80A3C890 follows_vram: ovl_00903BD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x904330, asm, overlays/ovl_00904330] @@ -4621,6 +5136,7 @@ start: 0x904A50 vram: 0x80A3CFB0 follows_vram: ovl_00904330 + compress: True subsegments: - [0x904A50, data, overlays/ovl_00904330_reloc] @@ -4629,6 +5145,7 @@ start: 0x904AB0 vram: 0x80A3D010 follows_vram: ovl_00904330_reloc + compress: True bss_size: 0x0 subsegments: - [0x904AB0, asm, overlays/ovl_00904AB0] @@ -4639,6 +5156,7 @@ start: 0x9051F0 vram: 0x80A3D750 follows_vram: ovl_00904AB0 + compress: True subsegments: - [0x9051F0, data, overlays/ovl_00904AB0_reloc] @@ -4647,6 +5165,7 @@ start: 0x905280 vram: 0x80A3D7E0 follows_vram: ovl_00904AB0_reloc + compress: True bss_size: 0x0 subsegments: - [0x905280, asm, overlays/ovl_00905280] @@ -4657,6 +5176,7 @@ start: 0x9059A0 vram: 0x80A3DF00 follows_vram: ovl_00905280 + compress: True subsegments: - [0x9059A0, data, overlays/ovl_00905280_reloc] @@ -4665,6 +5185,7 @@ start: 0x905A30 vram: 0x80A3DF90 follows_vram: ovl_00905280_reloc + compress: True bss_size: 0x0 subsegments: - [0x905A30, asm, overlays/ovl_00905A30] @@ -4675,6 +5196,7 @@ start: 0x906010 vram: 0x80A3E570 follows_vram: ovl_00905A30 + compress: True subsegments: - [0x906010, data, overlays/ovl_00905A30_reloc] @@ -4683,6 +5205,7 @@ start: 0x906060 vram: 0x80A3E5C0 follows_vram: ovl_00905A30_reloc + compress: True bss_size: 0x0 subsegments: - [0x906060, asm, overlays/ovl_00906060] @@ -4693,6 +5216,7 @@ start: 0x9061F0 vram: 0x80A3E750 follows_vram: ovl_00906060 + compress: True subsegments: - [0x9061F0, data, overlays/ovl_00906060_reloc] @@ -4701,6 +5225,7 @@ start: 0x906220 vram: 0x80A3E780 follows_vram: ovl_00906060_reloc + compress: True bss_size: 0x0 subsegments: - [0x906220, data, overlays/ovl_00906220] @@ -4709,6 +5234,7 @@ start: 0x906270 vram: 0x80A3E7D0 follows_vram: ovl_00906220 + compress: True subsegments: - [0x906270, data, overlays/ovl_00906220_reloc] @@ -4717,6 +5243,7 @@ start: 0x906290 vram: 0x80A3E7F0 follows_vram: ovl_00906220_reloc + compress: True bss_size: 0x0 subsegments: - [0x906290, data, overlays/ovl_00906290] @@ -4725,6 +5252,7 @@ start: 0x9062E0 vram: 0x80A3E840 follows_vram: ovl_00906290 + compress: True subsegments: - [0x9062E0, data, overlays/ovl_00906290_reloc] @@ -4733,6 +5261,7 @@ start: 0x906300 vram: 0x80A3E860 follows_vram: ovl_00906290_reloc + compress: True bss_size: 0x0 subsegments: - [0x906300, data, overlays/ovl_00906300] @@ -4741,6 +5270,7 @@ start: 0x906350 vram: 0x80A3E8B0 follows_vram: ovl_00906300 + compress: True subsegments: - [0x906350, data, overlays/ovl_00906300_reloc] @@ -4749,6 +5279,7 @@ start: 0x906370 vram: 0x80A3E8D0 follows_vram: ovl_00906300_reloc + compress: True bss_size: 0x0 subsegments: - [0x906370, data, overlays/ovl_00906370] @@ -4757,6 +5288,7 @@ start: 0x9063C0 vram: 0x80A3E920 follows_vram: ovl_00906370 + compress: True subsegments: - [0x9063C0, data, overlays/ovl_00906370_reloc] @@ -4765,6 +5297,7 @@ start: 0x9063E0 vram: 0x80A3E940 follows_vram: ovl_00906370_reloc + compress: True bss_size: 0x0 subsegments: - [0x9063E0, data, overlays/ovl_009063E0] @@ -4773,6 +5306,7 @@ start: 0x906430 vram: 0x80A3E990 follows_vram: ovl_009063E0 + compress: True subsegments: - [0x906430, data, overlays/ovl_009063E0_reloc] @@ -4781,6 +5315,7 @@ start: 0x906450 vram: 0x80A3E9B0 follows_vram: ovl_009063E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x906450, data, overlays/ovl_00906450] @@ -4789,6 +5324,7 @@ start: 0x9064A0 vram: 0x80A3EA00 follows_vram: ovl_00906450 + compress: True subsegments: - [0x9064A0, data, overlays/ovl_00906450_reloc] @@ -4797,6 +5333,7 @@ start: 0x9064C0 vram: 0x80A3EA20 follows_vram: ovl_00906450_reloc + compress: True bss_size: 0x0 subsegments: - [0x9064C0, data, overlays/ovl_009064C0] @@ -4805,6 +5342,7 @@ start: 0x906510 vram: 0x80A3EA70 follows_vram: ovl_009064C0 + compress: True subsegments: - [0x906510, data, overlays/ovl_009064C0_reloc] @@ -4813,6 +5351,7 @@ start: 0x906530 vram: 0x80A3EA90 follows_vram: ovl_009064C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x906530, data, overlays/ovl_00906530] @@ -4821,6 +5360,7 @@ start: 0x906580 vram: 0x80A3EAE0 follows_vram: ovl_00906530 + compress: True subsegments: - [0x906580, data, overlays/ovl_00906530_reloc] @@ -4829,6 +5369,7 @@ start: 0x9065A0 vram: 0x80A3EB00 follows_vram: ovl_00906530_reloc + compress: True bss_size: 0x0 subsegments: - [0x9065A0, data, overlays/ovl_009065A0] @@ -4837,6 +5378,7 @@ start: 0x9065F0 vram: 0x80A3EB50 follows_vram: ovl_009065A0 + compress: True subsegments: - [0x9065F0, data, overlays/ovl_009065A0_reloc] @@ -4845,6 +5387,7 @@ start: 0x906610 vram: 0x80A3EB70 follows_vram: ovl_009065A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x906610, data, overlays/ovl_00906610] @@ -4853,6 +5396,7 @@ start: 0x906660 vram: 0x80A3EBC0 follows_vram: ovl_00906610 + compress: True subsegments: - [0x906660, data, overlays/ovl_00906610_reloc] @@ -4861,6 +5405,7 @@ start: 0x906680 vram: 0x80A3EBE0 follows_vram: ovl_00906610_reloc + compress: True bss_size: 0x0 subsegments: - [0x906680, data, overlays/ovl_00906680] @@ -4869,6 +5414,7 @@ start: 0x9066D0 vram: 0x80A3EC30 follows_vram: ovl_00906680 + compress: True subsegments: - [0x9066D0, data, overlays/ovl_00906680_reloc] @@ -4877,6 +5423,7 @@ start: 0x9066F0 vram: 0x80A3EC50 follows_vram: ovl_00906680_reloc + compress: True bss_size: 0x0 subsegments: - [0x9066F0, asm, overlays/ovl_009066F0] @@ -4887,6 +5434,7 @@ start: 0x906B20 vram: 0x80A3F080 follows_vram: ovl_009066F0 + compress: True subsegments: - [0x906B20, data, overlays/ovl_009066F0_reloc] @@ -4895,6 +5443,7 @@ start: 0x906B80 vram: 0x80A3F0E0 follows_vram: ovl_009066F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x906B80, asm, overlays/ovl_00906B80] @@ -4904,6 +5453,7 @@ start: 0x906EE0 vram: 0x80A3F440 follows_vram: ovl_00906B80 + compress: True subsegments: - [0x906EE0, data, overlays/ovl_00906B80_reloc] @@ -4912,6 +5462,7 @@ start: 0x906F10 vram: 0x80A3F470 follows_vram: ovl_00906B80_reloc + compress: True bss_size: 0x0 subsegments: - [0x906F10, data, overlays/ovl_00906F10] @@ -4920,6 +5471,7 @@ start: 0x906F60 vram: 0x80A3F4C0 follows_vram: ovl_00906F10 + compress: True subsegments: - [0x906F60, data, overlays/ovl_00906F10_reloc] @@ -4928,6 +5480,7 @@ start: 0x906F80 vram: 0x80A3F4E0 follows_vram: ovl_00906F10_reloc + compress: True bss_size: 0x0 subsegments: - [0x906F80, data, overlays/ovl_00906F80] @@ -4936,6 +5489,7 @@ start: 0x906FD0 vram: 0x80A3F530 follows_vram: ovl_00906F80 + compress: True subsegments: - [0x906FD0, data, overlays/ovl_00906F80_reloc] @@ -4944,6 +5498,7 @@ start: 0x906FF0 vram: 0x80A3F550 follows_vram: ovl_00906F80_reloc + compress: True bss_size: 0x0 subsegments: - [0x906FF0, data, overlays/ovl_00906FF0] @@ -4952,6 +5507,7 @@ start: 0x907040 vram: 0x80A3F5A0 follows_vram: ovl_00906FF0 + compress: True subsegments: - [0x907040, data, overlays/ovl_00906FF0_reloc] @@ -4960,6 +5516,7 @@ start: 0x907060 vram: 0x80A3F5C0 follows_vram: ovl_00906FF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x907060, data, overlays/ovl_00907060] @@ -4968,6 +5525,7 @@ start: 0x9070B0 vram: 0x80A3F610 follows_vram: ovl_00907060 + compress: True subsegments: - [0x9070B0, data, overlays/ovl_00907060_reloc] @@ -4976,6 +5534,7 @@ start: 0x9070D0 vram: 0x80A3F630 follows_vram: ovl_00907060_reloc + compress: True bss_size: 0x0 subsegments: - [0x9070D0, data, overlays/ovl_009070D0] @@ -4984,6 +5543,7 @@ start: 0x907120 vram: 0x80A3F680 follows_vram: ovl_009070D0 + compress: True subsegments: - [0x907120, data, overlays/ovl_009070D0_reloc] @@ -4992,6 +5552,7 @@ start: 0x907140 vram: 0x80A3F6A0 follows_vram: ovl_009070D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x907140, data, overlays/ovl_00907140] @@ -5000,6 +5561,7 @@ start: 0x907190 vram: 0x80A3F6F0 follows_vram: ovl_00907140 + compress: True subsegments: - [0x907190, data, overlays/ovl_00907140_reloc] @@ -5008,6 +5570,7 @@ start: 0x9071B0 vram: 0x80A3F710 follows_vram: ovl_00907140_reloc + compress: True bss_size: 0x0 subsegments: - [0x9071B0, asm, overlays/ovl_009071B0] @@ -5018,6 +5581,7 @@ start: 0x9075E0 vram: 0x80A3FB40 follows_vram: ovl_009071B0 + compress: True subsegments: - [0x9075E0, data, overlays/ovl_009071B0_reloc] @@ -5026,6 +5590,7 @@ start: 0x907640 vram: 0x80A3FBA0 follows_vram: ovl_009071B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x907640, data, overlays/ovl_00907640] @@ -5034,6 +5599,7 @@ start: 0x907690 vram: 0x80A3FBF0 follows_vram: ovl_00907640 + compress: True subsegments: - [0x907690, data, overlays/ovl_00907640_reloc] @@ -5042,6 +5608,7 @@ start: 0x9076B0 vram: 0x80A3FC10 follows_vram: ovl_00907640_reloc + compress: True bss_size: 0x0 subsegments: - [0x9076B0, data, overlays/ovl_009076B0] @@ -5050,6 +5617,7 @@ start: 0x907700 vram: 0x80A3FC60 follows_vram: ovl_009076B0 + compress: True subsegments: - [0x907700, data, overlays/ovl_009076B0_reloc] @@ -5058,6 +5626,7 @@ start: 0x907720 vram: 0x80A3FC80 follows_vram: ovl_009076B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x907720, data, overlays/ovl_00907720] @@ -5066,6 +5635,7 @@ start: 0x907770 vram: 0x80A3FCD0 follows_vram: ovl_00907720 + compress: True subsegments: - [0x907770, data, overlays/ovl_00907720_reloc] @@ -5074,6 +5644,7 @@ start: 0x907790 vram: 0x80A3FCF0 follows_vram: ovl_00907720_reloc + compress: True bss_size: 0x0 subsegments: - [0x907790, asm, overlays/ovl_00907790] @@ -5083,6 +5654,7 @@ start: 0x907AF0 vram: 0x80A40050 follows_vram: ovl_00907790 + compress: True subsegments: - [0x907AF0, data, overlays/ovl_00907790_reloc] @@ -5091,6 +5663,7 @@ start: 0x907B20 vram: 0x80A40080 follows_vram: ovl_00907790_reloc + compress: True bss_size: 0x0 subsegments: - [0x907B20, data, overlays/ovl_00907B20] @@ -5099,6 +5672,7 @@ start: 0x907B70 vram: 0x80A400D0 follows_vram: ovl_00907B20 + compress: True subsegments: - [0x907B70, data, overlays/ovl_00907B20_reloc] @@ -5107,6 +5681,7 @@ start: 0x907B90 vram: 0x80A400F0 follows_vram: ovl_00907B20_reloc + compress: True bss_size: 0x0 subsegments: - [0x907B90, data, overlays/ovl_00907B90] @@ -5115,6 +5690,7 @@ start: 0x907BE0 vram: 0x80A40140 follows_vram: ovl_00907B90 + compress: True subsegments: - [0x907BE0, data, overlays/ovl_00907B90_reloc] @@ -5123,6 +5699,7 @@ start: 0x907C00 vram: 0x80A40160 follows_vram: ovl_00907B90_reloc + compress: True bss_size: 0x0 subsegments: - [0x907C00, data, overlays/ovl_00907C00] @@ -5131,6 +5708,7 @@ start: 0x907C50 vram: 0x80A401B0 follows_vram: ovl_00907C00 + compress: True subsegments: - [0x907C50, data, overlays/ovl_00907C00_reloc] @@ -5139,6 +5717,7 @@ start: 0x907C70 vram: 0x80A401D0 follows_vram: ovl_00907C00_reloc + compress: True bss_size: 0x0 subsegments: - [0x907C70, data, overlays/ovl_00907C70] @@ -5147,6 +5726,7 @@ start: 0x907CC0 vram: 0x80A40220 follows_vram: ovl_00907C70 + compress: True subsegments: - [0x907CC0, data, overlays/ovl_00907C70_reloc] @@ -5155,6 +5735,7 @@ start: 0x907CE0 vram: 0x80A40240 follows_vram: ovl_00907C70_reloc + compress: True bss_size: 0x0 subsegments: - [0x907CE0, data, overlays/ovl_00907CE0] @@ -5163,6 +5744,7 @@ start: 0x907D30 vram: 0x80A40290 follows_vram: ovl_00907CE0 + compress: True subsegments: - [0x907D30, data, overlays/ovl_00907CE0_reloc] @@ -5171,6 +5753,7 @@ start: 0x907D50 vram: 0x80A402B0 follows_vram: ovl_00907CE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x907D50, data, overlays/ovl_00907D50] @@ -5179,6 +5762,7 @@ start: 0x907DA0 vram: 0x80A40300 follows_vram: ovl_00907D50 + compress: True subsegments: - [0x907DA0, data, overlays/ovl_00907D50_reloc] @@ -5187,6 +5771,7 @@ start: 0x907DC0 vram: 0x80A40320 follows_vram: ovl_00907D50_reloc + compress: True bss_size: 0x0 subsegments: - [0x907DC0, data, overlays/ovl_00907DC0] @@ -5195,6 +5780,7 @@ start: 0x907E10 vram: 0x80A40370 follows_vram: ovl_00907DC0 + compress: True subsegments: - [0x907E10, data, overlays/ovl_00907DC0_reloc] @@ -5203,6 +5789,7 @@ start: 0x907E30 vram: 0x80A40390 follows_vram: ovl_00907DC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x907E30, data, overlays/ovl_00907E30] @@ -5211,6 +5798,7 @@ start: 0x907E80 vram: 0x80A403E0 follows_vram: ovl_00907E30 + compress: True subsegments: - [0x907E80, data, overlays/ovl_00907E30_reloc] @@ -5219,6 +5807,7 @@ start: 0x907EA0 vram: 0x80A40400 follows_vram: ovl_00907E30_reloc + compress: True bss_size: 0x0 subsegments: - [0x907EA0, data, overlays/ovl_00907EA0] @@ -5227,6 +5816,7 @@ start: 0x907EF0 vram: 0x80A40450 follows_vram: ovl_00907EA0 + compress: True subsegments: - [0x907EF0, data, overlays/ovl_00907EA0_reloc] @@ -5235,6 +5825,7 @@ start: 0x907F10 vram: 0x80A40470 follows_vram: ovl_00907EA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x907F10, asm, overlays/ovl_00907F10] @@ -5244,6 +5835,7 @@ start: 0x907FF0 vram: 0x80A40550 follows_vram: ovl_00907F10 + compress: True subsegments: - [0x907FF0, data, overlays/ovl_00907F10_reloc] @@ -5252,6 +5844,7 @@ start: 0x908020 vram: 0x80A40580 follows_vram: ovl_00907F10_reloc + compress: True bss_size: 0x0 subsegments: - [0x908020, asm, overlays/ovl_00908020] @@ -5261,6 +5854,7 @@ start: 0x908100 vram: 0x80A40660 follows_vram: ovl_00908020 + compress: True subsegments: - [0x908100, data, overlays/ovl_00908020_reloc] @@ -5269,6 +5863,7 @@ start: 0x908130 vram: 0x80A40690 follows_vram: ovl_00908020_reloc + compress: True bss_size: 0x0 subsegments: - [0x908130, asm, overlays/ovl_00908130] @@ -5278,6 +5873,7 @@ start: 0x908210 vram: 0x80A40770 follows_vram: ovl_00908130 + compress: True subsegments: - [0x908210, data, overlays/ovl_00908130_reloc] @@ -5286,6 +5882,7 @@ start: 0x908240 vram: 0x80A407A0 follows_vram: ovl_00908130_reloc + compress: True bss_size: 0x0 subsegments: - [0x908240, asm, overlays/ovl_00908240] @@ -5295,6 +5892,7 @@ start: 0x908330 vram: 0x80A40890 follows_vram: ovl_00908240 + compress: True subsegments: - [0x908330, data, overlays/ovl_00908240_reloc] @@ -5303,6 +5901,7 @@ start: 0x908350 vram: 0x80A408B0 follows_vram: ovl_00908240_reloc + compress: True bss_size: 0x0 subsegments: - [0x908350, data, overlays/ovl_00908350] @@ -5311,6 +5910,7 @@ start: 0x9083A0 vram: 0x80A40900 follows_vram: ovl_00908350 + compress: True subsegments: - [0x9083A0, data, overlays/ovl_00908350_reloc] @@ -5319,6 +5919,7 @@ start: 0x9083C0 vram: 0x80A40920 follows_vram: ovl_00908350_reloc + compress: True bss_size: 0x0 subsegments: - [0x9083C0, data, overlays/ovl_009083C0] @@ -5327,6 +5928,7 @@ start: 0x908410 vram: 0x80A40970 follows_vram: ovl_009083C0 + compress: True subsegments: - [0x908410, data, overlays/ovl_009083C0_reloc] @@ -5335,6 +5937,7 @@ start: 0x908430 vram: 0x80A40990 follows_vram: ovl_009083C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x908430, data, overlays/ovl_00908430] @@ -5343,6 +5946,7 @@ start: 0x908480 vram: 0x80A409E0 follows_vram: ovl_00908430 + compress: True subsegments: - [0x908480, data, overlays/ovl_00908430_reloc] @@ -5351,6 +5955,7 @@ start: 0x9084A0 vram: 0x80A40A00 follows_vram: ovl_00908430_reloc + compress: True bss_size: 0x0 subsegments: - [0x9084A0, data, overlays/ovl_009084A0] @@ -5359,6 +5964,7 @@ start: 0x9084F0 vram: 0x80A40A50 follows_vram: ovl_009084A0 + compress: True subsegments: - [0x9084F0, data, overlays/ovl_009084A0_reloc] @@ -5367,6 +5973,7 @@ start: 0x908510 vram: 0x80A40A70 follows_vram: ovl_009084A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x908510, data, overlays/ovl_00908510] @@ -5375,6 +5982,7 @@ start: 0x908560 vram: 0x80A40AC0 follows_vram: ovl_00908510 + compress: True subsegments: - [0x908560, data, overlays/ovl_00908510_reloc] @@ -5383,6 +5991,7 @@ start: 0x908580 vram: 0x80A40AE0 follows_vram: ovl_00908510_reloc + compress: True bss_size: 0x0 subsegments: - [0x908580, asm, overlays/ovl_00908580] @@ -5392,6 +6001,7 @@ start: 0x9088E0 vram: 0x80A40E40 follows_vram: ovl_00908580 + compress: True subsegments: - [0x9088E0, data, overlays/ovl_00908580_reloc] @@ -5400,6 +6010,7 @@ start: 0x908910 vram: 0x80A40E70 follows_vram: ovl_00908580_reloc + compress: True bss_size: 0x0 subsegments: - [0x908910, data, overlays/ovl_00908910] @@ -5408,6 +6019,7 @@ start: 0x908960 vram: 0x80A40EC0 follows_vram: ovl_00908910 + compress: True subsegments: - [0x908960, data, overlays/ovl_00908910_reloc] @@ -5416,6 +6028,7 @@ start: 0x908980 vram: 0x80A40EE0 follows_vram: ovl_00908910_reloc + compress: True bss_size: 0x0 subsegments: - [0x908980, data, overlays/ovl_00908980] @@ -5424,6 +6037,7 @@ start: 0x9089D0 vram: 0x80A40F30 follows_vram: ovl_00908980 + compress: True subsegments: - [0x9089D0, data, overlays/ovl_00908980_reloc] @@ -5432,6 +6046,7 @@ start: 0x9089F0 vram: 0x80A40F50 follows_vram: ovl_00908980_reloc + compress: True bss_size: 0x0 subsegments: - [0x9089F0, data, overlays/ovl_009089F0] @@ -5440,6 +6055,7 @@ start: 0x908A40 vram: 0x80A40FA0 follows_vram: ovl_009089F0 + compress: True subsegments: - [0x908A40, data, overlays/ovl_009089F0_reloc] @@ -5448,6 +6064,7 @@ start: 0x908A60 vram: 0x80A40FC0 follows_vram: ovl_009089F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x908A60, data, overlays/ovl_00908A60] @@ -5456,6 +6073,7 @@ start: 0x908AB0 vram: 0x80A41010 follows_vram: ovl_00908A60 + compress: True subsegments: - [0x908AB0, data, overlays/ovl_00908A60_reloc] @@ -5464,6 +6082,7 @@ start: 0x908AD0 vram: 0x80A41030 follows_vram: ovl_00908A60_reloc + compress: True bss_size: 0x0 subsegments: - [0x908AD0, data, overlays/ovl_00908AD0] @@ -5472,6 +6091,7 @@ start: 0x908B20 vram: 0x80A41080 follows_vram: ovl_00908AD0 + compress: True subsegments: - [0x908B20, data, overlays/ovl_00908AD0_reloc] @@ -5480,6 +6100,7 @@ start: 0x908B40 vram: 0x80A410A0 follows_vram: ovl_00908AD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x908B40, data, overlays/ovl_00908B40] @@ -5488,6 +6109,7 @@ start: 0x908B90 vram: 0x80A410F0 follows_vram: ovl_00908B40 + compress: True subsegments: - [0x908B90, data, overlays/ovl_00908B40_reloc] @@ -5496,6 +6118,7 @@ start: 0x908BB0 vram: 0x80A41110 follows_vram: ovl_00908B40_reloc + compress: True bss_size: 0x0 subsegments: - [0x908BB0, data, overlays/ovl_00908BB0] @@ -5504,6 +6127,7 @@ start: 0x908C00 vram: 0x80A41160 follows_vram: ovl_00908BB0 + compress: True subsegments: - [0x908C00, data, overlays/ovl_00908BB0_reloc] @@ -5512,6 +6136,7 @@ start: 0x908C20 vram: 0x80A41180 follows_vram: ovl_00908BB0_reloc + compress: True bss_size: 0x0 subsegments: - [0x908C20, data, overlays/ovl_00908C20] @@ -5520,6 +6145,7 @@ start: 0x908C70 vram: 0x80A411D0 follows_vram: ovl_00908C20 + compress: True subsegments: - [0x908C70, data, overlays/ovl_00908C20_reloc] @@ -5528,6 +6154,7 @@ start: 0x908C90 vram: 0x80A411F0 follows_vram: ovl_00908C20_reloc + compress: True bss_size: 0x0 subsegments: - [0x908C90, data, overlays/ovl_00908C90] @@ -5536,6 +6163,7 @@ start: 0x908CE0 vram: 0x80A41240 follows_vram: ovl_00908C90 + compress: True subsegments: - [0x908CE0, data, overlays/ovl_00908C90_reloc] @@ -5544,6 +6172,7 @@ start: 0x908D00 vram: 0x80A41260 follows_vram: ovl_00908C90_reloc + compress: True bss_size: 0x0 subsegments: - [0x908D00, data, overlays/ovl_00908D00] @@ -5552,6 +6181,7 @@ start: 0x908D50 vram: 0x80A412B0 follows_vram: ovl_00908D00 + compress: True subsegments: - [0x908D50, data, overlays/ovl_00908D00_reloc] @@ -5560,6 +6190,7 @@ start: 0x908D70 vram: 0x80A412D0 follows_vram: ovl_00908D00_reloc + compress: True bss_size: 0x0 subsegments: - [0x908D70, data, overlays/ovl_00908D70] @@ -5568,6 +6199,7 @@ start: 0x908DC0 vram: 0x80A41320 follows_vram: ovl_00908D70 + compress: True subsegments: - [0x908DC0, data, overlays/ovl_00908D70_reloc] @@ -5576,6 +6208,7 @@ start: 0x908DE0 vram: 0x80A41340 follows_vram: ovl_00908D70_reloc + compress: True bss_size: 0x0 subsegments: - [0x908DE0, data, overlays/ovl_00908DE0] @@ -5584,6 +6217,7 @@ start: 0x908E30 vram: 0x80A41390 follows_vram: ovl_00908DE0 + compress: True subsegments: - [0x908E30, data, overlays/ovl_00908DE0_reloc] @@ -5592,6 +6226,7 @@ start: 0x908E50 vram: 0x80A413B0 follows_vram: ovl_00908DE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x908E50, data, overlays/ovl_00908E50] @@ -5600,6 +6235,7 @@ start: 0x908EA0 vram: 0x80A41400 follows_vram: ovl_00908E50 + compress: True subsegments: - [0x908EA0, data, overlays/ovl_00908E50_reloc] @@ -5608,6 +6244,7 @@ start: 0x908EC0 vram: 0x80A41420 follows_vram: ovl_00908E50_reloc + compress: True bss_size: 0x0 subsegments: - [0x908EC0, data, overlays/ovl_00908EC0] @@ -5616,6 +6253,7 @@ start: 0x908F10 vram: 0x80A41470 follows_vram: ovl_00908EC0 + compress: True subsegments: - [0x908F10, data, overlays/ovl_00908EC0_reloc] @@ -5624,6 +6262,7 @@ start: 0x908F30 vram: 0x80A41490 follows_vram: ovl_00908EC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x908F30, asm, overlays/ovl_00908F30] @@ -5633,6 +6272,7 @@ start: 0x9093D0 vram: 0x80A41930 follows_vram: ovl_00908F30 + compress: True subsegments: - [0x9093D0, data, overlays/ovl_00908F30_reloc] @@ -5641,6 +6281,7 @@ start: 0x909410 vram: 0x80A41970 follows_vram: ovl_00908F30_reloc + compress: True bss_size: 0x0 subsegments: - [0x909410, data, overlays/ovl_00909410] @@ -5649,6 +6290,7 @@ start: 0x909460 vram: 0x80A419C0 follows_vram: ovl_00909410 + compress: True subsegments: - [0x909460, data, overlays/ovl_00909410_reloc] @@ -5657,6 +6299,7 @@ start: 0x909480 vram: 0x80A419E0 follows_vram: ovl_00909410_reloc + compress: True bss_size: 0x0 subsegments: - [0x909480, data, overlays/ovl_00909480] @@ -5665,6 +6308,7 @@ start: 0x9094D0 vram: 0x80A41A30 follows_vram: ovl_00909480 + compress: True subsegments: - [0x9094D0, data, overlays/ovl_00909480_reloc] @@ -5673,6 +6317,7 @@ start: 0x9094F0 vram: 0x80A41A50 follows_vram: ovl_00909480_reloc + compress: True bss_size: 0x0 subsegments: - [0x9094F0, data, overlays/ovl_009094F0] @@ -5681,6 +6326,7 @@ start: 0x909540 vram: 0x80A41AA0 follows_vram: ovl_009094F0 + compress: True subsegments: - [0x909540, data, overlays/ovl_009094F0_reloc] @@ -5689,6 +6335,7 @@ start: 0x909560 vram: 0x80A41AC0 follows_vram: ovl_009094F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x909560, data, overlays/ovl_00909560] @@ -5697,6 +6344,7 @@ start: 0x9095B0 vram: 0x80A41B10 follows_vram: ovl_00909560 + compress: True subsegments: - [0x9095B0, data, overlays/ovl_00909560_reloc] @@ -5705,6 +6353,7 @@ start: 0x9095D0 vram: 0x80A41B30 follows_vram: ovl_00909560_reloc + compress: True bss_size: 0x0 subsegments: - [0x9095D0, asm, overlays/ovl_009095D0] @@ -5714,6 +6363,7 @@ start: 0x9096B0 vram: 0x80A41C10 follows_vram: ovl_009095D0 + compress: True subsegments: - [0x9096B0, data, overlays/ovl_009095D0_reloc] @@ -5722,6 +6372,7 @@ start: 0x9096E0 vram: 0x80A41C40 follows_vram: ovl_009095D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9096E0, asm, overlays/ovl_009096E0] @@ -5731,6 +6382,7 @@ start: 0x9097D0 vram: 0x80A41D30 follows_vram: ovl_009096E0 + compress: True subsegments: - [0x9097D0, data, overlays/ovl_009096E0_reloc] @@ -5739,6 +6391,7 @@ start: 0x9097F0 vram: 0x80A41D50 follows_vram: ovl_009096E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9097F0, asm, overlays/ovl_009097F0] @@ -5748,6 +6401,7 @@ start: 0x9098D0 vram: 0x80A41E30 follows_vram: ovl_009097F0 + compress: True subsegments: - [0x9098D0, data, overlays/ovl_009097F0_reloc] @@ -5756,6 +6410,7 @@ start: 0x909900 vram: 0x80A41E60 follows_vram: ovl_009097F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x909900, data, overlays/ovl_00909900] @@ -5764,6 +6419,7 @@ start: 0x909950 vram: 0x80A41EB0 follows_vram: ovl_00909900 + compress: True subsegments: - [0x909950, data, overlays/ovl_00909900_reloc] @@ -5772,6 +6428,7 @@ start: 0x909970 vram: 0x80A41ED0 follows_vram: ovl_00909900_reloc + compress: True bss_size: 0x0 subsegments: - [0x909970, data, overlays/ovl_00909970] @@ -5780,6 +6437,7 @@ start: 0x9099C0 vram: 0x80A41F20 follows_vram: ovl_00909970 + compress: True subsegments: - [0x9099C0, data, overlays/ovl_00909970_reloc] @@ -5788,6 +6446,7 @@ start: 0x9099E0 vram: 0x80A41F40 follows_vram: ovl_00909970_reloc + compress: True bss_size: 0x0 subsegments: - [0x9099E0, data, overlays/ovl_009099E0] @@ -5796,6 +6455,7 @@ start: 0x909A30 vram: 0x80A41F90 follows_vram: ovl_009099E0 + compress: True subsegments: - [0x909A30, data, overlays/ovl_009099E0_reloc] @@ -5804,6 +6464,7 @@ start: 0x909A50 vram: 0x80A41FB0 follows_vram: ovl_009099E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x909A50, asm, overlays/ovl_00909A50] @@ -5813,6 +6474,7 @@ start: 0x909B30 vram: 0x80A42090 follows_vram: ovl_00909A50 + compress: True subsegments: - [0x909B30, data, overlays/ovl_00909A50_reloc] @@ -5821,6 +6483,7 @@ start: 0x909B60 vram: 0x80A420C0 follows_vram: ovl_00909A50_reloc + compress: True bss_size: 0x0 subsegments: - [0x909B60, asm, overlays/ovl_00909B60] @@ -5830,6 +6493,7 @@ start: 0x909EC0 vram: 0x80A42420 follows_vram: ovl_00909B60 + compress: True subsegments: - [0x909EC0, data, overlays/ovl_00909B60_reloc] @@ -5838,6 +6502,7 @@ start: 0x909EF0 vram: 0x80A42450 follows_vram: ovl_00909B60_reloc + compress: True bss_size: 0x0 subsegments: - [0x909EF0, data, overlays/ovl_00909EF0] @@ -5846,6 +6511,7 @@ start: 0x909F40 vram: 0x80A424A0 follows_vram: ovl_00909EF0 + compress: True subsegments: - [0x909F40, data, overlays/ovl_00909EF0_reloc] @@ -5854,6 +6520,7 @@ start: 0x909F60 vram: 0x80A424C0 follows_vram: ovl_00909EF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x909F60, data, overlays/ovl_00909F60] @@ -5862,6 +6529,7 @@ start: 0x909FB0 vram: 0x80A42510 follows_vram: ovl_00909F60 + compress: True subsegments: - [0x909FB0, data, overlays/ovl_00909F60_reloc] @@ -5870,6 +6538,7 @@ start: 0x909FD0 vram: 0x80A42530 follows_vram: ovl_00909F60_reloc + compress: True bss_size: 0x0 subsegments: - [0x909FD0, data, overlays/ovl_00909FD0] @@ -5878,6 +6547,7 @@ start: 0x90A020 vram: 0x80A42580 follows_vram: ovl_00909FD0 + compress: True subsegments: - [0x90A020, data, overlays/ovl_00909FD0_reloc] @@ -5886,6 +6556,7 @@ start: 0x90A040 vram: 0x80A425A0 follows_vram: ovl_00909FD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90A040, asm, overlays/ovl_0090A040] @@ -5895,6 +6566,7 @@ start: 0x90A3A0 vram: 0x80A42900 follows_vram: ovl_0090A040 + compress: True subsegments: - [0x90A3A0, data, overlays/ovl_0090A040_reloc] @@ -5903,6 +6575,7 @@ start: 0x90A3D0 vram: 0x80A42930 follows_vram: ovl_0090A040_reloc + compress: True bss_size: 0x0 subsegments: - [0x90A3D0, data, overlays/ovl_0090A3D0] @@ -5911,6 +6584,7 @@ start: 0x90A420 vram: 0x80A42980 follows_vram: ovl_0090A3D0 + compress: True subsegments: - [0x90A420, data, overlays/ovl_0090A3D0_reloc] @@ -5919,6 +6593,7 @@ start: 0x90A440 vram: 0x80A429A0 follows_vram: ovl_0090A3D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90A440, data, overlays/ovl_0090A440] @@ -5927,6 +6602,7 @@ start: 0x90A490 vram: 0x80A429F0 follows_vram: ovl_0090A440 + compress: True subsegments: - [0x90A490, data, overlays/ovl_0090A440_reloc] @@ -5935,6 +6611,7 @@ start: 0x90A4B0 vram: 0x80A42A10 follows_vram: ovl_0090A440_reloc + compress: True bss_size: 0x0 subsegments: - [0x90A4B0, data, overlays/ovl_0090A4B0] @@ -5943,6 +6620,7 @@ start: 0x90A500 vram: 0x80A42A60 follows_vram: ovl_0090A4B0 + compress: True subsegments: - [0x90A500, data, overlays/ovl_0090A4B0_reloc] @@ -5951,6 +6629,7 @@ start: 0x90A520 vram: 0x80A42A80 follows_vram: ovl_0090A4B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90A520, asm, overlays/ovl_0090A520] @@ -5961,6 +6640,7 @@ start: 0x90AD50 vram: 0x80A432B0 follows_vram: ovl_0090A520 + compress: True subsegments: - [0x90AD50, data, overlays/ovl_0090A520_reloc] @@ -5969,6 +6649,7 @@ start: 0x90ADB0 vram: 0x80A43310 follows_vram: ovl_0090A520_reloc + compress: True bss_size: 0x0 subsegments: - [0x90ADB0, data, overlays/ovl_0090ADB0] @@ -5977,6 +6658,7 @@ start: 0x90AE00 vram: 0x80A43360 follows_vram: ovl_0090ADB0 + compress: True subsegments: - [0x90AE00, data, overlays/ovl_0090ADB0_reloc] @@ -5985,6 +6667,7 @@ start: 0x90AE20 vram: 0x80A43380 follows_vram: ovl_0090ADB0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90AE20, asm, overlays/ovl_0090AE20] @@ -5994,6 +6677,7 @@ start: 0x90B180 vram: 0x80A436E0 follows_vram: ovl_0090AE20 + compress: True subsegments: - [0x90B180, data, overlays/ovl_0090AE20_reloc] @@ -6002,6 +6686,7 @@ start: 0x90B1B0 vram: 0x80A43710 follows_vram: ovl_0090AE20_reloc + compress: True bss_size: 0x0 subsegments: - [0x90B1B0, data, overlays/ovl_0090B1B0] @@ -6010,6 +6695,7 @@ start: 0x90B200 vram: 0x80A43760 follows_vram: ovl_0090B1B0 + compress: True subsegments: - [0x90B200, data, overlays/ovl_0090B1B0_reloc] @@ -6018,6 +6704,7 @@ start: 0x90B220 vram: 0x80A43780 follows_vram: ovl_0090B1B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90B220, data, overlays/ovl_0090B220] @@ -6026,6 +6713,7 @@ start: 0x90B270 vram: 0x80A437D0 follows_vram: ovl_0090B220 + compress: True subsegments: - [0x90B270, data, overlays/ovl_0090B220_reloc] @@ -6034,6 +6722,7 @@ start: 0x90B290 vram: 0x80A437F0 follows_vram: ovl_0090B220_reloc + compress: True bss_size: 0x0 subsegments: - [0x90B290, data, overlays/ovl_0090B290] @@ -6042,6 +6731,7 @@ start: 0x90B2E0 vram: 0x80A43840 follows_vram: ovl_0090B290 + compress: True subsegments: - [0x90B2E0, data, overlays/ovl_0090B290_reloc] @@ -6050,6 +6740,7 @@ start: 0x90B300 vram: 0x80A43860 follows_vram: ovl_0090B290_reloc + compress: True bss_size: 0x0 subsegments: - [0x90B300, data, overlays/ovl_0090B300] @@ -6058,6 +6749,7 @@ start: 0x90B350 vram: 0x80A438B0 follows_vram: ovl_0090B300 + compress: True subsegments: - [0x90B350, data, overlays/ovl_0090B300_reloc] @@ -6066,6 +6758,7 @@ start: 0x90B370 vram: 0x80A438D0 follows_vram: ovl_0090B300_reloc + compress: True bss_size: 0x0 subsegments: - [0x90B370, data, overlays/ovl_0090B370] @@ -6074,6 +6767,7 @@ start: 0x90B3C0 vram: 0x80A43920 follows_vram: ovl_0090B370 + compress: True subsegments: - [0x90B3C0, data, overlays/ovl_0090B370_reloc] @@ -6082,6 +6776,7 @@ start: 0x90B3E0 vram: 0x80A43940 follows_vram: ovl_0090B370_reloc + compress: True bss_size: 0x0 subsegments: - [0x90B3E0, data, overlays/ovl_0090B3E0] @@ -6090,6 +6785,7 @@ start: 0x90B430 vram: 0x80A43990 follows_vram: ovl_0090B3E0 + compress: True subsegments: - [0x90B430, data, overlays/ovl_0090B3E0_reloc] @@ -6098,6 +6794,7 @@ start: 0x90B450 vram: 0x80A439B0 follows_vram: ovl_0090B3E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90B450, data, overlays/ovl_0090B450] @@ -6106,6 +6803,7 @@ start: 0x90B4A0 vram: 0x80A43A00 follows_vram: ovl_0090B450 + compress: True subsegments: - [0x90B4A0, data, overlays/ovl_0090B450_reloc] @@ -6114,6 +6812,7 @@ start: 0x90B4C0 vram: 0x80A43A20 follows_vram: ovl_0090B450_reloc + compress: True bss_size: 0x0 subsegments: - [0x90B4C0, data, overlays/ovl_0090B4C0] @@ -6122,6 +6821,7 @@ start: 0x90B510 vram: 0x80A43A70 follows_vram: ovl_0090B4C0 + compress: True subsegments: - [0x90B510, data, overlays/ovl_0090B4C0_reloc] @@ -6130,6 +6830,7 @@ start: 0x90B530 vram: 0x80A43A90 follows_vram: ovl_0090B4C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90B530, data, overlays/ovl_0090B530] @@ -6138,6 +6839,7 @@ start: 0x90B580 vram: 0x80A43AE0 follows_vram: ovl_0090B530 + compress: True subsegments: - [0x90B580, data, overlays/ovl_0090B530_reloc] @@ -6146,6 +6848,7 @@ start: 0x90B5A0 vram: 0x80A43B00 follows_vram: ovl_0090B530_reloc + compress: True bss_size: 0x0 subsegments: - [0x90B5A0, data, overlays/ovl_0090B5A0] @@ -6154,6 +6857,7 @@ start: 0x90B5F0 vram: 0x80A43B50 follows_vram: ovl_0090B5A0 + compress: True subsegments: - [0x90B5F0, data, overlays/ovl_0090B5A0_reloc] @@ -6162,6 +6866,7 @@ start: 0x90B610 vram: 0x80A43B70 follows_vram: ovl_0090B5A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90B610, asm, overlays/ovl_0090B610] @@ -6171,6 +6876,7 @@ start: 0x90B970 vram: 0x80A43ED0 follows_vram: ovl_0090B610 + compress: True subsegments: - [0x90B970, data, overlays/ovl_0090B610_reloc] @@ -6179,6 +6885,7 @@ start: 0x90B9A0 vram: 0x80A43F00 follows_vram: ovl_0090B610_reloc + compress: True bss_size: 0x0 subsegments: - [0x90B9A0, data, overlays/ovl_0090B9A0] @@ -6187,6 +6894,7 @@ start: 0x90B9F0 vram: 0x80A43F50 follows_vram: ovl_0090B9A0 + compress: True subsegments: - [0x90B9F0, data, overlays/ovl_0090B9A0_reloc] @@ -6195,6 +6903,7 @@ start: 0x90BA10 vram: 0x80A43F70 follows_vram: ovl_0090B9A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90BA10, data, overlays/ovl_0090BA10] @@ -6203,6 +6912,7 @@ start: 0x90BA60 vram: 0x80A43FC0 follows_vram: ovl_0090BA10 + compress: True subsegments: - [0x90BA60, data, overlays/ovl_0090BA10_reloc] @@ -6211,6 +6921,7 @@ start: 0x90BA80 vram: 0x80A43FE0 follows_vram: ovl_0090BA10_reloc + compress: True bss_size: 0x0 subsegments: - [0x90BA80, data, overlays/ovl_0090BA80] @@ -6219,6 +6930,7 @@ start: 0x90BAD0 vram: 0x80A44030 follows_vram: ovl_0090BA80 + compress: True subsegments: - [0x90BAD0, data, overlays/ovl_0090BA80_reloc] @@ -6227,6 +6939,7 @@ start: 0x90BAF0 vram: 0x80A44050 follows_vram: ovl_0090BA80_reloc + compress: True bss_size: 0x0 subsegments: - [0x90BAF0, data, overlays/ovl_0090BAF0] @@ -6235,6 +6948,7 @@ start: 0x90BB40 vram: 0x80A440A0 follows_vram: ovl_0090BAF0 + compress: True subsegments: - [0x90BB40, data, overlays/ovl_0090BAF0_reloc] @@ -6243,6 +6957,7 @@ start: 0x90BB60 vram: 0x80A440C0 follows_vram: ovl_0090BAF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90BB60, asm, overlays/ovl_0090BB60] @@ -6252,6 +6967,7 @@ start: 0x90BC40 vram: 0x80A441A0 follows_vram: ovl_0090BB60 + compress: True subsegments: - [0x90BC40, data, overlays/ovl_0090BB60_reloc] @@ -6260,6 +6976,7 @@ start: 0x90BC70 vram: 0x80A441D0 follows_vram: ovl_0090BB60_reloc + compress: True bss_size: 0x0 subsegments: - [0x90BC70, data, overlays/ovl_0090BC70] @@ -6268,6 +6985,7 @@ start: 0x90BCC0 vram: 0x80A44220 follows_vram: ovl_0090BC70 + compress: True subsegments: - [0x90BCC0, data, overlays/ovl_0090BC70_reloc] @@ -6276,6 +6994,7 @@ start: 0x90BCE0 vram: 0x80A44240 follows_vram: ovl_0090BC70_reloc + compress: True bss_size: 0x0 subsegments: - [0x90BCE0, asm, overlays/ovl_0090BCE0] @@ -6285,6 +7004,7 @@ start: 0x90C040 vram: 0x80A445A0 follows_vram: ovl_0090BCE0 + compress: True subsegments: - [0x90C040, data, overlays/ovl_0090BCE0_reloc] @@ -6293,6 +7013,7 @@ start: 0x90C070 vram: 0x80A445D0 follows_vram: ovl_0090BCE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90C070, data, overlays/ovl_0090C070] @@ -6301,6 +7022,7 @@ start: 0x90C0C0 vram: 0x80A44620 follows_vram: ovl_0090C070 + compress: True subsegments: - [0x90C0C0, data, overlays/ovl_0090C070_reloc] @@ -6309,6 +7031,7 @@ start: 0x90C0E0 vram: 0x80A44640 follows_vram: ovl_0090C070_reloc + compress: True bss_size: 0x0 subsegments: - [0x90C0E0, asm, overlays/ovl_0090C0E0] @@ -6318,6 +7041,7 @@ start: 0x90C250 vram: 0x80A447B0 follows_vram: ovl_0090C0E0 + compress: True subsegments: - [0x90C250, data, overlays/ovl_0090C0E0_reloc] @@ -6326,6 +7050,7 @@ start: 0x90C280 vram: 0x80A447E0 follows_vram: ovl_0090C0E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90C280, asm, overlays/ovl_0090C280] @@ -6335,6 +7060,7 @@ start: 0x90C330 vram: 0x80A44890 follows_vram: ovl_0090C280 + compress: True subsegments: - [0x90C330, data, overlays/ovl_0090C280_reloc] @@ -6343,6 +7069,7 @@ start: 0x90C360 vram: 0x80A448C0 follows_vram: ovl_0090C280_reloc + compress: True bss_size: 0x0 subsegments: - [0x90C360, asm, overlays/ovl_0090C360] @@ -6352,6 +7079,7 @@ start: 0x90C440 vram: 0x80A449A0 follows_vram: ovl_0090C360 + compress: True subsegments: - [0x90C440, data, overlays/ovl_0090C360_reloc] @@ -6360,6 +7088,7 @@ start: 0x90C470 vram: 0x80A449D0 follows_vram: ovl_0090C360_reloc + compress: True bss_size: 0x0 subsegments: - [0x90C470, asm, overlays/ovl_0090C470] @@ -6369,6 +7098,7 @@ start: 0x90C550 vram: 0x80A44AB0 follows_vram: ovl_0090C470 + compress: True subsegments: - [0x90C550, data, overlays/ovl_0090C470_reloc] @@ -6377,6 +7107,7 @@ start: 0x90C580 vram: 0x80A44AE0 follows_vram: ovl_0090C470_reloc + compress: True bss_size: 0x0 subsegments: - [0x90C580, asm, overlays/ovl_0090C580] @@ -6386,6 +7117,7 @@ start: 0x90C660 vram: 0x80A44BC0 follows_vram: ovl_0090C580 + compress: True subsegments: - [0x90C660, data, overlays/ovl_0090C580_reloc] @@ -6394,6 +7126,7 @@ start: 0x90C690 vram: 0x80A44BF0 follows_vram: ovl_0090C580_reloc + compress: True bss_size: 0x0 subsegments: - [0x90C690, data, overlays/ovl_0090C690] @@ -6402,6 +7135,7 @@ start: 0x90C6E0 vram: 0x80A44C40 follows_vram: ovl_0090C690 + compress: True subsegments: - [0x90C6E0, data, overlays/ovl_0090C690_reloc] @@ -6410,6 +7144,7 @@ start: 0x90C700 vram: 0x80A44C60 follows_vram: ovl_0090C690_reloc + compress: True bss_size: 0x0 subsegments: - [0x90C700, data, overlays/ovl_0090C700] @@ -6418,6 +7153,7 @@ start: 0x90C750 vram: 0x80A44CB0 follows_vram: ovl_0090C700 + compress: True subsegments: - [0x90C750, data, overlays/ovl_0090C700_reloc] @@ -6426,6 +7162,7 @@ start: 0x90C770 vram: 0x80A44CD0 follows_vram: ovl_0090C700_reloc + compress: True bss_size: 0x0 subsegments: - [0x90C770, data, overlays/ovl_0090C770] @@ -6434,6 +7171,7 @@ start: 0x90C7C0 vram: 0x80A44D20 follows_vram: ovl_0090C770 + compress: True subsegments: - [0x90C7C0, data, overlays/ovl_0090C770_reloc] @@ -6442,6 +7180,7 @@ start: 0x90C7E0 vram: 0x80A44D40 follows_vram: ovl_0090C770_reloc + compress: True bss_size: 0x0 subsegments: - [0x90C7E0, data, overlays/ovl_0090C7E0] @@ -6450,6 +7189,7 @@ start: 0x90C830 vram: 0x80A44D90 follows_vram: ovl_0090C7E0 + compress: True subsegments: - [0x90C830, data, overlays/ovl_0090C7E0_reloc] @@ -6458,6 +7198,7 @@ start: 0x90C850 vram: 0x80A44DB0 follows_vram: ovl_0090C7E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90C850, asm, overlays/ovl_0090C850] @@ -6467,6 +7208,7 @@ start: 0x90C930 vram: 0x80A44E90 follows_vram: ovl_0090C850 + compress: True subsegments: - [0x90C930, data, overlays/ovl_0090C850_reloc] @@ -6475,6 +7217,7 @@ start: 0x90C960 vram: 0x80A44EC0 follows_vram: ovl_0090C850_reloc + compress: True bss_size: 0x0 subsegments: - [0x90C960, data, overlays/ovl_0090C960] @@ -6483,6 +7226,7 @@ start: 0x90C9B0 vram: 0x80A44F10 follows_vram: ovl_0090C960 + compress: True subsegments: - [0x90C9B0, data, overlays/ovl_0090C960_reloc] @@ -6491,6 +7235,7 @@ start: 0x90C9D0 vram: 0x80A44F30 follows_vram: ovl_0090C960_reloc + compress: True bss_size: 0x0 subsegments: - [0x90C9D0, asm, overlays/ovl_0090C9D0] @@ -6500,6 +7245,7 @@ start: 0x90CAC0 vram: 0x80A45020 follows_vram: ovl_0090C9D0 + compress: True subsegments: - [0x90CAC0, data, overlays/ovl_0090C9D0_reloc] @@ -6508,6 +7254,7 @@ start: 0x90CAE0 vram: 0x80A45040 follows_vram: ovl_0090C9D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90CAE0, asm, overlays/ovl_0090CAE0] @@ -6517,6 +7264,7 @@ start: 0x90CE70 vram: 0x80A453D0 follows_vram: ovl_0090CAE0 + compress: True subsegments: - [0x90CE70, data, overlays/ovl_0090CAE0_reloc] @@ -6525,6 +7273,7 @@ start: 0x90CEA0 vram: 0x80A45400 follows_vram: ovl_0090CAE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90CEA0, asm, overlays/ovl_0090CEA0] @@ -6534,6 +7283,7 @@ start: 0x90CF80 vram: 0x80A454E0 follows_vram: ovl_0090CEA0 + compress: True subsegments: - [0x90CF80, data, overlays/ovl_0090CEA0_reloc] @@ -6542,6 +7292,7 @@ start: 0x90CFB0 vram: 0x80A45510 follows_vram: ovl_0090CEA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90CFB0, asm, overlays/ovl_0090CFB0] @@ -6552,6 +7303,7 @@ start: 0x90D440 vram: 0x80A459A0 follows_vram: ovl_0090CFB0 + compress: True subsegments: - [0x90D440, data, overlays/ovl_0090CFB0_reloc] @@ -6560,6 +7312,7 @@ start: 0x90D480 vram: 0x80A459E0 follows_vram: ovl_0090CFB0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90D480, data, overlays/ovl_0090D480] @@ -6568,6 +7321,7 @@ start: 0x90D4D0 vram: 0x80A45A30 follows_vram: ovl_0090D480 + compress: True subsegments: - [0x90D4D0, data, overlays/ovl_0090D480_reloc] @@ -6576,6 +7330,7 @@ start: 0x90D4F0 vram: 0x80A45A50 follows_vram: ovl_0090D480_reloc + compress: True bss_size: 0x0 subsegments: - [0x90D4F0, data, overlays/ovl_0090D4F0] @@ -6584,6 +7339,7 @@ start: 0x90D540 vram: 0x80A45AA0 follows_vram: ovl_0090D4F0 + compress: True subsegments: - [0x90D540, data, overlays/ovl_0090D4F0_reloc] @@ -6592,6 +7348,7 @@ start: 0x90D560 vram: 0x80A45AC0 follows_vram: ovl_0090D4F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90D560, data, overlays/ovl_0090D560] @@ -6600,6 +7357,7 @@ start: 0x90D5B0 vram: 0x80A45B10 follows_vram: ovl_0090D560 + compress: True subsegments: - [0x90D5B0, data, overlays/ovl_0090D560_reloc] @@ -6608,6 +7366,7 @@ start: 0x90D5D0 vram: 0x80A45B30 follows_vram: ovl_0090D560_reloc + compress: True bss_size: 0x0 subsegments: - [0x90D5D0, data, overlays/ovl_0090D5D0] @@ -6616,6 +7375,7 @@ start: 0x90D620 vram: 0x80A45B80 follows_vram: ovl_0090D5D0 + compress: True subsegments: - [0x90D620, data, overlays/ovl_0090D5D0_reloc] @@ -6624,6 +7384,7 @@ start: 0x90D640 vram: 0x80A45BA0 follows_vram: ovl_0090D5D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90D640, data, overlays/ovl_0090D640] @@ -6632,6 +7393,7 @@ start: 0x90D690 vram: 0x80A45BF0 follows_vram: ovl_0090D640 + compress: True subsegments: - [0x90D690, data, overlays/ovl_0090D640_reloc] @@ -6640,6 +7402,7 @@ start: 0x90D6B0 vram: 0x80A45C10 follows_vram: ovl_0090D640_reloc + compress: True bss_size: 0x0 subsegments: - [0x90D6B0, data, overlays/ovl_0090D6B0] @@ -6648,6 +7411,7 @@ start: 0x90D700 vram: 0x80A45C60 follows_vram: ovl_0090D6B0 + compress: True subsegments: - [0x90D700, data, overlays/ovl_0090D6B0_reloc] @@ -6656,6 +7420,7 @@ start: 0x90D720 vram: 0x80A45C80 follows_vram: ovl_0090D6B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90D720, asm, overlays/ovl_0090D720] @@ -6665,6 +7430,7 @@ start: 0x90DB60 vram: 0x80A460C0 follows_vram: ovl_0090D720 + compress: True subsegments: - [0x90DB60, data, overlays/ovl_0090D720_reloc] @@ -6673,6 +7439,7 @@ start: 0x90DBA0 vram: 0x80A46100 follows_vram: ovl_0090D720_reloc + compress: True bss_size: 0x0 subsegments: - [0x90DBA0, data, overlays/ovl_0090DBA0] @@ -6681,6 +7448,7 @@ start: 0x90DBF0 vram: 0x80A46150 follows_vram: ovl_0090DBA0 + compress: True subsegments: - [0x90DBF0, data, overlays/ovl_0090DBA0_reloc] @@ -6689,6 +7457,7 @@ start: 0x90DC10 vram: 0x80A46170 follows_vram: ovl_0090DBA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90DC10, data, overlays/ovl_0090DC10] @@ -6697,6 +7466,7 @@ start: 0x90DC60 vram: 0x80A461C0 follows_vram: ovl_0090DC10 + compress: True subsegments: - [0x90DC60, data, overlays/ovl_0090DC10_reloc] @@ -6705,6 +7475,7 @@ start: 0x90DC80 vram: 0x80A461E0 follows_vram: ovl_0090DC10_reloc + compress: True bss_size: 0x0 subsegments: - [0x90DC80, data, overlays/ovl_0090DC80] @@ -6713,6 +7484,7 @@ start: 0x90DCD0 vram: 0x80A46230 follows_vram: ovl_0090DC80 + compress: True subsegments: - [0x90DCD0, data, overlays/ovl_0090DC80_reloc] @@ -6721,6 +7493,7 @@ start: 0x90DCF0 vram: 0x80A46250 follows_vram: ovl_0090DC80_reloc + compress: True bss_size: 0x0 subsegments: - [0x90DCF0, data, overlays/ovl_0090DCF0] @@ -6729,6 +7502,7 @@ start: 0x90DD40 vram: 0x80A462A0 follows_vram: ovl_0090DCF0 + compress: True subsegments: - [0x90DD40, data, overlays/ovl_0090DCF0_reloc] @@ -6737,6 +7511,7 @@ start: 0x90DD60 vram: 0x80A462C0 follows_vram: ovl_0090DCF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90DD60, data, overlays/ovl_0090DD60] @@ -6745,6 +7520,7 @@ start: 0x90DDB0 vram: 0x80A46310 follows_vram: ovl_0090DD60 + compress: True subsegments: - [0x90DDB0, data, overlays/ovl_0090DD60_reloc] @@ -6753,6 +7529,7 @@ start: 0x90DDD0 vram: 0x80A46330 follows_vram: ovl_0090DD60_reloc + compress: True bss_size: 0x0 subsegments: - [0x90DDD0, data, overlays/ovl_0090DDD0] @@ -6761,6 +7538,7 @@ start: 0x90DE20 vram: 0x80A46380 follows_vram: ovl_0090DDD0 + compress: True subsegments: - [0x90DE20, data, overlays/ovl_0090DDD0_reloc] @@ -6769,6 +7547,7 @@ start: 0x90DE40 vram: 0x80A463A0 follows_vram: ovl_0090DDD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90DE40, data, overlays/ovl_0090DE40] @@ -6777,6 +7556,7 @@ start: 0x90DE90 vram: 0x80A463F0 follows_vram: ovl_0090DE40 + compress: True subsegments: - [0x90DE90, data, overlays/ovl_0090DE40_reloc] @@ -6785,6 +7565,7 @@ start: 0x90DEB0 vram: 0x80A46410 follows_vram: ovl_0090DE40_reloc + compress: True bss_size: 0x0 subsegments: - [0x90DEB0, data, overlays/ovl_0090DEB0] @@ -6793,6 +7574,7 @@ start: 0x90DF00 vram: 0x80A46460 follows_vram: ovl_0090DEB0 + compress: True subsegments: - [0x90DF00, data, overlays/ovl_0090DEB0_reloc] @@ -6801,6 +7583,7 @@ start: 0x90DF20 vram: 0x80A46480 follows_vram: ovl_0090DEB0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90DF20, data, overlays/ovl_0090DF20] @@ -6809,6 +7592,7 @@ start: 0x90DF70 vram: 0x80A464D0 follows_vram: ovl_0090DF20 + compress: True subsegments: - [0x90DF70, data, overlays/ovl_0090DF20_reloc] @@ -6817,6 +7601,7 @@ start: 0x90DF90 vram: 0x80A464F0 follows_vram: ovl_0090DF20_reloc + compress: True bss_size: 0x0 subsegments: - [0x90DF90, data, overlays/ovl_0090DF90] @@ -6825,6 +7610,7 @@ start: 0x90DFE0 vram: 0x80A46540 follows_vram: ovl_0090DF90 + compress: True subsegments: - [0x90DFE0, data, overlays/ovl_0090DF90_reloc] @@ -6833,6 +7619,7 @@ start: 0x90E000 vram: 0x80A46560 follows_vram: ovl_0090DF90_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E000, data, overlays/ovl_0090E000] @@ -6841,6 +7628,7 @@ start: 0x90E050 vram: 0x80A465B0 follows_vram: ovl_0090E000 + compress: True subsegments: - [0x90E050, data, overlays/ovl_0090E000_reloc] @@ -6849,6 +7637,7 @@ start: 0x90E070 vram: 0x80A465D0 follows_vram: ovl_0090E000_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E070, data, overlays/ovl_0090E070] @@ -6857,6 +7646,7 @@ start: 0x90E0C0 vram: 0x80A46620 follows_vram: ovl_0090E070 + compress: True subsegments: - [0x90E0C0, data, overlays/ovl_0090E070_reloc] @@ -6865,6 +7655,7 @@ start: 0x90E0E0 vram: 0x80A46640 follows_vram: ovl_0090E070_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E0E0, data, overlays/ovl_0090E0E0] @@ -6873,6 +7664,7 @@ start: 0x90E130 vram: 0x80A46690 follows_vram: ovl_0090E0E0 + compress: True subsegments: - [0x90E130, data, overlays/ovl_0090E0E0_reloc] @@ -6881,6 +7673,7 @@ start: 0x90E150 vram: 0x80A466B0 follows_vram: ovl_0090E0E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E150, data, overlays/ovl_0090E150] @@ -6889,6 +7682,7 @@ start: 0x90E1A0 vram: 0x80A46700 follows_vram: ovl_0090E150 + compress: True subsegments: - [0x90E1A0, data, overlays/ovl_0090E150_reloc] @@ -6897,6 +7691,7 @@ start: 0x90E1C0 vram: 0x80A46720 follows_vram: ovl_0090E150_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E1C0, data, overlays/ovl_0090E1C0] @@ -6905,6 +7700,7 @@ start: 0x90E210 vram: 0x80A46770 follows_vram: ovl_0090E1C0 + compress: True subsegments: - [0x90E210, data, overlays/ovl_0090E1C0_reloc] @@ -6913,6 +7709,7 @@ start: 0x90E230 vram: 0x80A46790 follows_vram: ovl_0090E1C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E230, data, overlays/ovl_0090E230] @@ -6921,6 +7718,7 @@ start: 0x90E280 vram: 0x80A467E0 follows_vram: ovl_0090E230 + compress: True subsegments: - [0x90E280, data, overlays/ovl_0090E230_reloc] @@ -6929,6 +7727,7 @@ start: 0x90E2A0 vram: 0x80A46800 follows_vram: ovl_0090E230_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E2A0, data, overlays/ovl_0090E2A0] @@ -6937,6 +7736,7 @@ start: 0x90E2F0 vram: 0x80A46850 follows_vram: ovl_0090E2A0 + compress: True subsegments: - [0x90E2F0, data, overlays/ovl_0090E2A0_reloc] @@ -6945,6 +7745,7 @@ start: 0x90E310 vram: 0x80A46870 follows_vram: ovl_0090E2A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E310, data, overlays/ovl_0090E310] @@ -6953,6 +7754,7 @@ start: 0x90E360 vram: 0x80A468C0 follows_vram: ovl_0090E310 + compress: True subsegments: - [0x90E360, data, overlays/ovl_0090E310_reloc] @@ -6961,6 +7763,7 @@ start: 0x90E380 vram: 0x80A468E0 follows_vram: ovl_0090E310_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E380, data, overlays/ovl_0090E380] @@ -6969,6 +7772,7 @@ start: 0x90E3D0 vram: 0x80A46930 follows_vram: ovl_0090E380 + compress: True subsegments: - [0x90E3D0, data, overlays/ovl_0090E380_reloc] @@ -6977,6 +7781,7 @@ start: 0x90E3F0 vram: 0x80A46950 follows_vram: ovl_0090E380_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E3F0, data, overlays/ovl_0090E3F0] @@ -6985,6 +7790,7 @@ start: 0x90E440 vram: 0x80A469A0 follows_vram: ovl_0090E3F0 + compress: True subsegments: - [0x90E440, data, overlays/ovl_0090E3F0_reloc] @@ -6993,6 +7799,7 @@ start: 0x90E460 vram: 0x80A469C0 follows_vram: ovl_0090E3F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E460, asm, overlays/ovl_0090E460] @@ -7003,6 +7810,7 @@ start: 0x90E820 vram: 0x80A46D80 follows_vram: ovl_0090E460 + compress: True subsegments: - [0x90E820, data, overlays/ovl_0090E460_reloc] @@ -7011,6 +7819,7 @@ start: 0x90E880 vram: 0x80A46DE0 follows_vram: ovl_0090E460_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E880, data, overlays/ovl_0090E880] @@ -7019,6 +7828,7 @@ start: 0x90E8D0 vram: 0x80A46E30 follows_vram: ovl_0090E880 + compress: True subsegments: - [0x90E8D0, data, overlays/ovl_0090E880_reloc] @@ -7027,6 +7837,7 @@ start: 0x90E8F0 vram: 0x80A46E50 follows_vram: ovl_0090E880_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E8F0, data, overlays/ovl_0090E8F0] @@ -7035,6 +7846,7 @@ start: 0x90E940 vram: 0x80A46EA0 follows_vram: ovl_0090E8F0 + compress: True subsegments: - [0x90E940, data, overlays/ovl_0090E8F0_reloc] @@ -7043,6 +7855,7 @@ start: 0x90E960 vram: 0x80A46EC0 follows_vram: ovl_0090E8F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E960, data, overlays/ovl_0090E960] @@ -7051,6 +7864,7 @@ start: 0x90E9B0 vram: 0x80A46F10 follows_vram: ovl_0090E960 + compress: True subsegments: - [0x90E9B0, data, overlays/ovl_0090E960_reloc] @@ -7059,6 +7873,7 @@ start: 0x90E9D0 vram: 0x80A46F30 follows_vram: ovl_0090E960_reloc + compress: True bss_size: 0x0 subsegments: - [0x90E9D0, data, overlays/ovl_0090E9D0] @@ -7067,6 +7882,7 @@ start: 0x90EA20 vram: 0x80A46F80 follows_vram: ovl_0090E9D0 + compress: True subsegments: - [0x90EA20, data, overlays/ovl_0090E9D0_reloc] @@ -7075,6 +7891,7 @@ start: 0x90EA40 vram: 0x80A46FA0 follows_vram: ovl_0090E9D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90EA40, data, overlays/ovl_0090EA40] @@ -7083,6 +7900,7 @@ start: 0x90EA90 vram: 0x80A46FF0 follows_vram: ovl_0090EA40 + compress: True subsegments: - [0x90EA90, data, overlays/ovl_0090EA40_reloc] @@ -7091,6 +7909,7 @@ start: 0x90EAB0 vram: 0x80A47010 follows_vram: ovl_0090EA40_reloc + compress: True bss_size: 0x0 subsegments: - [0x90EAB0, data, overlays/ovl_0090EAB0] @@ -7099,6 +7918,7 @@ start: 0x90EB00 vram: 0x80A47060 follows_vram: ovl_0090EAB0 + compress: True subsegments: - [0x90EB00, data, overlays/ovl_0090EAB0_reloc] @@ -7107,6 +7927,7 @@ start: 0x90EB20 vram: 0x80A47080 follows_vram: ovl_0090EAB0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90EB20, data, overlays/ovl_0090EB20] @@ -7115,6 +7936,7 @@ start: 0x90EB70 vram: 0x80A470D0 follows_vram: ovl_0090EB20 + compress: True subsegments: - [0x90EB70, data, overlays/ovl_0090EB20_reloc] @@ -7123,6 +7945,7 @@ start: 0x90EB90 vram: 0x80A470F0 follows_vram: ovl_0090EB20_reloc + compress: True bss_size: 0x0 subsegments: - [0x90EB90, data, overlays/ovl_0090EB90] @@ -7131,6 +7954,7 @@ start: 0x90EBE0 vram: 0x80A47140 follows_vram: ovl_0090EB90 + compress: True subsegments: - [0x90EBE0, data, overlays/ovl_0090EB90_reloc] @@ -7139,6 +7963,7 @@ start: 0x90EC00 vram: 0x80A47160 follows_vram: ovl_0090EB90_reloc + compress: True bss_size: 0x0 subsegments: - [0x90EC00, data, overlays/ovl_0090EC00] @@ -7147,6 +7972,7 @@ start: 0x90EC50 vram: 0x80A471B0 follows_vram: ovl_0090EC00 + compress: True subsegments: - [0x90EC50, data, overlays/ovl_0090EC00_reloc] @@ -7155,6 +7981,7 @@ start: 0x90EC70 vram: 0x80A471D0 follows_vram: ovl_0090EC00_reloc + compress: True bss_size: 0x0 subsegments: - [0x90EC70, data, overlays/ovl_0090EC70] @@ -7163,6 +7990,7 @@ start: 0x90ECC0 vram: 0x80A47220 follows_vram: ovl_0090EC70 + compress: True subsegments: - [0x90ECC0, data, overlays/ovl_0090EC70_reloc] @@ -7171,6 +7999,7 @@ start: 0x90ECE0 vram: 0x80A47240 follows_vram: ovl_0090EC70_reloc + compress: True bss_size: 0x0 subsegments: - [0x90ECE0, data, overlays/ovl_0090ECE0] @@ -7179,6 +8008,7 @@ start: 0x90ED30 vram: 0x80A47290 follows_vram: ovl_0090ECE0 + compress: True subsegments: - [0x90ED30, data, overlays/ovl_0090ECE0_reloc] @@ -7187,6 +8017,7 @@ start: 0x90ED50 vram: 0x80A472B0 follows_vram: ovl_0090ECE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90ED50, data, overlays/ovl_0090ED50] @@ -7195,6 +8026,7 @@ start: 0x90EDA0 vram: 0x80A47300 follows_vram: ovl_0090ED50 + compress: True subsegments: - [0x90EDA0, data, overlays/ovl_0090ED50_reloc] @@ -7203,6 +8035,7 @@ start: 0x90EDC0 vram: 0x80A47320 follows_vram: ovl_0090ED50_reloc + compress: True bss_size: 0x0 subsegments: - [0x90EDC0, data, overlays/ovl_0090EDC0] @@ -7211,6 +8044,7 @@ start: 0x90EE10 vram: 0x80A47370 follows_vram: ovl_0090EDC0 + compress: True subsegments: - [0x90EE10, data, overlays/ovl_0090EDC0_reloc] @@ -7219,6 +8053,7 @@ start: 0x90EE30 vram: 0x80A47390 follows_vram: ovl_0090EDC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90EE30, data, overlays/ovl_0090EE30] @@ -7227,6 +8062,7 @@ start: 0x90EE80 vram: 0x80A473E0 follows_vram: ovl_0090EE30 + compress: True subsegments: - [0x90EE80, data, overlays/ovl_0090EE30_reloc] @@ -7235,6 +8071,7 @@ start: 0x90EEA0 vram: 0x80A47400 follows_vram: ovl_0090EE30_reloc + compress: True bss_size: 0x0 subsegments: - [0x90EEA0, data, overlays/ovl_0090EEA0] @@ -7243,6 +8080,7 @@ start: 0x90EEF0 vram: 0x80A47450 follows_vram: ovl_0090EEA0 + compress: True subsegments: - [0x90EEF0, data, overlays/ovl_0090EEA0_reloc] @@ -7251,6 +8089,7 @@ start: 0x90EF10 vram: 0x80A47470 follows_vram: ovl_0090EEA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90EF10, data, overlays/ovl_0090EF10] @@ -7259,6 +8098,7 @@ start: 0x90EF60 vram: 0x80A474C0 follows_vram: ovl_0090EF10 + compress: True subsegments: - [0x90EF60, data, overlays/ovl_0090EF10_reloc] @@ -7267,6 +8107,7 @@ start: 0x90EF80 vram: 0x80A474E0 follows_vram: ovl_0090EF10_reloc + compress: True bss_size: 0x0 subsegments: - [0x90EF80, data, overlays/ovl_0090EF80] @@ -7275,6 +8116,7 @@ start: 0x90EFD0 vram: 0x80A47530 follows_vram: ovl_0090EF80 + compress: True subsegments: - [0x90EFD0, data, overlays/ovl_0090EF80_reloc] @@ -7283,6 +8125,7 @@ start: 0x90EFF0 vram: 0x80A47550 follows_vram: ovl_0090EF80_reloc + compress: True bss_size: 0x0 subsegments: - [0x90EFF0, data, overlays/ovl_0090EFF0] @@ -7291,6 +8134,7 @@ start: 0x90F040 vram: 0x80A475A0 follows_vram: ovl_0090EFF0 + compress: True subsegments: - [0x90F040, data, overlays/ovl_0090EFF0_reloc] @@ -7299,6 +8143,7 @@ start: 0x90F060 vram: 0x80A475C0 follows_vram: ovl_0090EFF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F060, data, overlays/ovl_0090F060] @@ -7307,6 +8152,7 @@ start: 0x90F0B0 vram: 0x80A47610 follows_vram: ovl_0090F060 + compress: True subsegments: - [0x90F0B0, data, overlays/ovl_0090F060_reloc] @@ -7315,6 +8161,7 @@ start: 0x90F0D0 vram: 0x80A47630 follows_vram: ovl_0090F060_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F0D0, data, overlays/ovl_0090F0D0] @@ -7323,6 +8170,7 @@ start: 0x90F120 vram: 0x80A47680 follows_vram: ovl_0090F0D0 + compress: True subsegments: - [0x90F120, data, overlays/ovl_0090F0D0_reloc] @@ -7331,6 +8179,7 @@ start: 0x90F140 vram: 0x80A476A0 follows_vram: ovl_0090F0D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F140, data, overlays/ovl_0090F140] @@ -7339,6 +8188,7 @@ start: 0x90F190 vram: 0x80A476F0 follows_vram: ovl_0090F140 + compress: True subsegments: - [0x90F190, data, overlays/ovl_0090F140_reloc] @@ -7347,6 +8197,7 @@ start: 0x90F1B0 vram: 0x80A47710 follows_vram: ovl_0090F140_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F1B0, data, overlays/ovl_0090F1B0] @@ -7355,6 +8206,7 @@ start: 0x90F200 vram: 0x80A47760 follows_vram: ovl_0090F1B0 + compress: True subsegments: - [0x90F200, data, overlays/ovl_0090F1B0_reloc] @@ -7363,6 +8215,7 @@ start: 0x90F220 vram: 0x80A47780 follows_vram: ovl_0090F1B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F220, asm, overlays/ovl_0090F220] @@ -7372,6 +8225,7 @@ start: 0x90F2D0 vram: 0x80A47830 follows_vram: ovl_0090F220 + compress: True subsegments: - [0x90F2D0, data, overlays/ovl_0090F220_reloc] @@ -7380,6 +8234,7 @@ start: 0x90F300 vram: 0x80A47860 follows_vram: ovl_0090F220_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F300, data, overlays/ovl_0090F300] @@ -7388,6 +8243,7 @@ start: 0x90F350 vram: 0x80A478B0 follows_vram: ovl_0090F300 + compress: True subsegments: - [0x90F350, data, overlays/ovl_0090F300_reloc] @@ -7396,6 +8252,7 @@ start: 0x90F370 vram: 0x80A478D0 follows_vram: ovl_0090F300_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F370, data, overlays/ovl_0090F370] @@ -7404,6 +8261,7 @@ start: 0x90F3C0 vram: 0x80A47920 follows_vram: ovl_0090F370 + compress: True subsegments: - [0x90F3C0, data, overlays/ovl_0090F370_reloc] @@ -7412,6 +8270,7 @@ start: 0x90F3E0 vram: 0x80A47940 follows_vram: ovl_0090F370_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F3E0, data, overlays/ovl_0090F3E0] @@ -7420,6 +8279,7 @@ start: 0x90F430 vram: 0x80A47990 follows_vram: ovl_0090F3E0 + compress: True subsegments: - [0x90F430, data, overlays/ovl_0090F3E0_reloc] @@ -7428,6 +8288,7 @@ start: 0x90F450 vram: 0x80A479B0 follows_vram: ovl_0090F3E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F450, data, overlays/ovl_0090F450] @@ -7436,6 +8297,7 @@ start: 0x90F4A0 vram: 0x80A47A00 follows_vram: ovl_0090F450 + compress: True subsegments: - [0x90F4A0, data, overlays/ovl_0090F450_reloc] @@ -7444,6 +8306,7 @@ start: 0x90F4C0 vram: 0x80A47A20 follows_vram: ovl_0090F450_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F4C0, data, overlays/ovl_0090F4C0] @@ -7452,6 +8315,7 @@ start: 0x90F510 vram: 0x80A47A70 follows_vram: ovl_0090F4C0 + compress: True subsegments: - [0x90F510, data, overlays/ovl_0090F4C0_reloc] @@ -7460,6 +8324,7 @@ start: 0x90F530 vram: 0x80A47A90 follows_vram: ovl_0090F4C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F530, data, overlays/ovl_0090F530] @@ -7468,6 +8333,7 @@ start: 0x90F580 vram: 0x80A47AE0 follows_vram: ovl_0090F530 + compress: True subsegments: - [0x90F580, data, overlays/ovl_0090F530_reloc] @@ -7476,6 +8342,7 @@ start: 0x90F5A0 vram: 0x80A47B00 follows_vram: ovl_0090F530_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F5A0, data, overlays/ovl_0090F5A0] @@ -7484,6 +8351,7 @@ start: 0x90F5F0 vram: 0x80A47B50 follows_vram: ovl_0090F5A0 + compress: True subsegments: - [0x90F5F0, data, overlays/ovl_0090F5A0_reloc] @@ -7492,6 +8360,7 @@ start: 0x90F610 vram: 0x80A47B70 follows_vram: ovl_0090F5A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F610, data, overlays/ovl_0090F610] @@ -7500,6 +8369,7 @@ start: 0x90F660 vram: 0x80A47BC0 follows_vram: ovl_0090F610 + compress: True subsegments: - [0x90F660, data, overlays/ovl_0090F610_reloc] @@ -7508,6 +8378,7 @@ start: 0x90F680 vram: 0x80A47BE0 follows_vram: ovl_0090F610_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F680, data, overlays/ovl_0090F680] @@ -7516,6 +8387,7 @@ start: 0x90F6D0 vram: 0x80A47C30 follows_vram: ovl_0090F680 + compress: True subsegments: - [0x90F6D0, data, overlays/ovl_0090F680_reloc] @@ -7524,6 +8396,7 @@ start: 0x90F6F0 vram: 0x80A47C50 follows_vram: ovl_0090F680_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F6F0, data, overlays/ovl_0090F6F0] @@ -7532,6 +8405,7 @@ start: 0x90F740 vram: 0x80A47CA0 follows_vram: ovl_0090F6F0 + compress: True subsegments: - [0x90F740, data, overlays/ovl_0090F6F0_reloc] @@ -7540,6 +8414,7 @@ start: 0x90F760 vram: 0x80A47CC0 follows_vram: ovl_0090F6F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F760, data, overlays/ovl_0090F760] @@ -7548,6 +8423,7 @@ start: 0x90F7B0 vram: 0x80A47D10 follows_vram: ovl_0090F760 + compress: True subsegments: - [0x90F7B0, data, overlays/ovl_0090F760_reloc] @@ -7556,6 +8432,7 @@ start: 0x90F7D0 vram: 0x80A47D30 follows_vram: ovl_0090F760_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F7D0, data, overlays/ovl_0090F7D0] @@ -7564,6 +8441,7 @@ start: 0x90F820 vram: 0x80A47D80 follows_vram: ovl_0090F7D0 + compress: True subsegments: - [0x90F820, data, overlays/ovl_0090F7D0_reloc] @@ -7572,6 +8450,7 @@ start: 0x90F840 vram: 0x80A47DA0 follows_vram: ovl_0090F7D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F840, data, overlays/ovl_0090F840] @@ -7580,6 +8459,7 @@ start: 0x90F890 vram: 0x80A47DF0 follows_vram: ovl_0090F840 + compress: True subsegments: - [0x90F890, data, overlays/ovl_0090F840_reloc] @@ -7588,6 +8468,7 @@ start: 0x90F8B0 vram: 0x80A47E10 follows_vram: ovl_0090F840_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F8B0, data, overlays/ovl_0090F8B0] @@ -7596,6 +8477,7 @@ start: 0x90F900 vram: 0x80A47E60 follows_vram: ovl_0090F8B0 + compress: True subsegments: - [0x90F900, data, overlays/ovl_0090F8B0_reloc] @@ -7604,6 +8486,7 @@ start: 0x90F920 vram: 0x80A47E80 follows_vram: ovl_0090F8B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F920, data, overlays/ovl_0090F920] @@ -7612,6 +8495,7 @@ start: 0x90F970 vram: 0x80A47ED0 follows_vram: ovl_0090F920 + compress: True subsegments: - [0x90F970, data, overlays/ovl_0090F920_reloc] @@ -7620,6 +8504,7 @@ start: 0x90F990 vram: 0x80A47EF0 follows_vram: ovl_0090F920_reloc + compress: True bss_size: 0x0 subsegments: - [0x90F990, data, overlays/ovl_0090F990] @@ -7628,6 +8513,7 @@ start: 0x90F9E0 vram: 0x80A47F40 follows_vram: ovl_0090F990 + compress: True subsegments: - [0x90F9E0, data, overlays/ovl_0090F990_reloc] @@ -7636,6 +8522,7 @@ start: 0x90FA00 vram: 0x80A47F60 follows_vram: ovl_0090F990_reloc + compress: True bss_size: 0x0 subsegments: - [0x90FA00, data, overlays/ovl_0090FA00] @@ -7644,6 +8531,7 @@ start: 0x90FA50 vram: 0x80A47FB0 follows_vram: ovl_0090FA00 + compress: True subsegments: - [0x90FA50, data, overlays/ovl_0090FA00_reloc] @@ -7652,6 +8540,7 @@ start: 0x90FA70 vram: 0x80A47FD0 follows_vram: ovl_0090FA00_reloc + compress: True bss_size: 0x0 subsegments: - [0x90FA70, data, overlays/ovl_0090FA70] @@ -7660,6 +8549,7 @@ start: 0x90FAC0 vram: 0x80A48020 follows_vram: ovl_0090FA70 + compress: True subsegments: - [0x90FAC0, data, overlays/ovl_0090FA70_reloc] @@ -7668,6 +8558,7 @@ start: 0x90FAE0 vram: 0x80A48040 follows_vram: ovl_0090FA70_reloc + compress: True bss_size: 0x0 subsegments: - [0x90FAE0, data, overlays/ovl_0090FAE0] @@ -7676,6 +8567,7 @@ start: 0x90FB30 vram: 0x80A48090 follows_vram: ovl_0090FAE0 + compress: True subsegments: - [0x90FB30, data, overlays/ovl_0090FAE0_reloc] @@ -7684,6 +8576,7 @@ start: 0x90FB50 vram: 0x80A480B0 follows_vram: ovl_0090FAE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90FB50, data, overlays/ovl_0090FB50] @@ -7692,6 +8585,7 @@ start: 0x90FBA0 vram: 0x80A48100 follows_vram: ovl_0090FB50 + compress: True subsegments: - [0x90FBA0, data, overlays/ovl_0090FB50_reloc] @@ -7700,6 +8594,7 @@ start: 0x90FBC0 vram: 0x80A48120 follows_vram: ovl_0090FB50_reloc + compress: True bss_size: 0x0 subsegments: - [0x90FBC0, data, overlays/ovl_0090FBC0] @@ -7708,6 +8603,7 @@ start: 0x90FC10 vram: 0x80A48170 follows_vram: ovl_0090FBC0 + compress: True subsegments: - [0x90FC10, data, overlays/ovl_0090FBC0_reloc] @@ -7716,6 +8612,7 @@ start: 0x90FC30 vram: 0x80A48190 follows_vram: ovl_0090FBC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90FC30, data, overlays/ovl_0090FC30] @@ -7724,6 +8621,7 @@ start: 0x90FC80 vram: 0x80A481E0 follows_vram: ovl_0090FC30 + compress: True subsegments: - [0x90FC80, data, overlays/ovl_0090FC30_reloc] @@ -7732,6 +8630,7 @@ start: 0x90FCA0 vram: 0x80A48200 follows_vram: ovl_0090FC30_reloc + compress: True bss_size: 0x0 subsegments: - [0x90FCA0, data, overlays/ovl_0090FCA0] @@ -7740,6 +8639,7 @@ start: 0x90FCF0 vram: 0x80A48250 follows_vram: ovl_0090FCA0 + compress: True subsegments: - [0x90FCF0, data, overlays/ovl_0090FCA0_reloc] @@ -7748,6 +8648,7 @@ start: 0x90FD10 vram: 0x80A48270 follows_vram: ovl_0090FCA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90FD10, data, overlays/ovl_0090FD10] @@ -7756,6 +8657,7 @@ start: 0x90FD60 vram: 0x80A482C0 follows_vram: ovl_0090FD10 + compress: True subsegments: - [0x90FD60, data, overlays/ovl_0090FD10_reloc] @@ -7764,6 +8666,7 @@ start: 0x90FD80 vram: 0x80A482E0 follows_vram: ovl_0090FD10_reloc + compress: True bss_size: 0x0 subsegments: - [0x90FD80, data, overlays/ovl_0090FD80] @@ -7772,6 +8675,7 @@ start: 0x90FDD0 vram: 0x80A48330 follows_vram: ovl_0090FD80 + compress: True subsegments: - [0x90FDD0, data, overlays/ovl_0090FD80_reloc] @@ -7780,6 +8684,7 @@ start: 0x90FDF0 vram: 0x80A48350 follows_vram: ovl_0090FD80_reloc + compress: True bss_size: 0x0 subsegments: - [0x90FDF0, data, overlays/ovl_0090FDF0] @@ -7788,6 +8693,7 @@ start: 0x90FE40 vram: 0x80A483A0 follows_vram: ovl_0090FDF0 + compress: True subsegments: - [0x90FE40, data, overlays/ovl_0090FDF0_reloc] @@ -7796,6 +8702,7 @@ start: 0x90FE60 vram: 0x80A483C0 follows_vram: ovl_0090FDF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x90FE60, asm, overlays/ovl_0090FE60] @@ -7805,6 +8712,7 @@ start: 0x910280 vram: 0x80A487E0 follows_vram: ovl_0090FE60 + compress: True subsegments: - [0x910280, data, overlays/ovl_0090FE60_reloc] @@ -7813,6 +8721,7 @@ start: 0x9102C0 vram: 0x80A48820 follows_vram: ovl_0090FE60_reloc + compress: True bss_size: 0x0 subsegments: - [0x9102C0, asm, overlays/ovl_009102C0] @@ -7822,6 +8731,7 @@ start: 0x9103A0 vram: 0x80A48900 follows_vram: ovl_009102C0 + compress: True subsegments: - [0x9103A0, data, overlays/ovl_009102C0_reloc] @@ -7830,6 +8740,7 @@ start: 0x9103D0 vram: 0x80A48930 follows_vram: ovl_009102C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9103D0, data, overlays/ovl_009103D0] @@ -7838,6 +8749,7 @@ start: 0x910420 vram: 0x80A48980 follows_vram: ovl_009103D0 + compress: True subsegments: - [0x910420, data, overlays/ovl_009103D0_reloc] @@ -7846,6 +8758,7 @@ start: 0x910440 vram: 0x80A489A0 follows_vram: ovl_009103D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x910440, asm, overlays/ovl_00910440] @@ -7856,6 +8769,7 @@ start: 0x910DD0 vram: 0x80A49330 follows_vram: ovl_00910440 + compress: True subsegments: - [0x910DD0, data, overlays/ovl_00910440_reloc] @@ -7864,6 +8778,7 @@ start: 0x910E50 vram: 0x80A493B0 follows_vram: ovl_00910440_reloc + compress: True bss_size: 0x0 subsegments: - [0x910E50, asm, overlays/ovl_00910E50] @@ -7874,6 +8789,7 @@ start: 0x9112F0 vram: 0x80A49850 follows_vram: ovl_00910E50 + compress: True subsegments: - [0x9112F0, data, overlays/ovl_00910E50_reloc] @@ -7882,6 +8798,7 @@ start: 0x911340 vram: 0x80A498A0 follows_vram: ovl_00910E50_reloc + compress: True bss_size: 0x0 subsegments: - [0x911340, asm, overlays/ovl_00911340] @@ -7891,6 +8808,7 @@ start: 0x911460 vram: 0x80A499C0 follows_vram: ovl_00911340 + compress: True subsegments: - [0x911460, data, overlays/ovl_00911340_reloc] @@ -7899,6 +8817,7 @@ start: 0x911490 vram: 0x80A499F0 follows_vram: ovl_00911340_reloc + compress: True bss_size: 0x0 subsegments: - [0x911490, asm, overlays/ovl_00911490] @@ -7908,6 +8827,7 @@ start: 0x911870 vram: 0x80A49DD0 follows_vram: ovl_00911490 + compress: True subsegments: - [0x911870, data, overlays/ovl_00911490_reloc] @@ -7916,6 +8836,7 @@ start: 0x9118A0 vram: 0x80A49E00 follows_vram: ovl_00911490_reloc + compress: True bss_size: 0x0 subsegments: - [0x9118A0, data, overlays/ovl_009118A0] @@ -7924,6 +8845,7 @@ start: 0x9118F0 vram: 0x80A49E50 follows_vram: ovl_009118A0 + compress: True subsegments: - [0x9118F0, data, overlays/ovl_009118A0_reloc] @@ -7932,6 +8854,7 @@ start: 0x911910 vram: 0x80A49E70 follows_vram: ovl_009118A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x911910, asm, overlays/ovl_00911910] @@ -7941,6 +8864,7 @@ start: 0x911E20 vram: 0x80A4A380 follows_vram: ovl_00911910 + compress: True subsegments: - [0x911E20, data, overlays/ovl_00911910_reloc] @@ -7949,6 +8873,7 @@ start: 0x911E60 vram: 0x80A4A3C0 follows_vram: ovl_00911910_reloc + compress: True bss_size: 0x0 subsegments: - [0x911E60, asm, overlays/ovl_00911E60] @@ -7958,6 +8883,7 @@ start: 0x912070 vram: 0x80A4A5D0 follows_vram: ovl_00911E60 + compress: True subsegments: - [0x912070, data, overlays/ovl_00911E60_reloc] @@ -7966,6 +8892,7 @@ start: 0x9120B0 vram: 0x80A4A610 follows_vram: ovl_00911E60_reloc + compress: True bss_size: 0x0 subsegments: - [0x9120B0, asm, overlays/ovl_009120B0] @@ -7975,6 +8902,7 @@ start: 0x912A60 vram: 0x80A4AFC0 follows_vram: ovl_009120B0 + compress: True subsegments: - [0x912A60, data, overlays/ovl_009120B0_reloc] @@ -7983,6 +8911,7 @@ start: 0x912A90 vram: 0x80A4AFF0 follows_vram: ovl_009120B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x912A90, data, overlays/ovl_00912A90] @@ -7991,6 +8920,7 @@ start: 0x912AE0 vram: 0x80A4B040 follows_vram: ovl_00912A90 + compress: True subsegments: - [0x912AE0, data, overlays/ovl_00912A90_reloc] @@ -7999,6 +8929,7 @@ start: 0x912B00 vram: 0x80A4B060 follows_vram: ovl_00912A90_reloc + compress: True bss_size: 0x0 subsegments: - [0x912B00, data, overlays/ovl_00912B00] @@ -8007,6 +8938,7 @@ start: 0x912B50 vram: 0x80A4B0B0 follows_vram: ovl_00912B00 + compress: True subsegments: - [0x912B50, data, overlays/ovl_00912B00_reloc] @@ -8015,6 +8947,7 @@ start: 0x912B70 vram: 0x80A4B0D0 follows_vram: ovl_00912B00_reloc + compress: True bss_size: 0x0 subsegments: - [0x912B70, data, overlays/ovl_00912B70] @@ -8023,6 +8956,7 @@ start: 0x912BC0 vram: 0x80A4B120 follows_vram: ovl_00912B70 + compress: True subsegments: - [0x912BC0, data, overlays/ovl_00912B70_reloc] @@ -8031,6 +8965,7 @@ start: 0x912BE0 vram: 0x80A4B140 follows_vram: ovl_00912B70_reloc + compress: True bss_size: 0x0 subsegments: - [0x912BE0, data, overlays/ovl_00912BE0] @@ -8039,6 +8974,7 @@ start: 0x912C30 vram: 0x80A4B190 follows_vram: ovl_00912BE0 + compress: True subsegments: - [0x912C30, data, overlays/ovl_00912BE0_reloc] @@ -8047,6 +8983,7 @@ start: 0x912C50 vram: 0x80A4B1B0 follows_vram: ovl_00912BE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x912C50, data, overlays/ovl_00912C50] @@ -8055,6 +8992,7 @@ start: 0x912CA0 vram: 0x80A4B200 follows_vram: ovl_00912C50 + compress: True subsegments: - [0x912CA0, data, overlays/ovl_00912C50_reloc] @@ -8063,6 +9001,7 @@ start: 0x912CC0 vram: 0x80A4B220 follows_vram: ovl_00912C50_reloc + compress: True bss_size: 0x0 subsegments: - [0x912CC0, data, overlays/ovl_00912CC0] @@ -8071,6 +9010,7 @@ start: 0x912D10 vram: 0x80A4B270 follows_vram: ovl_00912CC0 + compress: True subsegments: - [0x912D10, data, overlays/ovl_00912CC0_reloc] @@ -8079,6 +9019,7 @@ start: 0x912D30 vram: 0x80A4B290 follows_vram: ovl_00912CC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x912D30, data, overlays/ovl_00912D30] @@ -8087,6 +9028,7 @@ start: 0x912D80 vram: 0x80A4B2E0 follows_vram: ovl_00912D30 + compress: True subsegments: - [0x912D80, data, overlays/ovl_00912D30_reloc] @@ -8095,6 +9037,7 @@ start: 0x912DA0 vram: 0x80A4B300 follows_vram: ovl_00912D30_reloc + compress: True bss_size: 0x0 subsegments: - [0x912DA0, data, overlays/ovl_00912DA0] @@ -8103,6 +9046,7 @@ start: 0x912DF0 vram: 0x80A4B350 follows_vram: ovl_00912DA0 + compress: True subsegments: - [0x912DF0, data, overlays/ovl_00912DA0_reloc] @@ -8111,6 +9055,7 @@ start: 0x912E10 vram: 0x80A4B370 follows_vram: ovl_00912DA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x912E10, asm, overlays/ovl_00912E10] @@ -8120,6 +9065,7 @@ start: 0x912EF0 vram: 0x80A4B450 follows_vram: ovl_00912E10 + compress: True subsegments: - [0x912EF0, data, overlays/ovl_00912E10_reloc] @@ -8128,6 +9074,7 @@ start: 0x912F20 vram: 0x80A4B480 follows_vram: ovl_00912E10_reloc + compress: True bss_size: 0x0 subsegments: - [0x912F20, data, overlays/ovl_00912F20] @@ -8136,6 +9083,7 @@ start: 0x912F70 vram: 0x80A4B4D0 follows_vram: ovl_00912F20 + compress: True subsegments: - [0x912F70, data, overlays/ovl_00912F20_reloc] @@ -8144,6 +9092,7 @@ start: 0x912F90 vram: 0x80A4B4F0 follows_vram: ovl_00912F20_reloc + compress: True bss_size: 0x0 subsegments: - [0x912F90, data, overlays/ovl_00912F90] @@ -8152,6 +9101,7 @@ start: 0x912FE0 vram: 0x80A4B540 follows_vram: ovl_00912F90 + compress: True subsegments: - [0x912FE0, data, overlays/ovl_00912F90_reloc] @@ -8160,6 +9110,7 @@ start: 0x913000 vram: 0x80A4B560 follows_vram: ovl_00912F90_reloc + compress: True bss_size: 0x0 subsegments: - [0x913000, asm, overlays/ovl_00913000] @@ -8169,6 +9120,7 @@ start: 0x913360 vram: 0x80A4B8C0 follows_vram: ovl_00913000 + compress: True subsegments: - [0x913360, data, overlays/ovl_00913000_reloc] @@ -8177,6 +9129,7 @@ start: 0x913390 vram: 0x80A4B8F0 follows_vram: ovl_00913000_reloc + compress: True bss_size: 0x0 subsegments: - [0x913390, data, overlays/ovl_00913390] @@ -8185,6 +9138,7 @@ start: 0x9133E0 vram: 0x80A4B940 follows_vram: ovl_00913390 + compress: True subsegments: - [0x9133E0, data, overlays/ovl_00913390_reloc] @@ -8193,6 +9147,7 @@ start: 0x913400 vram: 0x80A4B960 follows_vram: ovl_00913390_reloc + compress: True bss_size: 0x0 subsegments: - [0x913400, data, overlays/ovl_00913400] @@ -8201,6 +9156,7 @@ start: 0x913450 vram: 0x80A4B9B0 follows_vram: ovl_00913400 + compress: True subsegments: - [0x913450, data, overlays/ovl_00913400_reloc] @@ -8209,6 +9165,7 @@ start: 0x913470 vram: 0x80A4B9D0 follows_vram: ovl_00913400_reloc + compress: True bss_size: 0x0 subsegments: - [0x913470, data, overlays/ovl_00913470] @@ -8217,6 +9174,7 @@ start: 0x9134C0 vram: 0x80A4BA20 follows_vram: ovl_00913470 + compress: True subsegments: - [0x9134C0, data, overlays/ovl_00913470_reloc] @@ -8225,6 +9183,7 @@ start: 0x9134E0 vram: 0x80A4BA40 follows_vram: ovl_00913470_reloc + compress: True bss_size: 0x0 subsegments: - [0x9134E0, data, overlays/ovl_009134E0] @@ -8233,6 +9192,7 @@ start: 0x913530 vram: 0x80A4BA90 follows_vram: ovl_009134E0 + compress: True subsegments: - [0x913530, data, overlays/ovl_009134E0_reloc] @@ -8241,6 +9201,7 @@ start: 0x913550 vram: 0x80A4BAB0 follows_vram: ovl_009134E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x913550, data, overlays/ovl_00913550] @@ -8249,6 +9210,7 @@ start: 0x9135A0 vram: 0x80A4BB00 follows_vram: ovl_00913550 + compress: True subsegments: - [0x9135A0, data, overlays/ovl_00913550_reloc] @@ -8257,6 +9219,7 @@ start: 0x9135C0 vram: 0x80A4BB20 follows_vram: ovl_00913550_reloc + compress: True bss_size: 0x0 subsegments: - [0x9135C0, data, overlays/ovl_009135C0] @@ -8265,6 +9228,7 @@ start: 0x913610 vram: 0x80A4BB70 follows_vram: ovl_009135C0 + compress: True subsegments: - [0x913610, data, overlays/ovl_009135C0_reloc] @@ -8273,6 +9237,7 @@ start: 0x913630 vram: 0x80A4BB90 follows_vram: ovl_009135C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x913630, data, overlays/ovl_00913630] @@ -8281,6 +9246,7 @@ start: 0x913680 vram: 0x80A4BBE0 follows_vram: ovl_00913630 + compress: True subsegments: - [0x913680, data, overlays/ovl_00913630_reloc] @@ -8289,6 +9255,7 @@ start: 0x9136A0 vram: 0x80A4BC00 follows_vram: ovl_00913630_reloc + compress: True bss_size: 0x0 subsegments: - [0x9136A0, asm, overlays/ovl_009136A0] @@ -8298,6 +9265,7 @@ start: 0x913A00 vram: 0x80A4BF60 follows_vram: ovl_009136A0 + compress: True subsegments: - [0x913A00, data, overlays/ovl_009136A0_reloc] @@ -8306,6 +9274,7 @@ start: 0x913A30 vram: 0x80A4BF90 follows_vram: ovl_009136A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x913A30, data, overlays/ovl_00913A30] @@ -8314,6 +9283,7 @@ start: 0x913A80 vram: 0x80A4BFE0 follows_vram: ovl_00913A30 + compress: True subsegments: - [0x913A80, data, overlays/ovl_00913A30_reloc] @@ -8322,6 +9292,7 @@ start: 0x913AA0 vram: 0x80A4C000 follows_vram: ovl_00913A30_reloc + compress: True bss_size: 0x0 subsegments: - [0x913AA0, data, overlays/ovl_00913AA0] @@ -8330,6 +9301,7 @@ start: 0x913AF0 vram: 0x80A4C050 follows_vram: ovl_00913AA0 + compress: True subsegments: - [0x913AF0, data, overlays/ovl_00913AA0_reloc] @@ -8338,6 +9310,7 @@ start: 0x913B10 vram: 0x80A4C070 follows_vram: ovl_00913AA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x913B10, data, overlays/ovl_00913B10] @@ -8346,6 +9319,7 @@ start: 0x913B60 vram: 0x80A4C0C0 follows_vram: ovl_00913B10 + compress: True subsegments: - [0x913B60, data, overlays/ovl_00913B10_reloc] @@ -8354,6 +9328,7 @@ start: 0x913B80 vram: 0x80A4C0E0 follows_vram: ovl_00913B10_reloc + compress: True bss_size: 0x0 subsegments: - [0x913B80, asm, overlays/ovl_00913B80] @@ -8363,6 +9338,7 @@ start: 0x913EE0 vram: 0x80A4C440 follows_vram: ovl_00913B80 + compress: True subsegments: - [0x913EE0, data, overlays/ovl_00913B80_reloc] @@ -8371,6 +9347,7 @@ start: 0x913F10 vram: 0x80A4C470 follows_vram: ovl_00913B80_reloc + compress: True bss_size: 0x0 subsegments: - [0x913F10, data, overlays/ovl_00913F10] @@ -8379,6 +9356,7 @@ start: 0x913F60 vram: 0x80A4C4C0 follows_vram: ovl_00913F10 + compress: True subsegments: - [0x913F60, data, overlays/ovl_00913F10_reloc] @@ -8387,6 +9365,7 @@ start: 0x913F80 vram: 0x80A4C4E0 follows_vram: ovl_00913F10_reloc + compress: True bss_size: 0x0 subsegments: - [0x913F80, data, overlays/ovl_00913F80] @@ -8395,6 +9374,7 @@ start: 0x913FD0 vram: 0x80A4C530 follows_vram: ovl_00913F80 + compress: True subsegments: - [0x913FD0, data, overlays/ovl_00913F80_reloc] @@ -8403,6 +9383,7 @@ start: 0x913FF0 vram: 0x80A4C550 follows_vram: ovl_00913F80_reloc + compress: True bss_size: 0x0 subsegments: - [0x913FF0, data, overlays/ovl_00913FF0] @@ -8411,6 +9392,7 @@ start: 0x914040 vram: 0x80A4C5A0 follows_vram: ovl_00913FF0 + compress: True subsegments: - [0x914040, data, overlays/ovl_00913FF0_reloc] @@ -8419,6 +9401,7 @@ start: 0x914060 vram: 0x80A4C5C0 follows_vram: ovl_00913FF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x914060, data, overlays/ovl_00914060] @@ -8427,6 +9410,7 @@ start: 0x9140B0 vram: 0x80A4C610 follows_vram: ovl_00914060 + compress: True subsegments: - [0x9140B0, data, overlays/ovl_00914060_reloc] @@ -8435,6 +9419,7 @@ start: 0x9140D0 vram: 0x80A4C630 follows_vram: ovl_00914060_reloc + compress: True bss_size: 0x0 subsegments: - [0x9140D0, data, overlays/ovl_009140D0] @@ -8443,6 +9428,7 @@ start: 0x914120 vram: 0x80A4C680 follows_vram: ovl_009140D0 + compress: True subsegments: - [0x914120, data, overlays/ovl_009140D0_reloc] @@ -8451,6 +9437,7 @@ start: 0x914140 vram: 0x80A4C6A0 follows_vram: ovl_009140D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x914140, asm, overlays/ovl_00914140] @@ -8460,6 +9447,7 @@ start: 0x9144A0 vram: 0x80A4CA00 follows_vram: ovl_00914140 + compress: True subsegments: - [0x9144A0, data, overlays/ovl_00914140_reloc] @@ -8468,6 +9456,7 @@ start: 0x9144D0 vram: 0x80A4CA30 follows_vram: ovl_00914140_reloc + compress: True bss_size: 0x0 subsegments: - [0x9144D0, data, overlays/ovl_009144D0] @@ -8476,6 +9465,7 @@ start: 0x914520 vram: 0x80A4CA80 follows_vram: ovl_009144D0 + compress: True subsegments: - [0x914520, data, overlays/ovl_009144D0_reloc] @@ -8484,6 +9474,7 @@ start: 0x914540 vram: 0x80A4CAA0 follows_vram: ovl_009144D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x914540, asm, overlays/ovl_00914540] @@ -8493,6 +9484,7 @@ start: 0x914630 vram: 0x80A4CB90 follows_vram: ovl_00914540 + compress: True subsegments: - [0x914630, data, overlays/ovl_00914540_reloc] @@ -8501,6 +9493,7 @@ start: 0x914650 vram: 0x80A4CBB0 follows_vram: ovl_00914540_reloc + compress: True bss_size: 0x0 subsegments: - [0x914650, data, overlays/ovl_00914650] @@ -8509,6 +9502,7 @@ start: 0x9146A0 vram: 0x80A4CC00 follows_vram: ovl_00914650 + compress: True subsegments: - [0x9146A0, data, overlays/ovl_00914650_reloc] @@ -8517,6 +9511,7 @@ start: 0x9146C0 vram: 0x80A4CC20 follows_vram: ovl_00914650_reloc + compress: True bss_size: 0x0 subsegments: - [0x9146C0, data, overlays/ovl_009146C0] @@ -8525,6 +9520,7 @@ start: 0x914710 vram: 0x80A4CC70 follows_vram: ovl_009146C0 + compress: True subsegments: - [0x914710, data, overlays/ovl_009146C0_reloc] @@ -8533,6 +9529,7 @@ start: 0x914730 vram: 0x80A4CC90 follows_vram: ovl_009146C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x914730, data, overlays/ovl_00914730] @@ -8541,6 +9538,7 @@ start: 0x914780 vram: 0x80A4CCE0 follows_vram: ovl_00914730 + compress: True subsegments: - [0x914780, data, overlays/ovl_00914730_reloc] @@ -8549,6 +9547,7 @@ start: 0x9147A0 vram: 0x80A4CD00 follows_vram: ovl_00914730_reloc + compress: True bss_size: 0x0 subsegments: - [0x9147A0, data, overlays/ovl_009147A0] @@ -8557,6 +9556,7 @@ start: 0x9147F0 vram: 0x80A4CD50 follows_vram: ovl_009147A0 + compress: True subsegments: - [0x9147F0, data, overlays/ovl_009147A0_reloc] @@ -8565,6 +9565,7 @@ start: 0x914810 vram: 0x80A4CD70 follows_vram: ovl_009147A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x914810, data, overlays/ovl_00914810] @@ -8573,6 +9574,7 @@ start: 0x914860 vram: 0x80A4CDC0 follows_vram: ovl_00914810 + compress: True subsegments: - [0x914860, data, overlays/ovl_00914810_reloc] @@ -8581,6 +9583,7 @@ start: 0x914880 vram: 0x80A4CDE0 follows_vram: ovl_00914810_reloc + compress: True bss_size: 0x0 subsegments: - [0x914880, data, overlays/ovl_00914880] @@ -8589,6 +9592,7 @@ start: 0x9148D0 vram: 0x80A4CE30 follows_vram: ovl_00914880 + compress: True subsegments: - [0x9148D0, data, overlays/ovl_00914880_reloc] @@ -8597,6 +9601,7 @@ start: 0x9148F0 vram: 0x80A4CE50 follows_vram: ovl_00914880_reloc + compress: True bss_size: 0x0 subsegments: - [0x9148F0, data, overlays/ovl_009148F0] @@ -8605,6 +9610,7 @@ start: 0x914940 vram: 0x80A4CEA0 follows_vram: ovl_009148F0 + compress: True subsegments: - [0x914940, data, overlays/ovl_009148F0_reloc] @@ -8613,6 +9619,7 @@ start: 0x914960 vram: 0x80A4CEC0 follows_vram: ovl_009148F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x914960, data, overlays/ovl_00914960] @@ -8621,6 +9628,7 @@ start: 0x9149B0 vram: 0x80A4CF10 follows_vram: ovl_00914960 + compress: True subsegments: - [0x9149B0, data, overlays/ovl_00914960_reloc] @@ -8629,6 +9637,7 @@ start: 0x9149D0 vram: 0x80A4CF30 follows_vram: ovl_00914960_reloc + compress: True bss_size: 0x0 subsegments: - [0x9149D0, data, overlays/ovl_009149D0] @@ -8637,6 +9646,7 @@ start: 0x914A20 vram: 0x80A4CF80 follows_vram: ovl_009149D0 + compress: True subsegments: - [0x914A20, data, overlays/ovl_009149D0_reloc] @@ -8645,6 +9655,7 @@ start: 0x914A40 vram: 0x80A4CFA0 follows_vram: ovl_009149D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x914A40, data, overlays/ovl_00914A40] @@ -8653,6 +9664,7 @@ start: 0x914A90 vram: 0x80A4CFF0 follows_vram: ovl_00914A40 + compress: True subsegments: - [0x914A90, data, overlays/ovl_00914A40_reloc] @@ -8661,6 +9673,7 @@ start: 0x914AB0 vram: 0x80A4D010 follows_vram: ovl_00914A40_reloc + compress: True bss_size: 0x0 subsegments: - [0x914AB0, data, overlays/ovl_00914AB0] @@ -8669,6 +9682,7 @@ start: 0x914B00 vram: 0x80A4D060 follows_vram: ovl_00914AB0 + compress: True subsegments: - [0x914B00, data, overlays/ovl_00914AB0_reloc] @@ -8677,6 +9691,7 @@ start: 0x914B20 vram: 0x80A4D080 follows_vram: ovl_00914AB0_reloc + compress: True bss_size: 0x0 subsegments: - [0x914B20, data, overlays/ovl_00914B20] @@ -8685,6 +9700,7 @@ start: 0x914B70 vram: 0x80A4D0D0 follows_vram: ovl_00914B20 + compress: True subsegments: - [0x914B70, data, overlays/ovl_00914B20_reloc] @@ -8693,6 +9709,7 @@ start: 0x914B90 vram: 0x80A4D0F0 follows_vram: ovl_00914B20_reloc + compress: True bss_size: 0x0 subsegments: - [0x914B90, data, overlays/ovl_00914B90] @@ -8701,6 +9718,7 @@ start: 0x914BE0 vram: 0x80A4D140 follows_vram: ovl_00914B90 + compress: True subsegments: - [0x914BE0, data, overlays/ovl_00914B90_reloc] @@ -8709,6 +9727,7 @@ start: 0x914C00 vram: 0x80A4D160 follows_vram: ovl_00914B90_reloc + compress: True bss_size: 0x0 subsegments: - [0x914C00, data, overlays/ovl_00914C00] @@ -8717,6 +9736,7 @@ start: 0x914C50 vram: 0x80A4D1B0 follows_vram: ovl_00914C00 + compress: True subsegments: - [0x914C50, data, overlays/ovl_00914C00_reloc] @@ -8725,6 +9745,7 @@ start: 0x914C70 vram: 0x80A4D1D0 follows_vram: ovl_00914C00_reloc + compress: True bss_size: 0x0 subsegments: - [0x914C70, data, overlays/ovl_00914C70] @@ -8733,6 +9754,7 @@ start: 0x914CC0 vram: 0x80A4D220 follows_vram: ovl_00914C70 + compress: True subsegments: - [0x914CC0, data, overlays/ovl_00914C70_reloc] @@ -8741,6 +9763,7 @@ start: 0x914CE0 vram: 0x80A4D240 follows_vram: ovl_00914C70_reloc + compress: True bss_size: 0x0 subsegments: - [0x914CE0, asm, overlays/ovl_00914CE0] @@ -8750,6 +9773,7 @@ start: 0x915040 vram: 0x80A4D5A0 follows_vram: ovl_00914CE0 + compress: True subsegments: - [0x915040, data, overlays/ovl_00914CE0_reloc] @@ -8758,6 +9782,7 @@ start: 0x915070 vram: 0x80A4D5D0 follows_vram: ovl_00914CE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x915070, data, overlays/ovl_00915070] @@ -8766,6 +9791,7 @@ start: 0x9150C0 vram: 0x80A4D620 follows_vram: ovl_00915070 + compress: True subsegments: - [0x9150C0, data, overlays/ovl_00915070_reloc] @@ -8774,6 +9800,7 @@ start: 0x9150E0 vram: 0x80A4D640 follows_vram: ovl_00915070_reloc + compress: True bss_size: 0x0 subsegments: - [0x9150E0, data, overlays/ovl_009150E0] @@ -8782,6 +9809,7 @@ start: 0x915130 vram: 0x80A4D690 follows_vram: ovl_009150E0 + compress: True subsegments: - [0x915130, data, overlays/ovl_009150E0_reloc] @@ -8790,6 +9818,7 @@ start: 0x915150 vram: 0x80A4D6B0 follows_vram: ovl_009150E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x915150, data, overlays/ovl_00915150] @@ -8798,6 +9827,7 @@ start: 0x9151A0 vram: 0x80A4D700 follows_vram: ovl_00915150 + compress: True subsegments: - [0x9151A0, data, overlays/ovl_00915150_reloc] @@ -8806,6 +9836,7 @@ start: 0x9151C0 vram: 0x80A4D720 follows_vram: ovl_00915150_reloc + compress: True bss_size: 0x0 subsegments: - [0x9151C0, data, overlays/ovl_009151C0] @@ -8814,6 +9845,7 @@ start: 0x915210 vram: 0x80A4D770 follows_vram: ovl_009151C0 + compress: True subsegments: - [0x915210, data, overlays/ovl_009151C0_reloc] @@ -8822,6 +9854,7 @@ start: 0x915230 vram: 0x80A4D790 follows_vram: ovl_009151C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x915230, data, overlays/ovl_00915230] @@ -8830,6 +9863,7 @@ start: 0x915280 vram: 0x80A4D7E0 follows_vram: ovl_00915230 + compress: True subsegments: - [0x915280, data, overlays/ovl_00915230_reloc] @@ -8838,6 +9872,7 @@ start: 0x9152A0 vram: 0x80A4D800 follows_vram: ovl_00915230_reloc + compress: True bss_size: 0x0 subsegments: - [0x9152A0, data, overlays/ovl_009152A0] @@ -8846,6 +9881,7 @@ start: 0x9152F0 vram: 0x80A4D850 follows_vram: ovl_009152A0 + compress: True subsegments: - [0x9152F0, data, overlays/ovl_009152A0_reloc] @@ -8854,6 +9890,7 @@ start: 0x915310 vram: 0x80A4D870 follows_vram: ovl_009152A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x915310, asm, overlays/ovl_00915310] @@ -8863,6 +9900,7 @@ start: 0x915860 vram: 0x80A4DDC0 follows_vram: ovl_00915310 + compress: True subsegments: - [0x915860, data, overlays/ovl_00915310_reloc] @@ -8871,6 +9909,7 @@ start: 0x915890 vram: 0x80A4DDF0 follows_vram: ovl_00915310_reloc + compress: True bss_size: 0x0 subsegments: - [0x915890, asm, overlays/ovl_00915890] @@ -8880,6 +9919,7 @@ start: 0x9159E0 vram: 0x80A4DF40 follows_vram: ovl_00915890 + compress: True subsegments: - [0x9159E0, data, overlays/ovl_00915890_reloc] @@ -8888,6 +9928,7 @@ start: 0x915A10 vram: 0x80A4DF70 follows_vram: ovl_00915890_reloc + compress: True bss_size: 0x0 subsegments: - [0x915A10, data, overlays/ovl_00915A10] @@ -8896,6 +9937,7 @@ start: 0x915A60 vram: 0x80A4DFC0 follows_vram: ovl_00915A10 + compress: True subsegments: - [0x915A60, data, overlays/ovl_00915A10_reloc] @@ -8904,6 +9946,7 @@ start: 0x915A80 vram: 0x80A4DFE0 follows_vram: ovl_00915A10_reloc + compress: True bss_size: 0x0 subsegments: - [0x915A80, data, overlays/ovl_00915A80] @@ -8912,6 +9955,7 @@ start: 0x915AD0 vram: 0x80A4E030 follows_vram: ovl_00915A80 + compress: True subsegments: - [0x915AD0, data, overlays/ovl_00915A80_reloc] @@ -8920,6 +9964,7 @@ start: 0x915AF0 vram: 0x80A4E050 follows_vram: ovl_00915A80_reloc + compress: True bss_size: 0x0 subsegments: - [0x915AF0, data, overlays/ovl_00915AF0] @@ -8928,6 +9973,7 @@ start: 0x915B40 vram: 0x80A4E0A0 follows_vram: ovl_00915AF0 + compress: True subsegments: - [0x915B40, data, overlays/ovl_00915AF0_reloc] @@ -8936,6 +9982,7 @@ start: 0x915B60 vram: 0x80A4E0C0 follows_vram: ovl_00915AF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x915B60, data, overlays/ovl_00915B60] @@ -8944,6 +9991,7 @@ start: 0x915BB0 vram: 0x80A4E110 follows_vram: ovl_00915B60 + compress: True subsegments: - [0x915BB0, data, overlays/ovl_00915B60_reloc] @@ -8952,6 +10000,7 @@ start: 0x915BD0 vram: 0x80A4E130 follows_vram: ovl_00915B60_reloc + compress: True bss_size: 0x0 subsegments: - [0x915BD0, data, overlays/ovl_00915BD0] @@ -8960,6 +10009,7 @@ start: 0x915C20 vram: 0x80A4E180 follows_vram: ovl_00915BD0 + compress: True subsegments: - [0x915C20, data, overlays/ovl_00915BD0_reloc] @@ -8968,6 +10018,7 @@ start: 0x915C40 vram: 0x80A4E1A0 follows_vram: ovl_00915BD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x915C40, asm, overlays/ovl_00915C40] @@ -8977,6 +10028,7 @@ start: 0x915F50 vram: 0x80A4E4B0 follows_vram: ovl_00915C40 + compress: True subsegments: - [0x915F50, data, overlays/ovl_00915C40_reloc] @@ -8985,6 +10037,7 @@ start: 0x915F80 vram: 0x80A4E4E0 follows_vram: ovl_00915C40_reloc + compress: True bss_size: 0x0 subsegments: - [0x915F80, data, overlays/ovl_00915F80] @@ -8993,6 +10046,7 @@ start: 0x915FD0 vram: 0x80A4E530 follows_vram: ovl_00915F80 + compress: True subsegments: - [0x915FD0, data, overlays/ovl_00915F80_reloc] @@ -9001,6 +10055,7 @@ start: 0x915FF0 vram: 0x80A4E550 follows_vram: ovl_00915F80_reloc + compress: True bss_size: 0x0 subsegments: - [0x915FF0, asm, overlays/ovl_00915FF0] @@ -9010,6 +10065,7 @@ start: 0x916300 vram: 0x80A4E860 follows_vram: ovl_00915FF0 + compress: True subsegments: - [0x916300, data, overlays/ovl_00915FF0_reloc] @@ -9018,6 +10074,7 @@ start: 0x916330 vram: 0x80A4E890 follows_vram: ovl_00915FF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x916330, data, overlays/ovl_00916330] @@ -9026,6 +10083,7 @@ start: 0x916380 vram: 0x80A4E8E0 follows_vram: ovl_00916330 + compress: True subsegments: - [0x916380, data, overlays/ovl_00916330_reloc] @@ -9034,6 +10092,7 @@ start: 0x9163A0 vram: 0x80A4E900 follows_vram: ovl_00916330_reloc + compress: True bss_size: 0x0 subsegments: - [0x9163A0, asm, overlays/ovl_009163A0] @@ -9043,6 +10102,7 @@ start: 0x9166B0 vram: 0x80A4EC10 follows_vram: ovl_009163A0 + compress: True subsegments: - [0x9166B0, data, overlays/ovl_009163A0_reloc] @@ -9051,6 +10111,7 @@ start: 0x9166E0 vram: 0x80A4EC40 follows_vram: ovl_009163A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9166E0, data, overlays/ovl_009166E0] @@ -9059,6 +10120,7 @@ start: 0x916730 vram: 0x80A4EC90 follows_vram: ovl_009166E0 + compress: True subsegments: - [0x916730, data, overlays/ovl_009166E0_reloc] @@ -9067,6 +10129,7 @@ start: 0x916750 vram: 0x80A4ECB0 follows_vram: ovl_009166E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x916750, data, overlays/ovl_00916750] @@ -9075,6 +10138,7 @@ start: 0x9167A0 vram: 0x80A4ED00 follows_vram: ovl_00916750 + compress: True subsegments: - [0x9167A0, data, overlays/ovl_00916750_reloc] @@ -9083,6 +10147,7 @@ start: 0x9167C0 vram: 0x80A4ED20 follows_vram: ovl_00916750_reloc + compress: True bss_size: 0x0 subsegments: - [0x9167C0, data, overlays/ovl_009167C0] @@ -9091,6 +10156,7 @@ start: 0x916810 vram: 0x80A4ED70 follows_vram: ovl_009167C0 + compress: True subsegments: - [0x916810, data, overlays/ovl_009167C0_reloc] @@ -9099,6 +10165,7 @@ start: 0x916830 vram: 0x80A4ED90 follows_vram: ovl_009167C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x916830, data, overlays/ovl_00916830] @@ -9107,6 +10174,7 @@ start: 0x916880 vram: 0x80A4EDE0 follows_vram: ovl_00916830 + compress: True subsegments: - [0x916880, data, overlays/ovl_00916830_reloc] @@ -9115,6 +10183,7 @@ start: 0x9168A0 vram: 0x80A4EE00 follows_vram: ovl_00916830_reloc + compress: True bss_size: 0x0 subsegments: - [0x9168A0, asm, overlays/ovl_009168A0] @@ -9124,6 +10193,7 @@ start: 0x9169E0 vram: 0x80A4EF40 follows_vram: ovl_009168A0 + compress: True subsegments: - [0x9169E0, data, overlays/ovl_009168A0_reloc] @@ -9132,6 +10202,7 @@ start: 0x916A10 vram: 0x80A4EF70 follows_vram: ovl_009168A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x916A10, data, overlays/ovl_00916A10] @@ -9140,6 +10211,7 @@ start: 0x916A60 vram: 0x80A4EFC0 follows_vram: ovl_00916A10 + compress: True subsegments: - [0x916A60, data, overlays/ovl_00916A10_reloc] @@ -9148,6 +10220,7 @@ start: 0x916A80 vram: 0x80A4EFE0 follows_vram: ovl_00916A10_reloc + compress: True bss_size: 0x0 subsegments: - [0x916A80, data, overlays/ovl_00916A80] @@ -9156,6 +10229,7 @@ start: 0x916AD0 vram: 0x80A4F030 follows_vram: ovl_00916A80 + compress: True subsegments: - [0x916AD0, data, overlays/ovl_00916A80_reloc] @@ -9164,6 +10238,7 @@ start: 0x916AF0 vram: 0x80A4F050 follows_vram: ovl_00916A80_reloc + compress: True bss_size: 0x0 subsegments: - [0x916AF0, data, overlays/ovl_00916AF0] @@ -9172,6 +10247,7 @@ start: 0x916B40 vram: 0x80A4F0A0 follows_vram: ovl_00916AF0 + compress: True subsegments: - [0x916B40, data, overlays/ovl_00916AF0_reloc] @@ -9180,6 +10256,7 @@ start: 0x916B60 vram: 0x80A4F0C0 follows_vram: ovl_00916AF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x916B60, asm, overlays/ovl_00916B60] @@ -9189,6 +10266,7 @@ start: 0x916E40 vram: 0x80A4F3A0 follows_vram: ovl_00916B60 + compress: True subsegments: - [0x916E40, data, overlays/ovl_00916B60_reloc] @@ -9197,6 +10275,7 @@ start: 0x916E70 vram: 0x80A4F3D0 follows_vram: ovl_00916B60_reloc + compress: True bss_size: 0x0 subsegments: - [0x916E70, data, overlays/ovl_00916E70] @@ -9205,6 +10284,7 @@ start: 0x916EC0 vram: 0x80A4F420 follows_vram: ovl_00916E70 + compress: True subsegments: - [0x916EC0, data, overlays/ovl_00916E70_reloc] @@ -9213,6 +10293,7 @@ start: 0x916EE0 vram: 0x80A4F440 follows_vram: ovl_00916E70_reloc + compress: True bss_size: 0x0 subsegments: - [0x916EE0, data, overlays/ovl_00916EE0] @@ -9221,6 +10302,7 @@ start: 0x916F30 vram: 0x80A4F490 follows_vram: ovl_00916EE0 + compress: True subsegments: - [0x916F30, data, overlays/ovl_00916EE0_reloc] @@ -9229,6 +10311,7 @@ start: 0x916F50 vram: 0x80A4F4B0 follows_vram: ovl_00916EE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x916F50, data, overlays/ovl_00916F50] @@ -9237,6 +10320,7 @@ start: 0x916FA0 vram: 0x80A4F500 follows_vram: ovl_00916F50 + compress: True subsegments: - [0x916FA0, data, overlays/ovl_00916F50_reloc] @@ -9245,6 +10329,7 @@ start: 0x916FC0 vram: 0x80A4F520 follows_vram: ovl_00916F50_reloc + compress: True bss_size: 0x0 subsegments: - [0x916FC0, data, overlays/ovl_00916FC0] @@ -9253,6 +10338,7 @@ start: 0x917010 vram: 0x80A4F570 follows_vram: ovl_00916FC0 + compress: True subsegments: - [0x917010, data, overlays/ovl_00916FC0_reloc] @@ -9261,6 +10347,7 @@ start: 0x917030 vram: 0x80A4F590 follows_vram: ovl_00916FC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x917030, data, overlays/ovl_00917030] @@ -9269,6 +10356,7 @@ start: 0x917080 vram: 0x80A4F5E0 follows_vram: ovl_00917030 + compress: True subsegments: - [0x917080, data, overlays/ovl_00917030_reloc] @@ -9277,6 +10365,7 @@ start: 0x9170A0 vram: 0x80A4F600 follows_vram: ovl_00917030_reloc + compress: True bss_size: 0x0 subsegments: - [0x9170A0, data, overlays/ovl_009170A0] @@ -9285,6 +10374,7 @@ start: 0x9170F0 vram: 0x80A4F650 follows_vram: ovl_009170A0 + compress: True subsegments: - [0x9170F0, data, overlays/ovl_009170A0_reloc] @@ -9293,6 +10383,7 @@ start: 0x917110 vram: 0x80A4F670 follows_vram: ovl_009170A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x917110, data, overlays/ovl_00917110] @@ -9301,6 +10392,7 @@ start: 0x917160 vram: 0x80A4F6C0 follows_vram: ovl_00917110 + compress: True subsegments: - [0x917160, data, overlays/ovl_00917110_reloc] @@ -9309,6 +10401,7 @@ start: 0x917180 vram: 0x80A4F6E0 follows_vram: ovl_00917110_reloc + compress: True bss_size: 0x0 subsegments: - [0x917180, asm, overlays/ovl_00917180] @@ -9318,6 +10411,7 @@ start: 0x9174E0 vram: 0x80A4FA40 follows_vram: ovl_00917180 + compress: True subsegments: - [0x9174E0, data, overlays/ovl_00917180_reloc] @@ -9326,6 +10420,7 @@ start: 0x917510 vram: 0x80A4FA70 follows_vram: ovl_00917180_reloc + compress: True bss_size: 0x0 subsegments: - [0x917510, asm, overlays/ovl_00917510] @@ -9335,6 +10430,7 @@ start: 0x917870 vram: 0x80A4FDD0 follows_vram: ovl_00917510 + compress: True subsegments: - [0x917870, data, overlays/ovl_00917510_reloc] @@ -9343,6 +10439,7 @@ start: 0x9178A0 vram: 0x80A4FE00 follows_vram: ovl_00917510_reloc + compress: True bss_size: 0x0 subsegments: - [0x9178A0, asm, overlays/ovl_009178A0] @@ -9352,6 +10449,7 @@ start: 0x917C00 vram: 0x80A50160 follows_vram: ovl_009178A0 + compress: True subsegments: - [0x917C00, data, overlays/ovl_009178A0_reloc] @@ -9360,6 +10458,7 @@ start: 0x917C30 vram: 0x80A50190 follows_vram: ovl_009178A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x917C30, asm, overlays/ovl_00917C30] @@ -9369,6 +10468,7 @@ start: 0x917F10 vram: 0x80A50470 follows_vram: ovl_00917C30 + compress: True subsegments: - [0x917F10, data, overlays/ovl_00917C30_reloc] @@ -9377,6 +10477,7 @@ start: 0x917F40 vram: 0x80A504A0 follows_vram: ovl_00917C30_reloc + compress: True bss_size: 0x0 subsegments: - [0x917F40, data, overlays/ovl_00917F40] @@ -9385,6 +10486,7 @@ start: 0x917F90 vram: 0x80A504F0 follows_vram: ovl_00917F40 + compress: True subsegments: - [0x917F90, data, overlays/ovl_00917F40_reloc] @@ -9393,6 +10495,7 @@ start: 0x917FB0 vram: 0x80A50510 follows_vram: ovl_00917F40_reloc + compress: True bss_size: 0x0 subsegments: - [0x917FB0, data, overlays/ovl_00917FB0] @@ -9401,6 +10504,7 @@ start: 0x918000 vram: 0x80A50560 follows_vram: ovl_00917FB0 + compress: True subsegments: - [0x918000, data, overlays/ovl_00917FB0_reloc] @@ -9409,6 +10513,7 @@ start: 0x918020 vram: 0x80A50580 follows_vram: ovl_00917FB0_reloc + compress: True bss_size: 0x0 subsegments: - [0x918020, data, overlays/ovl_00918020] @@ -9417,6 +10522,7 @@ start: 0x918070 vram: 0x80A505D0 follows_vram: ovl_00918020 + compress: True subsegments: - [0x918070, data, overlays/ovl_00918020_reloc] @@ -9425,6 +10531,7 @@ start: 0x918090 vram: 0x80A505F0 follows_vram: ovl_00918020_reloc + compress: True bss_size: 0x0 subsegments: - [0x918090, data, overlays/ovl_00918090] @@ -9433,6 +10540,7 @@ start: 0x9180E0 vram: 0x80A50640 follows_vram: ovl_00918090 + compress: True subsegments: - [0x9180E0, data, overlays/ovl_00918090_reloc] @@ -9441,6 +10549,7 @@ start: 0x918100 vram: 0x80A50660 follows_vram: ovl_00918090_reloc + compress: True bss_size: 0x0 subsegments: - [0x918100, data, overlays/ovl_00918100] @@ -9449,6 +10558,7 @@ start: 0x918150 vram: 0x80A506B0 follows_vram: ovl_00918100 + compress: True subsegments: - [0x918150, data, overlays/ovl_00918100_reloc] @@ -9457,6 +10567,7 @@ start: 0x918170 vram: 0x80A506D0 follows_vram: ovl_00918100_reloc + compress: True bss_size: 0x0 subsegments: - [0x918170, asm, overlays/ovl_00918170] @@ -9467,6 +10578,7 @@ start: 0x918490 vram: 0x80A509F0 follows_vram: ovl_00918170 + compress: True subsegments: - [0x918490, data, overlays/ovl_00918170_reloc] @@ -9475,6 +10587,7 @@ start: 0x9184E0 vram: 0x80A50A40 follows_vram: ovl_00918170_reloc + compress: True bss_size: 0x0 subsegments: - [0x9184E0, asm, overlays/ovl_009184E0] @@ -9484,6 +10597,7 @@ start: 0x9187C0 vram: 0x80A50D20 follows_vram: ovl_009184E0 + compress: True subsegments: - [0x9187C0, data, overlays/ovl_009184E0_reloc] @@ -9492,6 +10606,7 @@ start: 0x9187F0 vram: 0x80A50D50 follows_vram: ovl_009184E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9187F0, data, overlays/ovl_009187F0] @@ -9500,6 +10615,7 @@ start: 0x918840 vram: 0x80A50DA0 follows_vram: ovl_009187F0 + compress: True subsegments: - [0x918840, data, overlays/ovl_009187F0_reloc] @@ -9508,6 +10624,7 @@ start: 0x918860 vram: 0x80A50DC0 follows_vram: ovl_009187F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x918860, asm, overlays/ovl_00918860] @@ -9518,6 +10635,7 @@ start: 0x918BD0 vram: 0x80A51130 follows_vram: ovl_00918860 + compress: True subsegments: - [0x918BD0, data, overlays/ovl_00918860_reloc] @@ -9526,6 +10644,7 @@ start: 0x918C20 vram: 0x80A51180 follows_vram: ovl_00918860_reloc + compress: True bss_size: 0x0 subsegments: - [0x918C20, asm, overlays/ovl_00918C20] @@ -9536,6 +10655,7 @@ start: 0x919390 vram: 0x80A518F0 follows_vram: ovl_00918C20 + compress: True subsegments: - [0x919390, data, overlays/ovl_00918C20_reloc] @@ -9544,6 +10664,7 @@ start: 0x919400 vram: 0x80A51960 follows_vram: ovl_00918C20_reloc + compress: True bss_size: 0x0 subsegments: - [0x919400, asm, overlays/ovl_00919400] @@ -9554,6 +10675,7 @@ start: 0x919730 vram: 0x80A51C90 follows_vram: ovl_00919400 + compress: True subsegments: - [0x919730, data, overlays/ovl_00919400_reloc] @@ -9562,6 +10684,7 @@ start: 0x919760 vram: 0x80A51CC0 follows_vram: ovl_00919400_reloc + compress: True bss_size: 0x0 subsegments: - [0x919760, asm, overlays/ovl_00919760] @@ -9572,6 +10695,7 @@ start: 0x91A230 vram: 0x80A52790 follows_vram: ovl_00919760 + compress: True subsegments: - [0x91A230, data, overlays/ovl_00919760_reloc] @@ -9580,6 +10704,7 @@ start: 0x91A2D0 vram: 0x80A52830 follows_vram: ovl_00919760_reloc + compress: True bss_size: 0x0 subsegments: - [0x91A2D0, asm, overlays/ovl_0091A2D0] @@ -9590,6 +10715,7 @@ start: 0x91A860 vram: 0x80A52DC0 follows_vram: ovl_0091A2D0 + compress: True subsegments: - [0x91A860, data, overlays/ovl_0091A2D0_reloc] @@ -9598,6 +10724,7 @@ start: 0x91A8B0 vram: 0x80A52E10 follows_vram: ovl_0091A2D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x91A8B0, asm, overlays/ovl_0091A8B0] @@ -9608,6 +10735,7 @@ start: 0x91AFF0 vram: 0x80A53550 follows_vram: ovl_0091A8B0 + compress: True subsegments: - [0x91AFF0, data, overlays/ovl_0091A8B0_reloc] @@ -9616,6 +10744,7 @@ start: 0x91B080 vram: 0x80A535E0 follows_vram: ovl_0091A8B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x91B080, asm, overlays/ovl_0091B080] @@ -9626,6 +10755,7 @@ start: 0x91B660 vram: 0x80A53BC0 follows_vram: ovl_0091B080 + compress: True subsegments: - [0x91B660, data, overlays/ovl_0091B080_reloc] @@ -9634,6 +10764,7 @@ start: 0x91B700 vram: 0x80A53C60 follows_vram: ovl_0091B080_reloc + compress: True bss_size: 0x0 subsegments: - [0x91B700, asm, overlays/ovl_0091B700] @@ -9644,6 +10775,7 @@ start: 0x91BEF0 vram: 0x80A54450 follows_vram: ovl_0091B700 + compress: True subsegments: - [0x91BEF0, data, overlays/ovl_0091B700_reloc] @@ -9652,6 +10784,7 @@ start: 0x91BF30 vram: 0x80A54490 follows_vram: ovl_0091B700_reloc + compress: True bss_size: 0x0 subsegments: - [0x91BF30, asm, overlays/ovl_0091BF30] @@ -9661,6 +10794,7 @@ start: 0x91C160 vram: 0x80A546C0 follows_vram: ovl_0091BF30 + compress: True subsegments: - [0x91C160, data, overlays/ovl_0091BF30_reloc] @@ -9669,6 +10803,7 @@ start: 0x91C190 vram: 0x80A546F0 follows_vram: ovl_0091BF30_reloc + compress: True bss_size: 0x0 subsegments: - [0x91C190, asm, overlays/ovl_0091C190] @@ -9679,6 +10814,7 @@ start: 0x91C5A0 vram: 0x80A54B00 follows_vram: ovl_0091C190 + compress: True subsegments: - [0x91C5A0, data, overlays/ovl_0091C190_reloc] @@ -9687,6 +10823,7 @@ start: 0x91C600 vram: 0x80A54B60 follows_vram: ovl_0091C190_reloc + compress: True bss_size: 0x0 subsegments: - [0x91C600, asm, overlays/ovl_0091C600] @@ -9697,6 +10834,7 @@ start: 0x91CCA0 vram: 0x80A55200 follows_vram: ovl_0091C600 + compress: True subsegments: - [0x91CCA0, data, overlays/ovl_0091C600_reloc] @@ -9705,6 +10843,7 @@ start: 0x91CD10 vram: 0x80A55270 follows_vram: ovl_0091C600_reloc + compress: True bss_size: 0x0 subsegments: - [0x91CD10, asm, overlays/ovl_0091CD10] @@ -9715,6 +10854,7 @@ start: 0x91D3D0 vram: 0x80A55930 follows_vram: ovl_0091CD10 + compress: True subsegments: - [0x91D3D0, data, overlays/ovl_0091CD10_reloc] @@ -9723,6 +10863,7 @@ start: 0x91D450 vram: 0x80A559B0 follows_vram: ovl_0091CD10_reloc + compress: True bss_size: 0x0 subsegments: - [0x91D450, asm, overlays/ovl_0091D450] @@ -9733,6 +10874,7 @@ start: 0x91D8D0 vram: 0x80A55E30 follows_vram: ovl_0091D450 + compress: True subsegments: - [0x91D8D0, data, overlays/ovl_0091D450_reloc] @@ -9741,6 +10883,7 @@ start: 0x91D910 vram: 0x80A55E70 follows_vram: ovl_0091D450_reloc + compress: True bss_size: 0x0 subsegments: - [0x91D910, asm, overlays/ovl_0091D910] @@ -9751,6 +10894,7 @@ start: 0x91DEB0 vram: 0x80A56410 follows_vram: ovl_0091D910 + compress: True subsegments: - [0x91DEB0, data, overlays/ovl_0091D910_reloc] @@ -9759,6 +10903,7 @@ start: 0x91DF10 vram: 0x80A56470 follows_vram: ovl_0091D910_reloc + compress: True bss_size: 0x0 subsegments: - [0x91DF10, asm, overlays/ovl_0091DF10] @@ -9768,6 +10913,7 @@ start: 0x91E390 vram: 0x80A568F0 follows_vram: ovl_0091DF10 + compress: True subsegments: - [0x91E390, data, overlays/ovl_0091DF10_reloc] @@ -9776,6 +10922,7 @@ start: 0x91E3C0 vram: 0x80A56920 follows_vram: ovl_0091DF10_reloc + compress: True bss_size: 0x0 subsegments: - [0x91E3C0, asm, overlays/ovl_0091E3C0] @@ -9786,6 +10933,7 @@ start: 0x91E7A0 vram: 0x80A56D00 follows_vram: ovl_0091E3C0 + compress: True subsegments: - [0x91E7A0, data, overlays/ovl_0091E3C0_reloc] @@ -9794,6 +10942,7 @@ start: 0x91E800 vram: 0x80A56D60 follows_vram: ovl_0091E3C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x91E800, data, overlays/ovl_0091E800] @@ -9802,6 +10951,7 @@ start: 0x91E850 vram: 0x80A56DB0 follows_vram: ovl_0091E800 + compress: True subsegments: - [0x91E850, data, overlays/ovl_0091E800_reloc] @@ -9810,6 +10960,7 @@ start: 0x91E870 vram: 0x80A56DD0 follows_vram: ovl_0091E800_reloc + compress: True bss_size: 0x0 subsegments: - [0x91E870, data, overlays/ovl_0091E870] @@ -9818,6 +10969,7 @@ start: 0x91E8C0 vram: 0x80A56E20 follows_vram: ovl_0091E870 + compress: True subsegments: - [0x91E8C0, data, overlays/ovl_0091E870_reloc] @@ -9826,6 +10978,7 @@ start: 0x91E8E0 vram: 0x80A56E40 follows_vram: ovl_0091E870_reloc + compress: True bss_size: 0x0 subsegments: - [0x91E8E0, asm, overlays/ovl_0091E8E0] @@ -9835,6 +10988,7 @@ start: 0x91EC40 vram: 0x80A571A0 follows_vram: ovl_0091E8E0 + compress: True subsegments: - [0x91EC40, data, overlays/ovl_0091E8E0_reloc] @@ -9843,6 +10997,7 @@ start: 0x91EC70 vram: 0x80A571D0 follows_vram: ovl_0091E8E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x91EC70, asm, overlays/ovl_0091EC70] @@ -9853,6 +11008,7 @@ start: 0x91F370 vram: 0x80A578D0 follows_vram: ovl_0091EC70 + compress: True subsegments: - [0x91F370, data, overlays/ovl_0091EC70_reloc] @@ -9861,6 +11017,7 @@ start: 0x91F3E0 vram: 0x80A57940 follows_vram: ovl_0091EC70_reloc + compress: True bss_size: 0x0 subsegments: - [0x91F3E0, asm, overlays/ovl_0091F3E0] @@ -9871,6 +11028,7 @@ start: 0x91FB10 vram: 0x80A58070 follows_vram: ovl_0091F3E0 + compress: True subsegments: - [0x91FB10, data, overlays/ovl_0091F3E0_reloc] @@ -9879,6 +11037,7 @@ start: 0x91FB80 vram: 0x80A580E0 follows_vram: ovl_0091F3E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x91FB80, data, overlays/ovl_0091FB80] @@ -9887,6 +11046,7 @@ start: 0x91FBD0 vram: 0x80A58130 follows_vram: ovl_0091FB80 + compress: True subsegments: - [0x91FBD0, data, overlays/ovl_0091FB80_reloc] @@ -9895,6 +11055,7 @@ start: 0x91FBF0 vram: 0x80A58150 follows_vram: ovl_0091FB80_reloc + compress: True bss_size: 0x0 subsegments: - [0x91FBF0, data, overlays/ovl_0091FBF0] @@ -9903,6 +11064,7 @@ start: 0x91FC40 vram: 0x80A581A0 follows_vram: ovl_0091FBF0 + compress: True subsegments: - [0x91FC40, data, overlays/ovl_0091FBF0_reloc] @@ -9911,6 +11073,7 @@ start: 0x91FC60 vram: 0x80A581C0 follows_vram: ovl_0091FBF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x91FC60, data, overlays/ovl_0091FC60] @@ -9919,6 +11082,7 @@ start: 0x91FCB0 vram: 0x80A58210 follows_vram: ovl_0091FC60 + compress: True subsegments: - [0x91FCB0, data, overlays/ovl_0091FC60_reloc] @@ -9927,6 +11091,7 @@ start: 0x91FCD0 vram: 0x80A58230 follows_vram: ovl_0091FC60_reloc + compress: True bss_size: 0x0 subsegments: - [0x91FCD0, data, overlays/ovl_0091FCD0] @@ -9935,6 +11100,7 @@ start: 0x91FD20 vram: 0x80A58280 follows_vram: ovl_0091FCD0 + compress: True subsegments: - [0x91FD20, data, overlays/ovl_0091FCD0_reloc] @@ -9943,6 +11109,7 @@ start: 0x91FD40 vram: 0x80A582A0 follows_vram: ovl_0091FCD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x91FD40, data, overlays/ovl_0091FD40] @@ -9951,6 +11118,7 @@ start: 0x91FD90 vram: 0x80A582F0 follows_vram: ovl_0091FD40 + compress: True subsegments: - [0x91FD90, data, overlays/ovl_0091FD40_reloc] @@ -9959,6 +11127,7 @@ start: 0x91FDB0 vram: 0x80A58310 follows_vram: ovl_0091FD40_reloc + compress: True bss_size: 0x0 subsegments: - [0x91FDB0, asm, overlays/ovl_0091FDB0] @@ -9968,6 +11137,7 @@ start: 0x920260 vram: 0x80A587C0 follows_vram: ovl_0091FDB0 + compress: True subsegments: - [0x920260, data, overlays/ovl_0091FDB0_reloc] @@ -9976,6 +11146,7 @@ start: 0x9202A0 vram: 0x80A58800 follows_vram: ovl_0091FDB0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9202A0, asm, overlays/ovl_009202A0] @@ -9985,6 +11156,7 @@ start: 0x920380 vram: 0x80A588E0 follows_vram: ovl_009202A0 + compress: True subsegments: - [0x920380, data, overlays/ovl_009202A0_reloc] @@ -9993,6 +11165,7 @@ start: 0x9203B0 vram: 0x80A58910 follows_vram: ovl_009202A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9203B0, asm, overlays/ovl_009203B0] @@ -10002,6 +11175,7 @@ start: 0x920490 vram: 0x80A589F0 follows_vram: ovl_009203B0 + compress: True subsegments: - [0x920490, data, overlays/ovl_009203B0_reloc] @@ -10010,6 +11184,7 @@ start: 0x9204C0 vram: 0x80A58A20 follows_vram: ovl_009203B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9204C0, asm, overlays/ovl_009204C0] @@ -10019,6 +11194,7 @@ start: 0x9205A0 vram: 0x80A58B00 follows_vram: ovl_009204C0 + compress: True subsegments: - [0x9205A0, data, overlays/ovl_009204C0_reloc] @@ -10027,6 +11203,7 @@ start: 0x9205D0 vram: 0x80A58B30 follows_vram: ovl_009204C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9205D0, asm, overlays/ovl_009205D0] @@ -10036,6 +11213,7 @@ start: 0x9206B0 vram: 0x80A58C10 follows_vram: ovl_009205D0 + compress: True subsegments: - [0x9206B0, data, overlays/ovl_009205D0_reloc] @@ -10044,6 +11222,7 @@ start: 0x9206E0 vram: 0x80A58C40 follows_vram: ovl_009205D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9206E0, asm, overlays/ovl_009206E0] @@ -10054,6 +11233,7 @@ start: 0x920CD0 vram: 0x80A59230 follows_vram: ovl_009206E0 + compress: True subsegments: - [0x920CD0, data, overlays/ovl_009206E0_reloc] @@ -10062,6 +11242,7 @@ start: 0x920D20 vram: 0x80A59280 follows_vram: ovl_009206E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x920D20, data, overlays/ovl_00920D20] @@ -10070,6 +11251,7 @@ start: 0x920D70 vram: 0x80A592D0 follows_vram: ovl_00920D20 + compress: True subsegments: - [0x920D70, data, overlays/ovl_00920D20_reloc] @@ -10078,6 +11260,7 @@ start: 0x920D90 vram: 0x80A592F0 follows_vram: ovl_00920D20_reloc + compress: True bss_size: 0x0 subsegments: - [0x920D90, data, overlays/ovl_00920D90] @@ -10086,6 +11269,7 @@ start: 0x920DE0 vram: 0x80A59340 follows_vram: ovl_00920D90 + compress: True subsegments: - [0x920DE0, data, overlays/ovl_00920D90_reloc] @@ -10094,6 +11278,7 @@ start: 0x920E00 vram: 0x80A59360 follows_vram: ovl_00920D90_reloc + compress: True bss_size: 0x0 subsegments: - [0x920E00, asm, overlays/ovl_00920E00] @@ -10104,6 +11289,7 @@ start: 0x922270 vram: 0x80A5A7D0 follows_vram: ovl_00920E00 + compress: True subsegments: - [0x922270, data, overlays/ovl_00920E00_reloc] @@ -10112,6 +11298,7 @@ start: 0x922380 vram: 0x80A5A8E0 follows_vram: ovl_00920E00_reloc + compress: True bss_size: 0x0 subsegments: - [0x922380, data, overlays/ovl_00922380] @@ -10120,6 +11307,7 @@ start: 0x9223D0 vram: 0x80A5A930 follows_vram: ovl_00922380 + compress: True subsegments: - [0x9223D0, data, overlays/ovl_00922380_reloc] @@ -10128,6 +11316,7 @@ start: 0x9223F0 vram: 0x80A5A950 follows_vram: ovl_00922380_reloc + compress: True bss_size: 0x0 subsegments: - [0x9223F0, asm, overlays/ovl_009223F0] @@ -10138,6 +11327,7 @@ start: 0x9229B0 vram: 0x80A5AF10 follows_vram: ovl_009223F0 + compress: True subsegments: - [0x9229B0, data, overlays/ovl_009223F0_reloc] @@ -10146,6 +11336,7 @@ start: 0x922A10 vram: 0x80A5AF70 follows_vram: ovl_009223F0_reloc + compress: True bss_size: 0x7800 subsegments: - [0x922A10, asm, overlays/ovl_00922A10] @@ -10157,6 +11348,7 @@ start: 0x924590 vram: 0x80A642F0 follows_vram: ovl_00922A10 + compress: True subsegments: - [0x924590, data, overlays/ovl_00922A10_reloc] @@ -10165,6 +11357,7 @@ start: 0x9247E0 vram: 0x80A64540 follows_vram: ovl_00922A10_reloc + compress: True bss_size: 0x0 subsegments: - [0x9247E0, data, overlays/ovl_009247E0] @@ -10173,6 +11366,7 @@ start: 0x924830 vram: 0x80A64590 follows_vram: ovl_009247E0 + compress: True subsegments: - [0x924830, data, overlays/ovl_009247E0_reloc] @@ -10181,6 +11375,7 @@ start: 0x924850 vram: 0x80A645B0 follows_vram: ovl_009247E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x924850, data, overlays/ovl_00924850] @@ -10189,6 +11384,7 @@ start: 0x9248A0 vram: 0x80A64600 follows_vram: ovl_00924850 + compress: True subsegments: - [0x9248A0, data, overlays/ovl_00924850_reloc] @@ -10197,6 +11393,7 @@ start: 0x9248C0 vram: 0x80A64620 follows_vram: ovl_00924850_reloc + compress: True bss_size: 0x0 subsegments: - [0x9248C0, data, overlays/ovl_009248C0] @@ -10205,6 +11402,7 @@ start: 0x924910 vram: 0x80A64670 follows_vram: ovl_009248C0 + compress: True subsegments: - [0x924910, data, overlays/ovl_009248C0_reloc] @@ -10213,6 +11411,7 @@ start: 0x924930 vram: 0x80A64690 follows_vram: ovl_009248C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x924930, data, overlays/ovl_00924930] @@ -10221,6 +11420,7 @@ start: 0x924980 vram: 0x80A646E0 follows_vram: ovl_00924930 + compress: True subsegments: - [0x924980, data, overlays/ovl_00924930_reloc] @@ -10229,6 +11429,7 @@ start: 0x9249A0 vram: 0x80A64700 follows_vram: ovl_00924930_reloc + compress: True bss_size: 0x0 subsegments: - [0x9249A0, data, overlays/ovl_009249A0] @@ -10237,6 +11438,7 @@ start: 0x9249F0 vram: 0x80A64750 follows_vram: ovl_009249A0 + compress: True subsegments: - [0x9249F0, data, overlays/ovl_009249A0_reloc] @@ -10245,6 +11447,7 @@ start: 0x924A10 vram: 0x80A64770 follows_vram: ovl_009249A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x924A10, data, overlays/ovl_00924A10] @@ -10253,6 +11456,7 @@ start: 0x924A60 vram: 0x80A647C0 follows_vram: ovl_00924A10 + compress: True subsegments: - [0x924A60, data, overlays/ovl_00924A10_reloc] @@ -10261,6 +11465,7 @@ start: 0x924A80 vram: 0x80A647E0 follows_vram: ovl_00924A10_reloc + compress: True bss_size: 0x0 subsegments: - [0x924A80, data, overlays/ovl_00924A80] @@ -10269,6 +11474,7 @@ start: 0x924AD0 vram: 0x80A64830 follows_vram: ovl_00924A80 + compress: True subsegments: - [0x924AD0, data, overlays/ovl_00924A80_reloc] @@ -10277,6 +11483,7 @@ start: 0x924AF0 vram: 0x80A64850 follows_vram: ovl_00924A80_reloc + compress: True bss_size: 0x0 subsegments: - [0x924AF0, data, overlays/ovl_00924AF0] @@ -10285,6 +11492,7 @@ start: 0x924B40 vram: 0x80A648A0 follows_vram: ovl_00924AF0 + compress: True subsegments: - [0x924B40, data, overlays/ovl_00924AF0_reloc] @@ -10293,6 +11501,7 @@ start: 0x924B60 vram: 0x80A648C0 follows_vram: ovl_00924AF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x924B60, data, overlays/ovl_00924B60] @@ -10301,6 +11510,7 @@ start: 0x924BB0 vram: 0x80A64910 follows_vram: ovl_00924B60 + compress: True subsegments: - [0x924BB0, data, overlays/ovl_00924B60_reloc] @@ -10309,6 +11519,7 @@ start: 0x924BD0 vram: 0x80A64930 follows_vram: ovl_00924B60_reloc + compress: True bss_size: 0x0 subsegments: - [0x924BD0, data, overlays/ovl_00924BD0] @@ -10317,6 +11528,7 @@ start: 0x924C20 vram: 0x80A64980 follows_vram: ovl_00924BD0 + compress: True subsegments: - [0x924C20, data, overlays/ovl_00924BD0_reloc] @@ -10325,6 +11537,7 @@ start: 0x924C40 vram: 0x80A649A0 follows_vram: ovl_00924BD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x924C40, asm, overlays/ovl_00924C40] @@ -10335,6 +11548,7 @@ start: 0x927200 vram: 0x80A66F60 follows_vram: ovl_00924C40 + compress: True subsegments: - [0x927200, data, overlays/ovl_00924C40_reloc] @@ -10343,6 +11557,7 @@ start: 0x927440 vram: 0x80A671A0 follows_vram: ovl_00924C40_reloc + compress: True bss_size: 0x0 subsegments: - [0x927440, asm, overlays/ovl_00927440] @@ -10353,6 +11568,7 @@ start: 0x927860 vram: 0x80A675C0 follows_vram: ovl_00927440 + compress: True subsegments: - [0x927860, data, overlays/ovl_00927440_reloc] @@ -10361,6 +11577,7 @@ start: 0x927910 vram: 0x80A67670 follows_vram: ovl_00927440_reloc + compress: True bss_size: 0x0 subsegments: - [0x927910, asm, overlays/ovl_00927910] @@ -10371,6 +11588,7 @@ start: 0x928170 vram: 0x80A67ED0 follows_vram: ovl_00927910 + compress: True subsegments: - [0x928170, data, overlays/ovl_00927910_reloc] @@ -10379,6 +11597,7 @@ start: 0x928230 vram: 0x80A67F90 follows_vram: ovl_00927910_reloc + compress: True bss_size: 0x0 subsegments: - [0x928230, asm, overlays/ovl_00928230] @@ -10389,6 +11608,7 @@ start: 0x9284D0 vram: 0x80A68230 follows_vram: ovl_00928230 + compress: True subsegments: - [0x9284D0, data, overlays/ovl_00928230_reloc] @@ -10397,6 +11617,7 @@ start: 0x928530 vram: 0x80A68290 follows_vram: ovl_00928230_reloc + compress: True bss_size: 0x0 subsegments: - [0x928530, asm, overlays/ovl_00928530] @@ -10407,6 +11628,7 @@ start: 0x928770 vram: 0x80A684D0 follows_vram: ovl_00928530 + compress: True subsegments: - [0x928770, data, overlays/ovl_00928530_reloc] @@ -10415,6 +11637,7 @@ start: 0x9287B0 vram: 0x80A68510 follows_vram: ovl_00928530_reloc + compress: True bss_size: 0x0 subsegments: - [0x9287B0, asm, overlays/ovl_009287B0] @@ -10425,6 +11648,7 @@ start: 0x928C80 vram: 0x80A689E0 follows_vram: ovl_009287B0 + compress: True subsegments: - [0x928C80, data, overlays/ovl_009287B0_reloc] @@ -10433,6 +11657,7 @@ start: 0x928CC0 vram: 0x80A68A20 follows_vram: ovl_009287B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x928CC0, data, overlays/ovl_00928CC0] @@ -10441,6 +11666,7 @@ start: 0x928D10 vram: 0x80A68A70 follows_vram: ovl_00928CC0 + compress: True subsegments: - [0x928D10, data, overlays/ovl_00928CC0_reloc] @@ -10449,6 +11675,7 @@ start: 0x928D30 vram: 0x80A68A90 follows_vram: ovl_00928CC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x928D30, asm, overlays/ovl_00928D30] @@ -10458,6 +11685,7 @@ start: 0x929140 vram: 0x80A68EA0 follows_vram: ovl_00928D30 + compress: True subsegments: - [0x929140, data, overlays/ovl_00928D30_reloc] @@ -10466,6 +11694,7 @@ start: 0x929170 vram: 0x80A68ED0 follows_vram: ovl_00928D30_reloc + compress: True bss_size: 0x0 subsegments: - [0x929170, data, overlays/ovl_00929170] @@ -10474,6 +11703,7 @@ start: 0x9291C0 vram: 0x80A68F20 follows_vram: ovl_00929170 + compress: True subsegments: - [0x9291C0, data, overlays/ovl_00929170_reloc] @@ -10482,6 +11712,7 @@ start: 0x9291E0 vram: 0x80A68F40 follows_vram: ovl_00929170_reloc + compress: True bss_size: 0x0 subsegments: - [0x9291E0, data, overlays/ovl_009291E0] @@ -10490,6 +11721,7 @@ start: 0x929230 vram: 0x80A68F90 follows_vram: ovl_009291E0 + compress: True subsegments: - [0x929230, data, overlays/ovl_009291E0_reloc] @@ -10498,6 +11730,7 @@ start: 0x929250 vram: 0x80A68FB0 follows_vram: ovl_009291E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x929250, data, overlays/ovl_00929250] @@ -10506,6 +11739,7 @@ start: 0x9292A0 vram: 0x80A69000 follows_vram: ovl_00929250 + compress: True subsegments: - [0x9292A0, data, overlays/ovl_00929250_reloc] @@ -10514,6 +11748,7 @@ start: 0x9292C0 vram: 0x80A69020 follows_vram: ovl_00929250_reloc + compress: True bss_size: 0x0 subsegments: - [0x9292C0, data, overlays/ovl_009292C0] @@ -10522,6 +11757,7 @@ start: 0x929310 vram: 0x80A69070 follows_vram: ovl_009292C0 + compress: True subsegments: - [0x929310, data, overlays/ovl_009292C0_reloc] @@ -10530,6 +11766,7 @@ start: 0x929330 vram: 0x80A69090 follows_vram: ovl_009292C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x929330, data, overlays/ovl_00929330] @@ -10538,6 +11775,7 @@ start: 0x929380 vram: 0x80A690E0 follows_vram: ovl_00929330 + compress: True subsegments: - [0x929380, data, overlays/ovl_00929330_reloc] @@ -10546,6 +11784,7 @@ start: 0x9293A0 vram: 0x80A69100 follows_vram: ovl_00929330_reloc + compress: True bss_size: 0x0 subsegments: - [0x9293A0, data, overlays/ovl_009293A0] @@ -10554,6 +11793,7 @@ start: 0x9293F0 vram: 0x80A69150 follows_vram: ovl_009293A0 + compress: True subsegments: - [0x9293F0, data, overlays/ovl_009293A0_reloc] @@ -10562,6 +11802,7 @@ start: 0x929410 vram: 0x80A69170 follows_vram: ovl_009293A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x929410, data, overlays/ovl_00929410] @@ -10570,6 +11811,7 @@ start: 0x929460 vram: 0x80A691C0 follows_vram: ovl_00929410 + compress: True subsegments: - [0x929460, data, overlays/ovl_00929410_reloc] @@ -10578,6 +11820,7 @@ start: 0x929480 vram: 0x80A691E0 follows_vram: ovl_00929410_reloc + compress: True bss_size: 0x0 subsegments: - [0x929480, data, overlays/ovl_00929480] @@ -10586,6 +11829,7 @@ start: 0x9294D0 vram: 0x80A69230 follows_vram: ovl_00929480 + compress: True subsegments: - [0x9294D0, data, overlays/ovl_00929480_reloc] @@ -10594,6 +11838,7 @@ start: 0x9294F0 vram: 0x80A69250 follows_vram: ovl_00929480_reloc + compress: True bss_size: 0x0 subsegments: - [0x9294F0, data, overlays/ovl_009294F0] @@ -10602,6 +11847,7 @@ start: 0x929540 vram: 0x80A692A0 follows_vram: ovl_009294F0 + compress: True subsegments: - [0x929540, data, overlays/ovl_009294F0_reloc] @@ -10610,6 +11856,7 @@ start: 0x929560 vram: 0x80A692C0 follows_vram: ovl_009294F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x929560, data, overlays/ovl_00929560] @@ -10618,6 +11865,7 @@ start: 0x9295B0 vram: 0x80A69310 follows_vram: ovl_00929560 + compress: True subsegments: - [0x9295B0, data, overlays/ovl_00929560_reloc] @@ -10626,6 +11874,7 @@ start: 0x9295D0 vram: 0x80A69330 follows_vram: ovl_00929560_reloc + compress: True bss_size: 0x0 subsegments: - [0x9295D0, data, overlays/ovl_009295D0] @@ -10634,6 +11883,7 @@ start: 0x929620 vram: 0x80A69380 follows_vram: ovl_009295D0 + compress: True subsegments: - [0x929620, data, overlays/ovl_009295D0_reloc] @@ -10642,6 +11892,7 @@ start: 0x929640 vram: 0x80A693A0 follows_vram: ovl_009295D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x929640, data, overlays/ovl_00929640] @@ -10650,6 +11901,7 @@ start: 0x929690 vram: 0x80A693F0 follows_vram: ovl_00929640 + compress: True subsegments: - [0x929690, data, overlays/ovl_00929640_reloc] @@ -10658,6 +11910,7 @@ start: 0x9296B0 vram: 0x80A69410 follows_vram: ovl_00929640_reloc + compress: True bss_size: 0x0 subsegments: - [0x9296B0, data, overlays/ovl_009296B0] @@ -10666,6 +11919,7 @@ start: 0x929700 vram: 0x80A69460 follows_vram: ovl_009296B0 + compress: True subsegments: - [0x929700, data, overlays/ovl_009296B0_reloc] @@ -10674,6 +11928,7 @@ start: 0x929720 vram: 0x80A69480 follows_vram: ovl_009296B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x929720, data, overlays/ovl_00929720] @@ -10682,6 +11937,7 @@ start: 0x929770 vram: 0x80A694D0 follows_vram: ovl_00929720 + compress: True subsegments: - [0x929770, data, overlays/ovl_00929720_reloc] @@ -10690,6 +11946,7 @@ start: 0x929790 vram: 0x80A694F0 follows_vram: ovl_00929720_reloc + compress: True bss_size: 0x0 subsegments: - [0x929790, data, overlays/ovl_00929790] @@ -10698,6 +11955,7 @@ start: 0x9297E0 vram: 0x80A69540 follows_vram: ovl_00929790 + compress: True subsegments: - [0x9297E0, data, overlays/ovl_00929790_reloc] @@ -10706,6 +11964,7 @@ start: 0x929800 vram: 0x80A69560 follows_vram: ovl_00929790_reloc + compress: True bss_size: 0x0 subsegments: - [0x929800, asm, overlays/ovl_00929800] @@ -10716,6 +11975,7 @@ start: 0x929E20 vram: 0x80A69B80 follows_vram: ovl_00929800 + compress: True subsegments: - [0x929E20, data, overlays/ovl_00929800_reloc] @@ -10724,6 +11984,7 @@ start: 0x929E80 vram: 0x80A69BE0 follows_vram: ovl_00929800_reloc + compress: True bss_size: 0x0 subsegments: - [0x929E80, asm, overlays/ovl_00929E80] @@ -10733,6 +11994,7 @@ start: 0x929F70 vram: 0x80A69CD0 follows_vram: ovl_00929E80 + compress: True subsegments: - [0x929F70, data, overlays/ovl_00929E80_reloc] @@ -10741,6 +12003,7 @@ start: 0x929F90 vram: 0x80A69CF0 follows_vram: ovl_00929E80_reloc + compress: True bss_size: 0x0 subsegments: - [0x929F90, data, overlays/ovl_00929F90] @@ -10749,6 +12012,7 @@ start: 0x929FE0 vram: 0x80A69D40 follows_vram: ovl_00929F90 + compress: True subsegments: - [0x929FE0, data, overlays/ovl_00929F90_reloc] @@ -10757,6 +12021,7 @@ start: 0x92A000 vram: 0x80A69D60 follows_vram: ovl_00929F90_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A000, data, overlays/ovl_0092A000] @@ -10765,6 +12030,7 @@ start: 0x92A050 vram: 0x80A69DB0 follows_vram: ovl_0092A000 + compress: True subsegments: - [0x92A050, data, overlays/ovl_0092A000_reloc] @@ -10773,6 +12039,7 @@ start: 0x92A070 vram: 0x80A69DD0 follows_vram: ovl_0092A000_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A070, data, overlays/ovl_0092A070] @@ -10781,6 +12048,7 @@ start: 0x92A0C0 vram: 0x80A69E20 follows_vram: ovl_0092A070 + compress: True subsegments: - [0x92A0C0, data, overlays/ovl_0092A070_reloc] @@ -10789,6 +12057,7 @@ start: 0x92A0E0 vram: 0x80A69E40 follows_vram: ovl_0092A070_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A0E0, data, overlays/ovl_0092A0E0] @@ -10797,6 +12066,7 @@ start: 0x92A130 vram: 0x80A69E90 follows_vram: ovl_0092A0E0 + compress: True subsegments: - [0x92A130, data, overlays/ovl_0092A0E0_reloc] @@ -10805,6 +12075,7 @@ start: 0x92A150 vram: 0x80A69EB0 follows_vram: ovl_0092A0E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A150, data, overlays/ovl_0092A150] @@ -10813,6 +12084,7 @@ start: 0x92A1A0 vram: 0x80A69F00 follows_vram: ovl_0092A150 + compress: True subsegments: - [0x92A1A0, data, overlays/ovl_0092A150_reloc] @@ -10821,6 +12093,7 @@ start: 0x92A1C0 vram: 0x80A69F20 follows_vram: ovl_0092A150_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A1C0, data, overlays/ovl_0092A1C0] @@ -10829,6 +12102,7 @@ start: 0x92A210 vram: 0x80A69F70 follows_vram: ovl_0092A1C0 + compress: True subsegments: - [0x92A210, data, overlays/ovl_0092A1C0_reloc] @@ -10837,6 +12111,7 @@ start: 0x92A230 vram: 0x80A69F90 follows_vram: ovl_0092A1C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A230, data, overlays/ovl_0092A230] @@ -10845,6 +12120,7 @@ start: 0x92A280 vram: 0x80A69FE0 follows_vram: ovl_0092A230 + compress: True subsegments: - [0x92A280, data, overlays/ovl_0092A230_reloc] @@ -10853,6 +12129,7 @@ start: 0x92A2A0 vram: 0x80A6A000 follows_vram: ovl_0092A230_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A2A0, asm, overlays/ovl_0092A2A0] @@ -10862,6 +12139,7 @@ start: 0x92A390 vram: 0x80A6A0F0 follows_vram: ovl_0092A2A0 + compress: True subsegments: - [0x92A390, data, overlays/ovl_0092A2A0_reloc] @@ -10870,6 +12148,7 @@ start: 0x92A3B0 vram: 0x80A6A110 follows_vram: ovl_0092A2A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A3B0, data, overlays/ovl_0092A3B0] @@ -10878,6 +12157,7 @@ start: 0x92A400 vram: 0x80A6A160 follows_vram: ovl_0092A3B0 + compress: True subsegments: - [0x92A400, data, overlays/ovl_0092A3B0_reloc] @@ -10886,6 +12166,7 @@ start: 0x92A420 vram: 0x80A6A180 follows_vram: ovl_0092A3B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A420, data, overlays/ovl_0092A420] @@ -10894,6 +12175,7 @@ start: 0x92A470 vram: 0x80A6A1D0 follows_vram: ovl_0092A420 + compress: True subsegments: - [0x92A470, data, overlays/ovl_0092A420_reloc] @@ -10902,6 +12184,7 @@ start: 0x92A490 vram: 0x80A6A1F0 follows_vram: ovl_0092A420_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A490, asm, overlays/ovl_0092A490] @@ -10911,6 +12194,7 @@ start: 0x92A6E0 vram: 0x80A6A440 follows_vram: ovl_0092A490 + compress: True subsegments: - [0x92A6E0, data, overlays/ovl_0092A490_reloc] @@ -10919,6 +12203,7 @@ start: 0x92A730 vram: 0x80A6A490 follows_vram: ovl_0092A490_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A730, asm, overlays/ovl_0092A730] @@ -10928,6 +12213,7 @@ start: 0x92A820 vram: 0x80A6A580 follows_vram: ovl_0092A730 + compress: True subsegments: - [0x92A820, data, overlays/ovl_0092A730_reloc] @@ -10936,6 +12222,7 @@ start: 0x92A840 vram: 0x80A6A5A0 follows_vram: ovl_0092A730_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A840, data, overlays/ovl_0092A840] @@ -10944,6 +12231,7 @@ start: 0x92A890 vram: 0x80A6A5F0 follows_vram: ovl_0092A840 + compress: True subsegments: - [0x92A890, data, overlays/ovl_0092A840_reloc] @@ -10952,6 +12240,7 @@ start: 0x92A8B0 vram: 0x80A6A610 follows_vram: ovl_0092A840_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A8B0, data, overlays/ovl_0092A8B0] @@ -10960,6 +12249,7 @@ start: 0x92A900 vram: 0x80A6A660 follows_vram: ovl_0092A8B0 + compress: True subsegments: - [0x92A900, data, overlays/ovl_0092A8B0_reloc] @@ -10968,6 +12258,7 @@ start: 0x92A920 vram: 0x80A6A680 follows_vram: ovl_0092A8B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A920, data, overlays/ovl_0092A920] @@ -10976,6 +12267,7 @@ start: 0x92A970 vram: 0x80A6A6D0 follows_vram: ovl_0092A920 + compress: True subsegments: - [0x92A970, data, overlays/ovl_0092A920_reloc] @@ -10984,6 +12276,7 @@ start: 0x92A990 vram: 0x80A6A6F0 follows_vram: ovl_0092A920_reloc + compress: True bss_size: 0x0 subsegments: - [0x92A990, data, overlays/ovl_0092A990] @@ -10992,6 +12285,7 @@ start: 0x92A9E0 vram: 0x80A6A740 follows_vram: ovl_0092A990 + compress: True subsegments: - [0x92A9E0, data, overlays/ovl_0092A990_reloc] @@ -11000,6 +12294,7 @@ start: 0x92AA00 vram: 0x80A6A760 follows_vram: ovl_0092A990_reloc + compress: True bss_size: 0x0 subsegments: - [0x92AA00, data, overlays/ovl_0092AA00] @@ -11008,6 +12303,7 @@ start: 0x92AA50 vram: 0x80A6A7B0 follows_vram: ovl_0092AA00 + compress: True subsegments: - [0x92AA50, data, overlays/ovl_0092AA00_reloc] @@ -11016,6 +12312,7 @@ start: 0x92AA70 vram: 0x80A6A7D0 follows_vram: ovl_0092AA00_reloc + compress: True bss_size: 0x0 subsegments: - [0x92AA70, data, overlays/ovl_0092AA70] @@ -11024,6 +12321,7 @@ start: 0x92AAC0 vram: 0x80A6A820 follows_vram: ovl_0092AA70 + compress: True subsegments: - [0x92AAC0, data, overlays/ovl_0092AA70_reloc] @@ -11032,6 +12330,7 @@ start: 0x92AAE0 vram: 0x80A6A840 follows_vram: ovl_0092AA70_reloc + compress: True bss_size: 0x0 subsegments: - [0x92AAE0, data, overlays/ovl_0092AAE0] @@ -11040,6 +12339,7 @@ start: 0x92AB30 vram: 0x80A6A890 follows_vram: ovl_0092AAE0 + compress: True subsegments: - [0x92AB30, data, overlays/ovl_0092AAE0_reloc] @@ -11048,6 +12348,7 @@ start: 0x92AB50 vram: 0x80A6A8B0 follows_vram: ovl_0092AAE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92AB50, asm, overlays/ovl_0092AB50] @@ -11058,6 +12359,7 @@ start: 0x92B490 vram: 0x80A6B1F0 follows_vram: ovl_0092AB50 + compress: True subsegments: - [0x92B490, data, overlays/ovl_0092AB50_reloc] @@ -11066,6 +12368,7 @@ start: 0x92B4F0 vram: 0x80A6B250 follows_vram: ovl_0092AB50_reloc + compress: True bss_size: 0x0 subsegments: - [0x92B4F0, data, overlays/ovl_0092B4F0] @@ -11074,6 +12377,7 @@ start: 0x92B540 vram: 0x80A6B2A0 follows_vram: ovl_0092B4F0 + compress: True subsegments: - [0x92B540, data, overlays/ovl_0092B4F0_reloc] @@ -11082,6 +12386,7 @@ start: 0x92B560 vram: 0x80A6B2C0 follows_vram: ovl_0092B4F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92B560, asm, overlays/ovl_0092B560] @@ -11091,6 +12396,7 @@ start: 0x92B650 vram: 0x80A6B3B0 follows_vram: ovl_0092B560 + compress: True subsegments: - [0x92B650, data, overlays/ovl_0092B560_reloc] @@ -11099,6 +12405,7 @@ start: 0x92B670 vram: 0x80A6B3D0 follows_vram: ovl_0092B560_reloc + compress: True bss_size: 0x0 subsegments: - [0x92B670, data, overlays/ovl_0092B670] @@ -11107,6 +12414,7 @@ start: 0x92B6C0 vram: 0x80A6B420 follows_vram: ovl_0092B670 + compress: True subsegments: - [0x92B6C0, data, overlays/ovl_0092B670_reloc] @@ -11115,6 +12423,7 @@ start: 0x92B6E0 vram: 0x80A6B440 follows_vram: ovl_0092B670_reloc + compress: True bss_size: 0x0 subsegments: - [0x92B6E0, data, overlays/ovl_0092B6E0] @@ -11123,6 +12432,7 @@ start: 0x92B730 vram: 0x80A6B490 follows_vram: ovl_0092B6E0 + compress: True subsegments: - [0x92B730, data, overlays/ovl_0092B6E0_reloc] @@ -11131,6 +12441,7 @@ start: 0x92B750 vram: 0x80A6B4B0 follows_vram: ovl_0092B6E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92B750, asm, overlays/ovl_0092B750] @@ -11141,6 +12452,7 @@ start: 0x92B940 vram: 0x80A6B6A0 follows_vram: ovl_0092B750 + compress: True subsegments: - [0x92B940, data, overlays/ovl_0092B750_reloc] @@ -11149,6 +12461,7 @@ start: 0x92B970 vram: 0x80A6B6D0 follows_vram: ovl_0092B750_reloc + compress: True bss_size: 0x0 subsegments: - [0x92B970, asm, overlays/ovl_0092B970] @@ -11159,6 +12472,7 @@ start: 0x92BEB0 vram: 0x80A6BC10 follows_vram: ovl_0092B970 + compress: True subsegments: - [0x92BEB0, data, overlays/ovl_0092B970_reloc] @@ -11167,6 +12481,7 @@ start: 0x92BF20 vram: 0x80A6BC80 follows_vram: ovl_0092B970_reloc + compress: True bss_size: 0x0 subsegments: - [0x92BF20, data, overlays/ovl_0092BF20] @@ -11175,6 +12490,7 @@ start: 0x92BF70 vram: 0x80A6BCD0 follows_vram: ovl_0092BF20 + compress: True subsegments: - [0x92BF70, data, overlays/ovl_0092BF20_reloc] @@ -11183,6 +12499,7 @@ start: 0x92BF90 vram: 0x80A6BCF0 follows_vram: ovl_0092BF20_reloc + compress: True bss_size: 0x0 subsegments: - [0x92BF90, data, overlays/ovl_0092BF90] @@ -11191,6 +12508,7 @@ start: 0x92BFE0 vram: 0x80A6BD40 follows_vram: ovl_0092BF90 + compress: True subsegments: - [0x92BFE0, data, overlays/ovl_0092BF90_reloc] @@ -11199,6 +12517,7 @@ start: 0x92C000 vram: 0x80A6BD60 follows_vram: ovl_0092BF90_reloc + compress: True bss_size: 0x0 subsegments: - [0x92C000, data, overlays/ovl_0092C000] @@ -11207,6 +12526,7 @@ start: 0x92C050 vram: 0x80A6BDB0 follows_vram: ovl_0092C000 + compress: True subsegments: - [0x92C050, data, overlays/ovl_0092C000_reloc] @@ -11215,6 +12535,7 @@ start: 0x92C070 vram: 0x80A6BDD0 follows_vram: ovl_0092C000_reloc + compress: True bss_size: 0x0 subsegments: - [0x92C070, data, overlays/ovl_0092C070] @@ -11223,6 +12544,7 @@ start: 0x92C0C0 vram: 0x80A6BE20 follows_vram: ovl_0092C070 + compress: True subsegments: - [0x92C0C0, data, overlays/ovl_0092C070_reloc] @@ -11231,6 +12553,7 @@ start: 0x92C0E0 vram: 0x80A6BE40 follows_vram: ovl_0092C070_reloc + compress: True bss_size: 0x0 subsegments: - [0x92C0E0, data, overlays/ovl_0092C0E0] @@ -11239,6 +12562,7 @@ start: 0x92C130 vram: 0x80A6BE90 follows_vram: ovl_0092C0E0 + compress: True subsegments: - [0x92C130, data, overlays/ovl_0092C0E0_reloc] @@ -11247,6 +12571,7 @@ start: 0x92C150 vram: 0x80A6BEB0 follows_vram: ovl_0092C0E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92C150, data, overlays/ovl_0092C150] @@ -11255,6 +12580,7 @@ start: 0x92C1A0 vram: 0x80A6BF00 follows_vram: ovl_0092C150 + compress: True subsegments: - [0x92C1A0, data, overlays/ovl_0092C150_reloc] @@ -11263,6 +12589,7 @@ start: 0x92C1C0 vram: 0x80A6BF20 follows_vram: ovl_0092C150_reloc + compress: True bss_size: 0x0 subsegments: - [0x92C1C0, data, overlays/ovl_0092C1C0] @@ -11271,6 +12598,7 @@ start: 0x92C210 vram: 0x80A6BF70 follows_vram: ovl_0092C1C0 + compress: True subsegments: - [0x92C210, data, overlays/ovl_0092C1C0_reloc] @@ -11279,6 +12607,7 @@ start: 0x92C230 vram: 0x80A6BF90 follows_vram: ovl_0092C1C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92C230, asm, overlays/ovl_0092C230] @@ -11288,6 +12617,7 @@ start: 0x92C320 vram: 0x80A6C080 follows_vram: ovl_0092C230 + compress: True subsegments: - [0x92C320, data, overlays/ovl_0092C230_reloc] @@ -11296,6 +12626,7 @@ start: 0x92C340 vram: 0x80A6C0A0 follows_vram: ovl_0092C230_reloc + compress: True bss_size: 0x0 subsegments: - [0x92C340, data, overlays/ovl_0092C340] @@ -11304,6 +12635,7 @@ start: 0x92C390 vram: 0x80A6C0F0 follows_vram: ovl_0092C340 + compress: True subsegments: - [0x92C390, data, overlays/ovl_0092C340_reloc] @@ -11312,6 +12644,7 @@ start: 0x92C3B0 vram: 0x80A6C110 follows_vram: ovl_0092C340_reloc + compress: True bss_size: 0x0 subsegments: - [0x92C3B0, asm, overlays/ovl_0092C3B0] @@ -11321,6 +12654,7 @@ start: 0x92C4A0 vram: 0x80A6C200 follows_vram: ovl_0092C3B0 + compress: True subsegments: - [0x92C4A0, data, overlays/ovl_0092C3B0_reloc] @@ -11329,6 +12663,7 @@ start: 0x92C4C0 vram: 0x80A6C220 follows_vram: ovl_0092C3B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92C4C0, asm, overlays/ovl_0092C4C0] @@ -11338,6 +12673,7 @@ start: 0x92C820 vram: 0x80A6C580 follows_vram: ovl_0092C4C0 + compress: True subsegments: - [0x92C820, data, overlays/ovl_0092C4C0_reloc] @@ -11346,6 +12682,7 @@ start: 0x92C850 vram: 0x80A6C5B0 follows_vram: ovl_0092C4C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92C850, asm, overlays/ovl_0092C850] @@ -11355,6 +12692,7 @@ start: 0x92E960 vram: 0x80A6E6C0 follows_vram: ovl_0092C850 + compress: True subsegments: - [0x92E960, data, overlays/ovl_0092C850_reloc] @@ -11363,6 +12701,7 @@ start: 0x92EC40 vram: 0x80A6E9A0 follows_vram: ovl_0092C850_reloc + compress: True bss_size: 0x0 subsegments: - [0x92EC40, asm, overlays/ovl_0092EC40] @@ -11372,6 +12711,7 @@ start: 0x92EFA0 vram: 0x80A6ED00 follows_vram: ovl_0092EC40 + compress: True subsegments: - [0x92EFA0, data, overlays/ovl_0092EC40_reloc] @@ -11380,6 +12720,7 @@ start: 0x92EFD0 vram: 0x80A6ED30 follows_vram: ovl_0092EC40_reloc + compress: True bss_size: 0x0 subsegments: - [0x92EFD0, data, overlays/ovl_0092EFD0] @@ -11388,6 +12729,7 @@ start: 0x92F020 vram: 0x80A6ED80 follows_vram: ovl_0092EFD0 + compress: True subsegments: - [0x92F020, data, overlays/ovl_0092EFD0_reloc] @@ -11396,6 +12738,7 @@ start: 0x92F040 vram: 0x80A6EDA0 follows_vram: ovl_0092EFD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92F040, asm, overlays/ovl_0092F040] @@ -11405,6 +12748,7 @@ start: 0x92F3A0 vram: 0x80A6F100 follows_vram: ovl_0092F040 + compress: True subsegments: - [0x92F3A0, data, overlays/ovl_0092F040_reloc] @@ -11413,6 +12757,7 @@ start: 0x92F3D0 vram: 0x80A6F130 follows_vram: ovl_0092F040_reloc + compress: True bss_size: 0x0 subsegments: - [0x92F3D0, asm, overlays/ovl_0092F3D0] @@ -11422,6 +12767,7 @@ start: 0x92F730 vram: 0x80A6F490 follows_vram: ovl_0092F3D0 + compress: True subsegments: - [0x92F730, data, overlays/ovl_0092F3D0_reloc] @@ -11430,6 +12776,7 @@ start: 0x92F760 vram: 0x80A6F4C0 follows_vram: ovl_0092F3D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92F760, asm, overlays/ovl_0092F760] @@ -11439,6 +12786,7 @@ start: 0x92FAC0 vram: 0x80A6F820 follows_vram: ovl_0092F760 + compress: True subsegments: - [0x92FAC0, data, overlays/ovl_0092F760_reloc] @@ -11447,6 +12795,7 @@ start: 0x92FAF0 vram: 0x80A6F850 follows_vram: ovl_0092F760_reloc + compress: True bss_size: 0x0 subsegments: - [0x92FAF0, asm, overlays/ovl_0092FAF0] @@ -11456,6 +12805,7 @@ start: 0x92FE50 vram: 0x80A6FBB0 follows_vram: ovl_0092FAF0 + compress: True subsegments: - [0x92FE50, data, overlays/ovl_0092FAF0_reloc] @@ -11464,6 +12814,7 @@ start: 0x92FE80 vram: 0x80A6FBE0 follows_vram: ovl_0092FAF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x92FE80, asm, overlays/ovl_0092FE80] @@ -11473,6 +12824,7 @@ start: 0x9301E0 vram: 0x80A6FF40 follows_vram: ovl_0092FE80 + compress: True subsegments: - [0x9301E0, data, overlays/ovl_0092FE80_reloc] @@ -11481,6 +12833,7 @@ start: 0x930210 vram: 0x80A6FF70 follows_vram: ovl_0092FE80_reloc + compress: True bss_size: 0x0 subsegments: - [0x930210, asm, overlays/ovl_00930210] @@ -11490,6 +12843,7 @@ start: 0x930570 vram: 0x80A702D0 follows_vram: ovl_00930210 + compress: True subsegments: - [0x930570, data, overlays/ovl_00930210_reloc] @@ -11498,6 +12852,7 @@ start: 0x9305A0 vram: 0x80A70300 follows_vram: ovl_00930210_reloc + compress: True bss_size: 0x0 subsegments: - [0x9305A0, asm, overlays/ovl_009305A0] @@ -11507,6 +12862,7 @@ start: 0x930A60 vram: 0x80A707C0 follows_vram: ovl_009305A0 + compress: True subsegments: - [0x930A60, data, overlays/ovl_009305A0_reloc] @@ -11515,6 +12871,7 @@ start: 0x930A90 vram: 0x80A707F0 follows_vram: ovl_009305A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x930A90, data, overlays/ovl_00930A90] @@ -11523,6 +12880,7 @@ start: 0x930AE0 vram: 0x80A70840 follows_vram: ovl_00930A90 + compress: True subsegments: - [0x930AE0, data, overlays/ovl_00930A90_reloc] @@ -11531,6 +12889,7 @@ start: 0x930B00 vram: 0x80A70860 follows_vram: ovl_00930A90_reloc + compress: True bss_size: 0x0 subsegments: - [0x930B00, data, overlays/ovl_00930B00] @@ -11539,6 +12898,7 @@ start: 0x930B50 vram: 0x80A708B0 follows_vram: ovl_00930B00 + compress: True subsegments: - [0x930B50, data, overlays/ovl_00930B00_reloc] @@ -11547,6 +12907,7 @@ start: 0x930B70 vram: 0x80A708D0 follows_vram: ovl_00930B00_reloc + compress: True bss_size: 0x0 subsegments: - [0x930B70, asm, overlays/ovl_00930B70] @@ -11556,6 +12917,7 @@ start: 0x930ED0 vram: 0x80A70C30 follows_vram: ovl_00930B70 + compress: True subsegments: - [0x930ED0, data, overlays/ovl_00930B70_reloc] @@ -11564,6 +12926,7 @@ start: 0x930F00 vram: 0x80A70C60 follows_vram: ovl_00930B70_reloc + compress: True bss_size: 0x0 subsegments: - [0x930F00, asm, overlays/ovl_00930F00] @@ -11573,6 +12936,7 @@ start: 0x931260 vram: 0x80A70FC0 follows_vram: ovl_00930F00 + compress: True subsegments: - [0x931260, data, overlays/ovl_00930F00_reloc] @@ -11581,6 +12945,7 @@ start: 0x931290 vram: 0x80A70FF0 follows_vram: ovl_00930F00_reloc + compress: True bss_size: 0x0 subsegments: - [0x931290, asm, overlays/ovl_00931290] @@ -11590,6 +12955,7 @@ start: 0x9315F0 vram: 0x80A71350 follows_vram: ovl_00931290 + compress: True subsegments: - [0x9315F0, data, overlays/ovl_00931290_reloc] @@ -11598,6 +12964,7 @@ start: 0x931620 vram: 0x80A71380 follows_vram: ovl_00931290_reloc + compress: True bss_size: 0x0 subsegments: - [0x931620, asm, overlays/ovl_00931620] @@ -11607,6 +12974,7 @@ start: 0x931980 vram: 0x80A716E0 follows_vram: ovl_00931620 + compress: True subsegments: - [0x931980, data, overlays/ovl_00931620_reloc] @@ -11615,6 +12983,7 @@ start: 0x9319B0 vram: 0x80A71710 follows_vram: ovl_00931620_reloc + compress: True bss_size: 0x0 subsegments: - [0x9319B0, asm, overlays/ovl_009319B0] @@ -11624,6 +12993,7 @@ start: 0x931D10 vram: 0x80A71A70 follows_vram: ovl_009319B0 + compress: True subsegments: - [0x931D10, data, overlays/ovl_009319B0_reloc] @@ -11632,6 +13002,7 @@ start: 0x931D40 vram: 0x80A71AA0 follows_vram: ovl_009319B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x931D40, asm, overlays/ovl_00931D40] @@ -11642,6 +13013,7 @@ start: 0x932260 vram: 0x80A71FC0 follows_vram: ovl_00931D40 + compress: True subsegments: - [0x932260, data, overlays/ovl_00931D40_reloc] @@ -11650,6 +13022,7 @@ start: 0x9322F0 vram: 0x80A72050 follows_vram: ovl_00931D40_reloc + compress: True bss_size: 0x0 subsegments: - [0x9322F0, asm, overlays/ovl_009322F0] @@ -11660,6 +13033,7 @@ start: 0x932A50 vram: 0x80A727B0 follows_vram: ovl_009322F0 + compress: True subsegments: - [0x932A50, data, overlays/ovl_009322F0_reloc] @@ -11668,6 +13042,7 @@ start: 0x932AA0 vram: 0x80A72800 follows_vram: ovl_009322F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x932AA0, asm, overlays/ovl_00932AA0] @@ -11677,6 +13052,7 @@ start: 0x932B30 vram: 0x80A72890 follows_vram: ovl_00932AA0 + compress: True subsegments: - [0x932B30, data, overlays/ovl_00932AA0_reloc] @@ -11685,6 +13061,7 @@ start: 0x932B60 vram: 0x80A728C0 follows_vram: ovl_00932AA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x932B60, asm, overlays/ovl_00932B60] @@ -11694,6 +13071,7 @@ start: 0x933DB0 vram: 0x80A73B10 follows_vram: ovl_00932B60 + compress: True subsegments: - [0x933DB0, data, overlays/ovl_00932B60_reloc] @@ -11702,6 +13080,7 @@ start: 0x933F00 vram: 0x80A73C60 follows_vram: ovl_00932B60_reloc + compress: True bss_size: 0x0 subsegments: - [0x933F00, asm, overlays/ovl_00933F00] @@ -11711,6 +13090,7 @@ start: 0x934C40 vram: 0x80A749A0 follows_vram: ovl_00933F00 + compress: True subsegments: - [0x934C40, data, overlays/ovl_00933F00_reloc] @@ -11719,6 +13099,7 @@ start: 0x934D50 vram: 0x80A74AB0 follows_vram: ovl_00933F00_reloc + compress: True bss_size: 0x0 subsegments: - [0x934D50, asm, overlays/ovl_00934D50] @@ -11729,6 +13110,7 @@ start: 0x936310 vram: 0x80A76070 follows_vram: ovl_00934D50 + compress: True subsegments: - [0x936310, data, overlays/ovl_00934D50_reloc] @@ -11737,6 +13119,7 @@ start: 0x936470 vram: 0x80A761D0 follows_vram: ovl_00934D50_reloc + compress: True bss_size: 0x0 subsegments: - [0x936470, asm, overlays/ovl_00936470] @@ -11747,6 +13130,7 @@ start: 0x936B20 vram: 0x80A76880 follows_vram: ovl_00936470 + compress: True subsegments: - [0x936B20, data, overlays/ovl_00936470_reloc] @@ -11755,6 +13139,7 @@ start: 0x936BC0 vram: 0x80A76920 follows_vram: ovl_00936470_reloc + compress: True bss_size: 0x0 subsegments: - [0x936BC0, asm, overlays/ovl_00936BC0] @@ -11764,6 +13149,7 @@ start: 0x9370C0 vram: 0x80A76E20 follows_vram: ovl_00936BC0 + compress: True subsegments: - [0x9370C0, data, overlays/ovl_00936BC0_reloc] @@ -11772,6 +13158,7 @@ start: 0x937120 vram: 0x80A76E80 follows_vram: ovl_00936BC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x937120, asm, overlays/ovl_00937120] @@ -11782,6 +13169,7 @@ start: 0x937820 vram: 0x80A77580 follows_vram: ovl_00937120 + compress: True subsegments: - [0x937820, data, overlays/ovl_00937120_reloc] @@ -11790,6 +13178,7 @@ start: 0x9378C0 vram: 0x80A77620 follows_vram: ovl_00937120_reloc + compress: True bss_size: 0x0 subsegments: - [0x9378C0, asm, overlays/ovl_009378C0] @@ -11800,6 +13189,7 @@ start: 0x938EC0 vram: 0x80A78C20 follows_vram: ovl_009378C0 + compress: True subsegments: - [0x938EC0, data, overlays/ovl_009378C0_reloc] @@ -11808,6 +13198,7 @@ start: 0x939090 vram: 0x80A78DF0 follows_vram: ovl_009378C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x939090, data, overlays/ovl_00939090] @@ -11816,6 +13207,7 @@ start: 0x9390E0 vram: 0x80A78E40 follows_vram: ovl_00939090 + compress: True subsegments: - [0x9390E0, data, overlays/ovl_00939090_reloc] @@ -11824,6 +13216,7 @@ start: 0x939100 vram: 0x80A78E60 follows_vram: ovl_00939090_reloc + compress: True bss_size: 0x0 subsegments: - [0x939100, data, overlays/ovl_00939100] @@ -11832,6 +13225,7 @@ start: 0x939150 vram: 0x80A78EB0 follows_vram: ovl_00939100 + compress: True subsegments: - [0x939150, data, overlays/ovl_00939100_reloc] @@ -11840,6 +13234,7 @@ start: 0x939170 vram: 0x80A78ED0 follows_vram: ovl_00939100_reloc + compress: True bss_size: 0x0 subsegments: - [0x939170, data, overlays/ovl_00939170] @@ -11848,6 +13243,7 @@ start: 0x9391C0 vram: 0x80A78F20 follows_vram: ovl_00939170 + compress: True subsegments: - [0x9391C0, data, overlays/ovl_00939170_reloc] @@ -11856,6 +13252,7 @@ start: 0x9391E0 vram: 0x80A78F40 follows_vram: ovl_00939170_reloc + compress: True bss_size: 0x0 subsegments: - [0x9391E0, asm, overlays/ovl_009391E0] @@ -11865,6 +13262,7 @@ start: 0x9392C0 vram: 0x80A79020 follows_vram: ovl_009391E0 + compress: True subsegments: - [0x9392C0, data, overlays/ovl_009391E0_reloc] @@ -11873,6 +13271,7 @@ start: 0x9392F0 vram: 0x80A79050 follows_vram: ovl_009391E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9392F0, asm, overlays/ovl_009392F0] @@ -11882,6 +13281,7 @@ start: 0x9393D0 vram: 0x80A79130 follows_vram: ovl_009392F0 + compress: True subsegments: - [0x9393D0, data, overlays/ovl_009392F0_reloc] @@ -11890,6 +13290,7 @@ start: 0x939400 vram: 0x80A79160 follows_vram: ovl_009392F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x939400, asm, overlays/ovl_00939400] @@ -11899,6 +13300,7 @@ start: 0x9394E0 vram: 0x80A79240 follows_vram: ovl_00939400 + compress: True subsegments: - [0x9394E0, data, overlays/ovl_00939400_reloc] @@ -11907,6 +13309,7 @@ start: 0x939510 vram: 0x80A79270 follows_vram: ovl_00939400_reloc + compress: True bss_size: 0x0 subsegments: - [0x939510, data, overlays/ovl_00939510] @@ -11915,6 +13318,7 @@ start: 0x939560 vram: 0x80A792C0 follows_vram: ovl_00939510 + compress: True subsegments: - [0x939560, data, overlays/ovl_00939510_reloc] @@ -11923,6 +13327,7 @@ start: 0x939580 vram: 0x80A792E0 follows_vram: ovl_00939510_reloc + compress: True bss_size: 0x0 subsegments: - [0x939580, data, overlays/ovl_00939580] @@ -11931,6 +13336,7 @@ start: 0x9395D0 vram: 0x80A79330 follows_vram: ovl_00939580 + compress: True subsegments: - [0x9395D0, data, overlays/ovl_00939580_reloc] @@ -11939,6 +13345,7 @@ start: 0x9395F0 vram: 0x80A79350 follows_vram: ovl_00939580_reloc + compress: True bss_size: 0x0 subsegments: - [0x9395F0, asm, overlays/ovl_009395F0] @@ -11949,6 +13356,7 @@ start: 0x93A7D0 vram: 0x80A7A530 follows_vram: ovl_009395F0 + compress: True subsegments: - [0x93A7D0, data, overlays/ovl_009395F0_reloc] @@ -11957,6 +13365,7 @@ start: 0x93A8B0 vram: 0x80A7A610 follows_vram: ovl_009395F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93A8B0, data, overlays/ovl_0093A8B0] @@ -11965,6 +13374,7 @@ start: 0x93A900 vram: 0x80A7A660 follows_vram: ovl_0093A8B0 + compress: True subsegments: - [0x93A900, data, overlays/ovl_0093A8B0_reloc] @@ -11973,6 +13383,7 @@ start: 0x93A920 vram: 0x80A7A680 follows_vram: ovl_0093A8B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93A920, asm, overlays/ovl_0093A920] @@ -11983,6 +13394,7 @@ start: 0x93BBC0 vram: 0x80A7B920 follows_vram: ovl_0093A920 + compress: True subsegments: - [0x93BBC0, data, overlays/ovl_0093A920_reloc] @@ -11991,6 +13403,7 @@ start: 0x93BD70 vram: 0x80A7BAD0 follows_vram: ovl_0093A920_reloc + compress: True bss_size: 0x0 subsegments: - [0x93BD70, asm, overlays/ovl_0093BD70] @@ -12001,6 +13414,7 @@ start: 0x93BF40 vram: 0x80A7BCA0 follows_vram: ovl_0093BD70 + compress: True subsegments: - [0x93BF40, data, overlays/ovl_0093BD70_reloc] @@ -12009,6 +13423,7 @@ start: 0x93BF80 vram: 0x80A7BCE0 follows_vram: ovl_0093BD70_reloc + compress: True bss_size: 0x0 subsegments: - [0x93BF80, data, overlays/ovl_0093BF80] @@ -12017,6 +13432,7 @@ start: 0x93BFD0 vram: 0x80A7BD30 follows_vram: ovl_0093BF80 + compress: True subsegments: - [0x93BFD0, data, overlays/ovl_0093BF80_reloc] @@ -12025,6 +13441,7 @@ start: 0x93BFF0 vram: 0x80A7BD50 follows_vram: ovl_0093BF80_reloc + compress: True bss_size: 0x0 subsegments: - [0x93BFF0, data, overlays/ovl_0093BFF0] @@ -12033,6 +13450,7 @@ start: 0x93C040 vram: 0x80A7BDA0 follows_vram: ovl_0093BFF0 + compress: True subsegments: - [0x93C040, data, overlays/ovl_0093BFF0_reloc] @@ -12041,6 +13459,7 @@ start: 0x93C060 vram: 0x80A7BDC0 follows_vram: ovl_0093BFF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93C060, data, overlays/ovl_0093C060] @@ -12049,6 +13468,7 @@ start: 0x93C0B0 vram: 0x80A7BE10 follows_vram: ovl_0093C060 + compress: True subsegments: - [0x93C0B0, data, overlays/ovl_0093C060_reloc] @@ -12057,6 +13477,7 @@ start: 0x93C0D0 vram: 0x80A7BE30 follows_vram: ovl_0093C060_reloc + compress: True bss_size: 0x0 subsegments: - [0x93C0D0, asm, overlays/ovl_0093C0D0] @@ -12066,6 +13487,7 @@ start: 0x93C5A0 vram: 0x80A7C300 follows_vram: ovl_0093C0D0 + compress: True subsegments: - [0x93C5A0, data, overlays/ovl_0093C0D0_reloc] @@ -12074,6 +13496,7 @@ start: 0x93C5D0 vram: 0x80A7C330 follows_vram: ovl_0093C0D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93C5D0, asm, overlays/ovl_0093C5D0] @@ -12083,6 +13506,7 @@ start: 0x93CAA0 vram: 0x80A7C800 follows_vram: ovl_0093C5D0 + compress: True subsegments: - [0x93CAA0, data, overlays/ovl_0093C5D0_reloc] @@ -12091,6 +13515,7 @@ start: 0x93CAD0 vram: 0x80A7C830 follows_vram: ovl_0093C5D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93CAD0, asm, overlays/ovl_0093CAD0] @@ -12100,6 +13525,7 @@ start: 0x93CFA0 vram: 0x80A7CD00 follows_vram: ovl_0093CAD0 + compress: True subsegments: - [0x93CFA0, data, overlays/ovl_0093CAD0_reloc] @@ -12108,6 +13534,7 @@ start: 0x93CFD0 vram: 0x80A7CD30 follows_vram: ovl_0093CAD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93CFD0, asm, overlays/ovl_0093CFD0] @@ -12117,6 +13544,7 @@ start: 0x93D4A0 vram: 0x80A7D200 follows_vram: ovl_0093CFD0 + compress: True subsegments: - [0x93D4A0, data, overlays/ovl_0093CFD0_reloc] @@ -12125,6 +13553,7 @@ start: 0x93D4D0 vram: 0x80A7D230 follows_vram: ovl_0093CFD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93D4D0, data, overlays/ovl_0093D4D0] @@ -12133,6 +13562,7 @@ start: 0x93D520 vram: 0x80A7D280 follows_vram: ovl_0093D4D0 + compress: True subsegments: - [0x93D520, data, overlays/ovl_0093D4D0_reloc] @@ -12141,6 +13571,7 @@ start: 0x93D540 vram: 0x80A7D2A0 follows_vram: ovl_0093D4D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93D540, data, overlays/ovl_0093D540] @@ -12149,6 +13580,7 @@ start: 0x93D590 vram: 0x80A7D2F0 follows_vram: ovl_0093D540 + compress: True subsegments: - [0x93D590, data, overlays/ovl_0093D540_reloc] @@ -12157,6 +13589,7 @@ start: 0x93D5B0 vram: 0x80A7D310 follows_vram: ovl_0093D540_reloc + compress: True bss_size: 0x0 subsegments: - [0x93D5B0, data, overlays/ovl_0093D5B0] @@ -12165,6 +13598,7 @@ start: 0x93D600 vram: 0x80A7D360 follows_vram: ovl_0093D5B0 + compress: True subsegments: - [0x93D600, data, overlays/ovl_0093D5B0_reloc] @@ -12173,6 +13607,7 @@ start: 0x93D620 vram: 0x80A7D380 follows_vram: ovl_0093D5B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93D620, data, overlays/ovl_0093D620] @@ -12181,6 +13616,7 @@ start: 0x93D670 vram: 0x80A7D3D0 follows_vram: ovl_0093D620 + compress: True subsegments: - [0x93D670, data, overlays/ovl_0093D620_reloc] @@ -12189,6 +13625,7 @@ start: 0x93D690 vram: 0x80A7D3F0 follows_vram: ovl_0093D620_reloc + compress: True bss_size: 0x0 subsegments: - [0x93D690, data, overlays/ovl_0093D690] @@ -12197,6 +13634,7 @@ start: 0x93D6E0 vram: 0x80A7D440 follows_vram: ovl_0093D690 + compress: True subsegments: - [0x93D6E0, data, overlays/ovl_0093D690_reloc] @@ -12205,6 +13643,7 @@ start: 0x93D700 vram: 0x80A7D460 follows_vram: ovl_0093D690_reloc + compress: True bss_size: 0x0 subsegments: - [0x93D700, asm, overlays/ovl_0093D700] @@ -12214,6 +13653,7 @@ start: 0x93DBD0 vram: 0x80A7D930 follows_vram: ovl_0093D700 + compress: True subsegments: - [0x93DBD0, data, overlays/ovl_0093D700_reloc] @@ -12222,6 +13662,7 @@ start: 0x93DC00 vram: 0x80A7D960 follows_vram: ovl_0093D700_reloc + compress: True bss_size: 0x0 subsegments: - [0x93DC00, asm, overlays/ovl_0093DC00] @@ -12231,6 +13672,7 @@ start: 0x93E0D0 vram: 0x80A7DE30 follows_vram: ovl_0093DC00 + compress: True subsegments: - [0x93E0D0, data, overlays/ovl_0093DC00_reloc] @@ -12239,6 +13681,7 @@ start: 0x93E100 vram: 0x80A7DE60 follows_vram: ovl_0093DC00_reloc + compress: True bss_size: 0x0 subsegments: - [0x93E100, asm, overlays/ovl_0093E100] @@ -12248,6 +13691,7 @@ start: 0x93E5D0 vram: 0x80A7E330 follows_vram: ovl_0093E100 + compress: True subsegments: - [0x93E5D0, data, overlays/ovl_0093E100_reloc] @@ -12256,6 +13700,7 @@ start: 0x93E600 vram: 0x80A7E360 follows_vram: ovl_0093E100_reloc + compress: True bss_size: 0x0 subsegments: - [0x93E600, asm, overlays/ovl_0093E600] @@ -12265,6 +13710,7 @@ start: 0x93EAD0 vram: 0x80A7E830 follows_vram: ovl_0093E600 + compress: True subsegments: - [0x93EAD0, data, overlays/ovl_0093E600_reloc] @@ -12273,6 +13719,7 @@ start: 0x93EB00 vram: 0x80A7E860 follows_vram: ovl_0093E600_reloc + compress: True bss_size: 0x0 subsegments: - [0x93EB00, asm, overlays/ovl_0093EB00] @@ -12282,6 +13729,7 @@ start: 0x93EFD0 vram: 0x80A7ED30 follows_vram: ovl_0093EB00 + compress: True subsegments: - [0x93EFD0, data, overlays/ovl_0093EB00_reloc] @@ -12290,6 +13738,7 @@ start: 0x93F000 vram: 0x80A7ED60 follows_vram: ovl_0093EB00_reloc + compress: True bss_size: 0x0 subsegments: - [0x93F000, data, overlays/ovl_0093F000] @@ -12298,6 +13747,7 @@ start: 0x93F050 vram: 0x80A7EDB0 follows_vram: ovl_0093F000 + compress: True subsegments: - [0x93F050, data, overlays/ovl_0093F000_reloc] @@ -12306,6 +13756,7 @@ start: 0x93F070 vram: 0x80A7EDD0 follows_vram: ovl_0093F000_reloc + compress: True bss_size: 0x0 subsegments: - [0x93F070, data, overlays/ovl_0093F070] @@ -12314,6 +13765,7 @@ start: 0x93F0C0 vram: 0x80A7EE20 follows_vram: ovl_0093F070 + compress: True subsegments: - [0x93F0C0, data, overlays/ovl_0093F070_reloc] @@ -12322,6 +13774,7 @@ start: 0x93F0E0 vram: 0x80A7EE40 follows_vram: ovl_0093F070_reloc + compress: True bss_size: 0x0 subsegments: - [0x93F0E0, data, overlays/ovl_0093F0E0] @@ -12330,6 +13783,7 @@ start: 0x93F130 vram: 0x80A7EE90 follows_vram: ovl_0093F0E0 + compress: True subsegments: - [0x93F130, data, overlays/ovl_0093F0E0_reloc] @@ -12338,6 +13792,7 @@ start: 0x93F150 vram: 0x80A7EEB0 follows_vram: ovl_0093F0E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93F150, data, overlays/ovl_0093F150] @@ -12346,6 +13801,7 @@ start: 0x93F1A0 vram: 0x80A7EF00 follows_vram: ovl_0093F150 + compress: True subsegments: - [0x93F1A0, data, overlays/ovl_0093F150_reloc] @@ -12354,6 +13810,7 @@ start: 0x93F1C0 vram: 0x80A7EF20 follows_vram: ovl_0093F150_reloc + compress: True bss_size: 0x0 subsegments: - [0x93F1C0, data, overlays/ovl_0093F1C0] @@ -12362,6 +13819,7 @@ start: 0x93F210 vram: 0x80A7EF70 follows_vram: ovl_0093F1C0 + compress: True subsegments: - [0x93F210, data, overlays/ovl_0093F1C0_reloc] @@ -12370,6 +13828,7 @@ start: 0x93F230 vram: 0x80A7EF90 follows_vram: ovl_0093F1C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93F230, data, overlays/ovl_0093F230] @@ -12378,6 +13837,7 @@ start: 0x93F280 vram: 0x80A7EFE0 follows_vram: ovl_0093F230 + compress: True subsegments: - [0x93F280, data, overlays/ovl_0093F230_reloc] @@ -12386,6 +13846,7 @@ start: 0x93F2A0 vram: 0x80A7F000 follows_vram: ovl_0093F230_reloc + compress: True bss_size: 0x0 subsegments: - [0x93F2A0, data, overlays/ovl_0093F2A0] @@ -12394,6 +13855,7 @@ start: 0x93F2F0 vram: 0x80A7F050 follows_vram: ovl_0093F2A0 + compress: True subsegments: - [0x93F2F0, data, overlays/ovl_0093F2A0_reloc] @@ -12402,6 +13864,7 @@ start: 0x93F310 vram: 0x80A7F070 follows_vram: ovl_0093F2A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93F310, data, overlays/ovl_0093F310] @@ -12410,6 +13873,7 @@ start: 0x93F360 vram: 0x80A7F0C0 follows_vram: ovl_0093F310 + compress: True subsegments: - [0x93F360, data, overlays/ovl_0093F310_reloc] @@ -12418,6 +13882,7 @@ start: 0x93F380 vram: 0x80A7F0E0 follows_vram: ovl_0093F310_reloc + compress: True bss_size: 0x0 subsegments: - [0x93F380, asm, overlays/ovl_0093F380] @@ -12427,6 +13892,7 @@ start: 0x93F9A0 vram: 0x80A7F700 follows_vram: ovl_0093F380 + compress: True subsegments: - [0x93F9A0, data, overlays/ovl_0093F380_reloc] @@ -12435,6 +13901,7 @@ start: 0x93F9E0 vram: 0x80A7F740 follows_vram: ovl_0093F380_reloc + compress: True bss_size: 0x0 subsegments: - [0x93F9E0, data, overlays/ovl_0093F9E0] @@ -12443,6 +13910,7 @@ start: 0x93FA30 vram: 0x80A7F790 follows_vram: ovl_0093F9E0 + compress: True subsegments: - [0x93FA30, data, overlays/ovl_0093F9E0_reloc] @@ -12451,6 +13919,7 @@ start: 0x93FA50 vram: 0x80A7F7B0 follows_vram: ovl_0093F9E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93FA50, data, overlays/ovl_0093FA50] @@ -12459,6 +13928,7 @@ start: 0x93FAA0 vram: 0x80A7F800 follows_vram: ovl_0093FA50 + compress: True subsegments: - [0x93FAA0, data, overlays/ovl_0093FA50_reloc] @@ -12467,6 +13937,7 @@ start: 0x93FAC0 vram: 0x80A7F820 follows_vram: ovl_0093FA50_reloc + compress: True bss_size: 0x0 subsegments: - [0x93FAC0, data, overlays/ovl_0093FAC0] @@ -12475,6 +13946,7 @@ start: 0x93FB10 vram: 0x80A7F870 follows_vram: ovl_0093FAC0 + compress: True subsegments: - [0x93FB10, data, overlays/ovl_0093FAC0_reloc] @@ -12483,6 +13955,7 @@ start: 0x93FB30 vram: 0x80A7F890 follows_vram: ovl_0093FAC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93FB30, data, overlays/ovl_0093FB30] @@ -12491,6 +13964,7 @@ start: 0x93FB80 vram: 0x80A7F8E0 follows_vram: ovl_0093FB30 + compress: True subsegments: - [0x93FB80, data, overlays/ovl_0093FB30_reloc] @@ -12499,6 +13973,7 @@ start: 0x93FBA0 vram: 0x80A7F900 follows_vram: ovl_0093FB30_reloc + compress: True bss_size: 0x0 subsegments: - [0x93FBA0, data, overlays/ovl_0093FBA0] @@ -12507,6 +13982,7 @@ start: 0x93FBF0 vram: 0x80A7F950 follows_vram: ovl_0093FBA0 + compress: True subsegments: - [0x93FBF0, data, overlays/ovl_0093FBA0_reloc] @@ -12515,6 +13991,7 @@ start: 0x93FC10 vram: 0x80A7F970 follows_vram: ovl_0093FBA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x93FC10, asm, overlays/ovl_0093FC10] @@ -12525,6 +14002,7 @@ start: 0x9402F0 vram: 0x80A80050 follows_vram: ovl_0093FC10 + compress: True subsegments: - [0x9402F0, data, overlays/ovl_0093FC10_reloc] @@ -12533,6 +14011,7 @@ start: 0x940380 vram: 0x80A800E0 follows_vram: ovl_0093FC10_reloc + compress: True bss_size: 0x0 subsegments: - [0x940380, asm, overlays/ovl_00940380] @@ -12543,6 +14022,7 @@ start: 0x9419B0 vram: 0x80A81710 follows_vram: ovl_00940380 + compress: True subsegments: - [0x9419B0, data, overlays/ovl_00940380_reloc] @@ -12551,6 +14031,7 @@ start: 0x941B10 vram: 0x80A81870 follows_vram: ovl_00940380_reloc + compress: True bss_size: 0x0 subsegments: - [0x941B10, data, overlays/ovl_00941B10] @@ -12559,6 +14040,7 @@ start: 0x941B60 vram: 0x80A818C0 follows_vram: ovl_00941B10 + compress: True subsegments: - [0x941B60, data, overlays/ovl_00941B10_reloc] @@ -12567,6 +14049,7 @@ start: 0x941B80 vram: 0x80A818E0 follows_vram: ovl_00941B10_reloc + compress: True bss_size: 0x0 subsegments: - [0x941B80, data, overlays/ovl_00941B80] @@ -12575,6 +14058,7 @@ start: 0x941BD0 vram: 0x80A81930 follows_vram: ovl_00941B80 + compress: True subsegments: - [0x941BD0, data, overlays/ovl_00941B80_reloc] @@ -12583,6 +14067,7 @@ start: 0x941BF0 vram: 0x80A81950 follows_vram: ovl_00941B80_reloc + compress: True bss_size: 0x0 subsegments: - [0x941BF0, asm, overlays/ovl_00941BF0] @@ -12593,6 +14078,7 @@ start: 0x9427D0 vram: 0x80A82530 follows_vram: ovl_00941BF0 + compress: True subsegments: - [0x9427D0, data, overlays/ovl_00941BF0_reloc] @@ -12601,6 +14087,7 @@ start: 0x9428A0 vram: 0x80A82600 follows_vram: ovl_00941BF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9428A0, asm, overlays/ovl_009428A0] @@ -12611,6 +14098,7 @@ start: 0x942E50 vram: 0x80A82BB0 follows_vram: ovl_009428A0 + compress: True subsegments: - [0x942E50, data, overlays/ovl_009428A0_reloc] @@ -12619,6 +14107,7 @@ start: 0x942EE0 vram: 0x80A82C40 follows_vram: ovl_009428A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x942EE0, data, overlays/ovl_00942EE0] @@ -12627,6 +14116,7 @@ start: 0x942F30 vram: 0x80A82C90 follows_vram: ovl_00942EE0 + compress: True subsegments: - [0x942F30, data, overlays/ovl_00942EE0_reloc] @@ -12635,6 +14125,7 @@ start: 0x942F50 vram: 0x80A82CB0 follows_vram: ovl_00942EE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x942F50, data, overlays/ovl_00942F50] @@ -12643,6 +14134,7 @@ start: 0x942FA0 vram: 0x80A82D00 follows_vram: ovl_00942F50 + compress: True subsegments: - [0x942FA0, data, overlays/ovl_00942F50_reloc] @@ -12651,6 +14143,7 @@ start: 0x942FC0 vram: 0x80A82D20 follows_vram: ovl_00942F50_reloc + compress: True bss_size: 0x0 subsegments: - [0x942FC0, data, overlays/ovl_00942FC0] @@ -12659,6 +14152,7 @@ start: 0x943010 vram: 0x80A82D70 follows_vram: ovl_00942FC0 + compress: True subsegments: - [0x943010, data, overlays/ovl_00942FC0_reloc] @@ -12667,6 +14161,7 @@ start: 0x943030 vram: 0x80A82D90 follows_vram: ovl_00942FC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x943030, data, overlays/ovl_00943030] @@ -12675,6 +14170,7 @@ start: 0x943080 vram: 0x80A82DE0 follows_vram: ovl_00943030 + compress: True subsegments: - [0x943080, data, overlays/ovl_00943030_reloc] @@ -12683,6 +14179,7 @@ start: 0x9430A0 vram: 0x80A82E00 follows_vram: ovl_00943030_reloc + compress: True bss_size: 0x0 subsegments: - [0x9430A0, data, overlays/ovl_009430A0] @@ -12691,6 +14188,7 @@ start: 0x9430F0 vram: 0x80A82E50 follows_vram: ovl_009430A0 + compress: True subsegments: - [0x9430F0, data, overlays/ovl_009430A0_reloc] @@ -12699,6 +14197,7 @@ start: 0x943110 vram: 0x80A82E70 follows_vram: ovl_009430A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x943110, data, overlays/ovl_00943110] @@ -12707,6 +14206,7 @@ start: 0x943160 vram: 0x80A82EC0 follows_vram: ovl_00943110 + compress: True subsegments: - [0x943160, data, overlays/ovl_00943110_reloc] @@ -12715,6 +14215,7 @@ start: 0x943180 vram: 0x80A82EE0 follows_vram: ovl_00943110_reloc + compress: True bss_size: 0x0 subsegments: - [0x943180, data, overlays/ovl_00943180] @@ -12723,6 +14224,7 @@ start: 0x9431D0 vram: 0x80A82F30 follows_vram: ovl_00943180 + compress: True subsegments: - [0x9431D0, data, overlays/ovl_00943180_reloc] @@ -12731,6 +14233,7 @@ start: 0x9431F0 vram: 0x80A82F50 follows_vram: ovl_00943180_reloc + compress: True bss_size: 0x0 subsegments: - [0x9431F0, data, overlays/ovl_009431F0] @@ -12739,6 +14242,7 @@ start: 0x943240 vram: 0x80A82FA0 follows_vram: ovl_009431F0 + compress: True subsegments: - [0x943240, data, overlays/ovl_009431F0_reloc] @@ -12747,6 +14251,7 @@ start: 0x943260 vram: 0x80A82FC0 follows_vram: ovl_009431F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x943260, data, overlays/ovl_00943260] @@ -12755,6 +14260,7 @@ start: 0x9432B0 vram: 0x80A83010 follows_vram: ovl_00943260 + compress: True subsegments: - [0x9432B0, data, overlays/ovl_00943260_reloc] @@ -12763,6 +14269,7 @@ start: 0x9432D0 vram: 0x80A83030 follows_vram: ovl_00943260_reloc + compress: True bss_size: 0x0 subsegments: - [0x9432D0, data, overlays/ovl_009432D0] @@ -12771,6 +14278,7 @@ start: 0x943320 vram: 0x80A83080 follows_vram: ovl_009432D0 + compress: True subsegments: - [0x943320, data, overlays/ovl_009432D0_reloc] @@ -12779,6 +14287,7 @@ start: 0x943340 vram: 0x80A830A0 follows_vram: ovl_009432D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x943340, data, overlays/ovl_00943340] @@ -12787,6 +14296,7 @@ start: 0x943390 vram: 0x80A830F0 follows_vram: ovl_00943340 + compress: True subsegments: - [0x943390, data, overlays/ovl_00943340_reloc] @@ -12795,6 +14305,7 @@ start: 0x9433B0 vram: 0x80A83110 follows_vram: ovl_00943340_reloc + compress: True bss_size: 0x0 subsegments: - [0x9433B0, data, overlays/ovl_009433B0] @@ -12803,6 +14314,7 @@ start: 0x943400 vram: 0x80A83160 follows_vram: ovl_009433B0 + compress: True subsegments: - [0x943400, data, overlays/ovl_009433B0_reloc] @@ -12811,6 +14323,7 @@ start: 0x943420 vram: 0x80A83180 follows_vram: ovl_009433B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x943420, data, overlays/ovl_00943420] @@ -12819,6 +14332,7 @@ start: 0x943470 vram: 0x80A831D0 follows_vram: ovl_00943420 + compress: True subsegments: - [0x943470, data, overlays/ovl_00943420_reloc] @@ -12827,6 +14341,7 @@ start: 0x943490 vram: 0x80A831F0 follows_vram: ovl_00943420_reloc + compress: True bss_size: 0x0 subsegments: - [0x943490, data, overlays/ovl_00943490] @@ -12835,6 +14350,7 @@ start: 0x9434E0 vram: 0x80A83240 follows_vram: ovl_00943490 + compress: True subsegments: - [0x9434E0, data, overlays/ovl_00943490_reloc] @@ -12843,6 +14359,7 @@ start: 0x943500 vram: 0x80A83260 follows_vram: ovl_00943490_reloc + compress: True bss_size: 0x0 subsegments: - [0x943500, data, overlays/ovl_00943500] @@ -12851,6 +14368,7 @@ start: 0x943550 vram: 0x80A832B0 follows_vram: ovl_00943500 + compress: True subsegments: - [0x943550, data, overlays/ovl_00943500_reloc] @@ -12859,6 +14377,7 @@ start: 0x943570 vram: 0x80A832D0 follows_vram: ovl_00943500_reloc + compress: True bss_size: 0x0 subsegments: - [0x943570, data, overlays/ovl_00943570] @@ -12867,6 +14386,7 @@ start: 0x9435C0 vram: 0x80A83320 follows_vram: ovl_00943570 + compress: True subsegments: - [0x9435C0, data, overlays/ovl_00943570_reloc] @@ -12875,6 +14395,7 @@ start: 0x9435E0 vram: 0x80A83340 follows_vram: ovl_00943570_reloc + compress: True bss_size: 0x0 subsegments: - [0x9435E0, data, overlays/ovl_009435E0] @@ -12883,6 +14404,7 @@ start: 0x943630 vram: 0x80A83390 follows_vram: ovl_009435E0 + compress: True subsegments: - [0x943630, data, overlays/ovl_009435E0_reloc] @@ -12891,6 +14413,7 @@ start: 0x943650 vram: 0x80A833B0 follows_vram: ovl_009435E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x943650, data, overlays/ovl_00943650] @@ -12899,6 +14422,7 @@ start: 0x9436A0 vram: 0x80A83400 follows_vram: ovl_00943650 + compress: True subsegments: - [0x9436A0, data, overlays/ovl_00943650_reloc] @@ -12907,6 +14431,7 @@ start: 0x9436C0 vram: 0x80A83420 follows_vram: ovl_00943650_reloc + compress: True bss_size: 0x0 subsegments: - [0x9436C0, data, overlays/ovl_009436C0] @@ -12915,6 +14440,7 @@ start: 0x943710 vram: 0x80A83470 follows_vram: ovl_009436C0 + compress: True subsegments: - [0x943710, data, overlays/ovl_009436C0_reloc] @@ -12923,6 +14449,7 @@ start: 0x943730 vram: 0x80A83490 follows_vram: ovl_009436C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x943730, data, overlays/ovl_00943730] @@ -12931,6 +14458,7 @@ start: 0x943780 vram: 0x80A834E0 follows_vram: ovl_00943730 + compress: True subsegments: - [0x943780, data, overlays/ovl_00943730_reloc] @@ -12939,6 +14467,7 @@ start: 0x9437A0 vram: 0x80A83500 follows_vram: ovl_00943730_reloc + compress: True bss_size: 0x0 subsegments: - [0x9437A0, data, overlays/ovl_009437A0] @@ -12947,6 +14476,7 @@ start: 0x9437F0 vram: 0x80A83550 follows_vram: ovl_009437A0 + compress: True subsegments: - [0x9437F0, data, overlays/ovl_009437A0_reloc] @@ -12955,6 +14485,7 @@ start: 0x943810 vram: 0x80A83570 follows_vram: ovl_009437A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x943810, data, overlays/ovl_00943810] @@ -12963,6 +14494,7 @@ start: 0x943860 vram: 0x80A835C0 follows_vram: ovl_00943810 + compress: True subsegments: - [0x943860, data, overlays/ovl_00943810_reloc] @@ -12971,6 +14503,7 @@ start: 0x943880 vram: 0x80A835E0 follows_vram: ovl_00943810_reloc + compress: True bss_size: 0x0 subsegments: - [0x943880, data, overlays/ovl_00943880] @@ -12979,6 +14512,7 @@ start: 0x9438D0 vram: 0x80A83630 follows_vram: ovl_00943880 + compress: True subsegments: - [0x9438D0, data, overlays/ovl_00943880_reloc] @@ -12987,6 +14521,7 @@ start: 0x9438F0 vram: 0x80A83650 follows_vram: ovl_00943880_reloc + compress: True bss_size: 0x0 subsegments: - [0x9438F0, data, overlays/ovl_009438F0] @@ -12995,6 +14530,7 @@ start: 0x943940 vram: 0x80A836A0 follows_vram: ovl_009438F0 + compress: True subsegments: - [0x943940, data, overlays/ovl_009438F0_reloc] @@ -13003,6 +14539,7 @@ start: 0x943960 vram: 0x80A836C0 follows_vram: ovl_009438F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x943960, asm, overlays/ovl_00943960] @@ -13013,6 +14550,7 @@ start: 0x9448A0 vram: 0x80A84600 follows_vram: ovl_00943960 + compress: True subsegments: - [0x9448A0, data, overlays/ovl_00943960_reloc] @@ -13021,6 +14559,7 @@ start: 0x944930 vram: 0x80A84690 follows_vram: ovl_00943960_reloc + compress: True bss_size: 0x0 subsegments: - [0x944930, data, overlays/ovl_00944930] @@ -13029,6 +14568,7 @@ start: 0x944980 vram: 0x80A846E0 follows_vram: ovl_00944930 + compress: True subsegments: - [0x944980, data, overlays/ovl_00944930_reloc] @@ -13037,6 +14577,7 @@ start: 0x9449A0 vram: 0x80A84700 follows_vram: ovl_00944930_reloc + compress: True bss_size: 0x0 subsegments: - [0x9449A0, data, overlays/ovl_009449A0] @@ -13045,6 +14586,7 @@ start: 0x9449F0 vram: 0x80A84750 follows_vram: ovl_009449A0 + compress: True subsegments: - [0x9449F0, data, overlays/ovl_009449A0_reloc] @@ -13053,6 +14595,7 @@ start: 0x944A10 vram: 0x80A84770 follows_vram: ovl_009449A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x944A10, data, overlays/ovl_00944A10] @@ -13061,6 +14604,7 @@ start: 0x944A60 vram: 0x80A847C0 follows_vram: ovl_00944A10 + compress: True subsegments: - [0x944A60, data, overlays/ovl_00944A10_reloc] @@ -13069,6 +14613,7 @@ start: 0x944A80 vram: 0x80A847E0 follows_vram: ovl_00944A10_reloc + compress: True bss_size: 0x0 subsegments: - [0x944A80, data, overlays/ovl_00944A80] @@ -13077,6 +14622,7 @@ start: 0x944AD0 vram: 0x80A84830 follows_vram: ovl_00944A80 + compress: True subsegments: - [0x944AD0, data, overlays/ovl_00944A80_reloc] @@ -13085,6 +14631,7 @@ start: 0x944AF0 vram: 0x80A84850 follows_vram: ovl_00944A80_reloc + compress: True bss_size: 0x0 subsegments: - [0x944AF0, data, overlays/ovl_00944AF0] @@ -13093,6 +14640,7 @@ start: 0x944B40 vram: 0x80A848A0 follows_vram: ovl_00944AF0 + compress: True subsegments: - [0x944B40, data, overlays/ovl_00944AF0_reloc] @@ -13101,6 +14649,7 @@ start: 0x944B60 vram: 0x80A848C0 follows_vram: ovl_00944AF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x944B60, asm, overlays/ovl_00944B60] @@ -13110,6 +14659,7 @@ start: 0x944C40 vram: 0x80A849A0 follows_vram: ovl_00944B60 + compress: True subsegments: - [0x944C40, data, overlays/ovl_00944B60_reloc] @@ -13118,6 +14668,7 @@ start: 0x944C70 vram: 0x80A849D0 follows_vram: ovl_00944B60_reloc + compress: True bss_size: 0x0 subsegments: - [0x944C70, asm, overlays/ovl_00944C70] @@ -13127,6 +14678,7 @@ start: 0x944D50 vram: 0x80A84AB0 follows_vram: ovl_00944C70 + compress: True subsegments: - [0x944D50, data, overlays/ovl_00944C70_reloc] @@ -13135,6 +14687,7 @@ start: 0x944D80 vram: 0x80A84AE0 follows_vram: ovl_00944C70_reloc + compress: True bss_size: 0x0 subsegments: - [0x944D80, asm, overlays/ovl_00944D80] @@ -13144,6 +14697,7 @@ start: 0x944E60 vram: 0x80A84BC0 follows_vram: ovl_00944D80 + compress: True subsegments: - [0x944E60, data, overlays/ovl_00944D80_reloc] @@ -13152,6 +14706,7 @@ start: 0x944E90 vram: 0x80A84BF0 follows_vram: ovl_00944D80_reloc + compress: True bss_size: 0x10 subsegments: - [0x944E90, asm, overlays/ovl_00944E90] @@ -13163,6 +14718,7 @@ start: 0x945A20 vram: 0x80A85790 follows_vram: ovl_00944E90 + compress: True subsegments: - [0x945A20, data, overlays/ovl_00944E90_reloc] @@ -13171,6 +14727,7 @@ start: 0x945B10 vram: 0x80A85880 follows_vram: ovl_00944E90_reloc + compress: True bss_size: 0x0 subsegments: - [0x945B10, asm, overlays/ovl_00945B10] @@ -13181,6 +14738,7 @@ start: 0x9467E0 vram: 0x80A86550 follows_vram: ovl_00945B10 + compress: True subsegments: - [0x9467E0, data, overlays/ovl_00945B10_reloc] @@ -13189,6 +14747,7 @@ start: 0x946900 vram: 0x80A86670 follows_vram: ovl_00945B10_reloc + compress: True bss_size: 0x0 subsegments: - [0x946900, asm, overlays/ovl_00946900] @@ -13198,6 +14757,7 @@ start: 0x9473F0 vram: 0x80A87160 follows_vram: ovl_00946900 + compress: True subsegments: - [0x9473F0, data, overlays/ovl_00946900_reloc] @@ -13206,6 +14766,7 @@ start: 0x9474F0 vram: 0x80A87260 follows_vram: ovl_00946900_reloc + compress: True bss_size: 0x10 subsegments: - [0x9474F0, asm, overlays/ovl_009474F0] @@ -13217,6 +14778,7 @@ start: 0x948850 vram: 0x80A885D0 follows_vram: ovl_009474F0 + compress: True subsegments: - [0x948850, data, overlays/ovl_009474F0_reloc] @@ -13225,6 +14787,7 @@ start: 0x948A20 vram: 0x80A887A0 follows_vram: ovl_009474F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x948A20, asm, overlays/ovl_00948A20] @@ -13234,6 +14797,7 @@ start: 0x949A90 vram: 0x80A89810 follows_vram: ovl_00948A20 + compress: True subsegments: - [0x949A90, data, overlays/ovl_00948A20_reloc] @@ -13242,6 +14806,7 @@ start: 0x949BE0 vram: 0x80A89960 follows_vram: ovl_00948A20_reloc + compress: True bss_size: 0x0 subsegments: - [0x949BE0, asm, overlays/ovl_00949BE0] @@ -13251,6 +14816,7 @@ start: 0x94B350 vram: 0x80A8B0D0 follows_vram: ovl_00949BE0 + compress: True subsegments: - [0x94B350, data, overlays/ovl_00949BE0_reloc] @@ -13259,6 +14825,7 @@ start: 0x94B4B0 vram: 0x80A8B230 follows_vram: ovl_00949BE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x94B4B0, asm, overlays/ovl_0094B4B0] @@ -13268,6 +14835,7 @@ start: 0x94BF40 vram: 0x80A8BCC0 follows_vram: ovl_0094B4B0 + compress: True subsegments: - [0x94BF40, data, overlays/ovl_0094B4B0_reloc] @@ -13276,6 +14844,7 @@ start: 0x94BFD0 vram: 0x80A8BD50 follows_vram: ovl_0094B4B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x94BFD0, asm, overlays/ovl_0094BFD0] @@ -13286,6 +14855,7 @@ start: 0x94D850 vram: 0x80A8D5D0 follows_vram: ovl_0094BFD0 + compress: True subsegments: - [0x94D850, data, overlays/ovl_0094BFD0_reloc] @@ -13294,6 +14864,7 @@ start: 0x94D920 vram: 0x80A8D6A0 follows_vram: ovl_0094BFD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x94D920, asm, overlays/ovl_0094D920] @@ -13304,6 +14875,7 @@ start: 0x94EF80 vram: 0x80A8ED00 follows_vram: ovl_0094D920 + compress: True subsegments: - [0x94EF80, data, overlays/ovl_0094D920_reloc] @@ -13312,6 +14884,7 @@ start: 0x94F170 vram: 0x80A8EEF0 follows_vram: ovl_0094D920_reloc + compress: True bss_size: 0x0 subsegments: - [0x94F170, asm, overlays/ovl_0094F170] @@ -13321,6 +14894,7 @@ start: 0x94F520 vram: 0x80A8F2A0 follows_vram: ovl_0094F170 + compress: True subsegments: - [0x94F520, data, overlays/ovl_0094F170_reloc] @@ -13329,6 +14903,7 @@ start: 0x94F570 vram: 0x80A8F2F0 follows_vram: ovl_0094F170_reloc + compress: True bss_size: 0x0 subsegments: - [0x94F570, asm, overlays/ovl_0094F570] @@ -13338,6 +14913,7 @@ start: 0x94F9C0 vram: 0x80A8F740 follows_vram: ovl_0094F570 + compress: True subsegments: - [0x94F9C0, data, overlays/ovl_0094F570_reloc] @@ -13346,6 +14922,7 @@ start: 0x94FA20 vram: 0x80A8F7A0 follows_vram: ovl_0094F570_reloc + compress: True bss_size: 0x0 subsegments: - [0x94FA20, asm, overlays/ovl_0094FA20] @@ -13355,6 +14932,7 @@ start: 0x94FB00 vram: 0x80A8F880 follows_vram: ovl_0094FA20 + compress: True subsegments: - [0x94FB00, data, overlays/ovl_0094FA20_reloc] @@ -13363,6 +14941,7 @@ start: 0x94FB30 vram: 0x80A8F8B0 follows_vram: ovl_0094FA20_reloc + compress: True bss_size: 0x0 subsegments: - [0x94FB30, asm, overlays/ovl_0094FB30] @@ -13372,6 +14951,7 @@ start: 0x94FC10 vram: 0x80A8F990 follows_vram: ovl_0094FB30 + compress: True subsegments: - [0x94FC10, data, overlays/ovl_0094FB30_reloc] @@ -13380,6 +14960,7 @@ start: 0x94FC40 vram: 0x80A8F9C0 follows_vram: ovl_0094FB30_reloc + compress: True bss_size: 0x0 subsegments: - [0x94FC40, asm, overlays/ovl_0094FC40] @@ -13389,6 +14970,7 @@ start: 0x94FD20 vram: 0x80A8FAA0 follows_vram: ovl_0094FC40 + compress: True subsegments: - [0x94FD20, data, overlays/ovl_0094FC40_reloc] @@ -13397,6 +14979,7 @@ start: 0x94FD50 vram: 0x80A8FAD0 follows_vram: ovl_0094FC40_reloc + compress: True bss_size: 0x0 subsegments: - [0x94FD50, asm, overlays/ovl_0094FD50] @@ -13406,6 +14989,7 @@ start: 0x94FE30 vram: 0x80A8FBB0 follows_vram: ovl_0094FD50 + compress: True subsegments: - [0x94FE30, data, overlays/ovl_0094FD50_reloc] @@ -13414,6 +14998,7 @@ start: 0x94FE60 vram: 0x80A8FBE0 follows_vram: ovl_0094FD50_reloc + compress: True bss_size: 0x0 subsegments: - [0x94FE60, asm, overlays/ovl_0094FE60] @@ -13423,6 +15008,7 @@ start: 0x94FF40 vram: 0x80A8FCC0 follows_vram: ovl_0094FE60 + compress: True subsegments: - [0x94FF40, data, overlays/ovl_0094FE60_reloc] @@ -13431,6 +15017,7 @@ start: 0x94FF70 vram: 0x80A8FCF0 follows_vram: ovl_0094FE60_reloc + compress: True bss_size: 0x10 subsegments: - [0x94FF70, asm, overlays/ovl_0094FF70] @@ -13442,6 +15029,7 @@ start: 0x950C50 vram: 0x80A909E0 follows_vram: ovl_0094FF70 + compress: True subsegments: - [0x950C50, data, overlays/ovl_0094FF70_reloc] @@ -13450,6 +15038,7 @@ start: 0x950DE0 vram: 0x80A90B70 follows_vram: ovl_0094FF70_reloc + compress: True bss_size: 0x0 subsegments: - [0x950DE0, asm, overlays/ovl_00950DE0] @@ -13460,6 +15049,7 @@ start: 0x951960 vram: 0x80A916F0 follows_vram: ovl_00950DE0 + compress: True subsegments: - [0x951960, data, overlays/ovl_00950DE0_reloc] @@ -13468,6 +15058,7 @@ start: 0x951A70 vram: 0x80A91800 follows_vram: ovl_00950DE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x951A70, asm, overlays/ovl_00951A70] @@ -13478,6 +15069,7 @@ start: 0x951CC0 vram: 0x80A91A50 follows_vram: ovl_00951A70 + compress: True subsegments: - [0x951CC0, data, overlays/ovl_00951A70_reloc] @@ -13486,6 +15078,7 @@ start: 0x951D10 vram: 0x80A91AA0 follows_vram: ovl_00951A70_reloc + compress: True bss_size: 0x0 subsegments: - [0x951D10, asm, overlays/ovl_00951D10] @@ -13495,6 +15088,7 @@ start: 0x952670 vram: 0x80A92400 follows_vram: ovl_00951D10 + compress: True subsegments: - [0x952670, data, overlays/ovl_00951D10_reloc] @@ -13503,6 +15097,7 @@ start: 0x952730 vram: 0x80A924C0 follows_vram: ovl_00951D10_reloc + compress: True bss_size: 0x0 subsegments: - [0x952730, asm, overlays/ovl_00952730] @@ -13513,6 +15108,7 @@ start: 0x9536E0 vram: 0x80A93470 follows_vram: ovl_00952730 + compress: True subsegments: - [0x9536E0, data, overlays/ovl_00952730_reloc] @@ -13521,6 +15117,7 @@ start: 0x9537E0 vram: 0x80A93570 follows_vram: ovl_00952730_reloc + compress: True bss_size: 0x0 subsegments: - [0x9537E0, asm, overlays/ovl_009537E0] @@ -13530,6 +15127,7 @@ start: 0x953D70 vram: 0x80A93B00 follows_vram: ovl_009537E0 + compress: True subsegments: - [0x953D70, data, overlays/ovl_009537E0_reloc] @@ -13538,6 +15136,7 @@ start: 0x953DE0 vram: 0x80A93B70 follows_vram: ovl_009537E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x953DE0, data, overlays/ovl_00953DE0] @@ -13546,6 +15145,7 @@ start: 0x953E30 vram: 0x80A93BC0 follows_vram: ovl_00953DE0 + compress: True subsegments: - [0x953E30, data, overlays/ovl_00953DE0_reloc] @@ -13554,6 +15154,7 @@ start: 0x953E50 vram: 0x80A93BE0 follows_vram: ovl_00953DE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x953E50, data, overlays/ovl_00953E50] @@ -13562,6 +15163,7 @@ start: 0x953EA0 vram: 0x80A93C30 follows_vram: ovl_00953E50 + compress: True subsegments: - [0x953EA0, data, overlays/ovl_00953E50_reloc] @@ -13570,6 +15172,7 @@ start: 0x953EC0 vram: 0x80A93C50 follows_vram: ovl_00953E50_reloc + compress: True bss_size: 0x0 subsegments: - [0x953EC0, data, overlays/ovl_00953EC0] @@ -13578,6 +15181,7 @@ start: 0x953F10 vram: 0x80A93CA0 follows_vram: ovl_00953EC0 + compress: True subsegments: - [0x953F10, data, overlays/ovl_00953EC0_reloc] @@ -13586,6 +15190,7 @@ start: 0x953F30 vram: 0x80A93CC0 follows_vram: ovl_00953EC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x953F30, asm, overlays/ovl_00953F30] @@ -13596,6 +15201,7 @@ start: 0x954C50 vram: 0x80A949E0 follows_vram: ovl_00953F30 + compress: True subsegments: - [0x954C50, data, overlays/ovl_00953F30_reloc] @@ -13604,6 +15210,7 @@ start: 0x954D30 vram: 0x80A94AC0 follows_vram: ovl_00953F30_reloc + compress: True bss_size: 0x0 subsegments: - [0x954D30, asm, overlays/ovl_00954D30] @@ -13614,6 +15221,7 @@ start: 0x9563E0 vram: 0x80A96170 follows_vram: ovl_00954D30 + compress: True subsegments: - [0x9563E0, data, overlays/ovl_00954D30_reloc] @@ -13622,6 +15230,7 @@ start: 0x956630 vram: 0x80A963C0 follows_vram: ovl_00954D30_reloc + compress: True bss_size: 0x0 subsegments: - [0x956630, asm, overlays/ovl_00956630] @@ -13631,6 +15240,7 @@ start: 0x956830 vram: 0x80A965C0 follows_vram: ovl_00956630 + compress: True subsegments: - [0x956830, data, overlays/ovl_00956630_reloc] @@ -13639,6 +15249,7 @@ start: 0x956870 vram: 0x80A96600 follows_vram: ovl_00956630_reloc + compress: True bss_size: 0x0 subsegments: - [0x956870, data, overlays/ovl_00956870] @@ -13647,6 +15258,7 @@ start: 0x9568C0 vram: 0x80A96650 follows_vram: ovl_00956870 + compress: True subsegments: - [0x9568C0, data, overlays/ovl_00956870_reloc] @@ -13655,6 +15267,7 @@ start: 0x9568E0 vram: 0x80A96670 follows_vram: ovl_00956870_reloc + compress: True bss_size: 0x0 subsegments: - [0x9568E0, data, overlays/ovl_009568E0] @@ -13663,6 +15276,7 @@ start: 0x956930 vram: 0x80A966C0 follows_vram: ovl_009568E0 + compress: True subsegments: - [0x956930, data, overlays/ovl_009568E0_reloc] @@ -13671,6 +15285,7 @@ start: 0x956950 vram: 0x80A966E0 follows_vram: ovl_009568E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x956950, data, overlays/ovl_00956950] @@ -13679,6 +15294,7 @@ start: 0x9569A0 vram: 0x80A96730 follows_vram: ovl_00956950 + compress: True subsegments: - [0x9569A0, data, overlays/ovl_00956950_reloc] @@ -13687,6 +15303,7 @@ start: 0x9569C0 vram: 0x80A96750 follows_vram: ovl_00956950_reloc + compress: True bss_size: 0x0 subsegments: - [0x9569C0, data, overlays/ovl_009569C0] @@ -13695,6 +15312,7 @@ start: 0x956A10 vram: 0x80A967A0 follows_vram: ovl_009569C0 + compress: True subsegments: - [0x956A10, data, overlays/ovl_009569C0_reloc] @@ -13703,6 +15321,7 @@ start: 0x956A30 vram: 0x80A967C0 follows_vram: ovl_009569C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x956A30, data, overlays/ovl_00956A30] @@ -13711,6 +15330,7 @@ start: 0x956A80 vram: 0x80A96810 follows_vram: ovl_00956A30 + compress: True subsegments: - [0x956A80, data, overlays/ovl_00956A30_reloc] @@ -13719,6 +15339,7 @@ start: 0x956AA0 vram: 0x80A96830 follows_vram: ovl_00956A30_reloc + compress: True bss_size: 0x0 subsegments: - [0x956AA0, data, overlays/ovl_00956AA0] @@ -13727,6 +15348,7 @@ start: 0x956AF0 vram: 0x80A96880 follows_vram: ovl_00956AA0 + compress: True subsegments: - [0x956AF0, data, overlays/ovl_00956AA0_reloc] @@ -13735,6 +15357,7 @@ start: 0x956B10 vram: 0x80A968A0 follows_vram: ovl_00956AA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x956B10, data, overlays/ovl_00956B10] @@ -13743,6 +15366,7 @@ start: 0x956B60 vram: 0x80A968F0 follows_vram: ovl_00956B10 + compress: True subsegments: - [0x956B60, data, overlays/ovl_00956B10_reloc] @@ -13751,6 +15375,7 @@ start: 0x956B80 vram: 0x80A96910 follows_vram: ovl_00956B10_reloc + compress: True bss_size: 0x0 subsegments: - [0x956B80, data, overlays/ovl_00956B80] @@ -13759,6 +15384,7 @@ start: 0x956BD0 vram: 0x80A96960 follows_vram: ovl_00956B80 + compress: True subsegments: - [0x956BD0, data, overlays/ovl_00956B80_reloc] @@ -13767,6 +15393,7 @@ start: 0x956BF0 vram: 0x80A96980 follows_vram: ovl_00956B80_reloc + compress: True bss_size: 0x0 subsegments: - [0x956BF0, asm, overlays/ovl_00956BF0] @@ -13777,6 +15404,7 @@ start: 0x957380 vram: 0x80A97110 follows_vram: ovl_00956BF0 + compress: True subsegments: - [0x957380, data, overlays/ovl_00956BF0_reloc] @@ -13785,6 +15413,7 @@ start: 0x957410 vram: 0x80A971A0 follows_vram: ovl_00956BF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x957410, asm, overlays/ovl_00957410] @@ -13794,6 +15423,7 @@ start: 0x957770 vram: 0x80A97500 follows_vram: ovl_00957410 + compress: True subsegments: - [0x957770, data, overlays/ovl_00957410_reloc] @@ -13802,6 +15432,7 @@ start: 0x9577A0 vram: 0x80A97530 follows_vram: ovl_00957410_reloc + compress: True bss_size: 0x0 subsegments: - [0x9577A0, asm, overlays/ovl_009577A0] @@ -13811,6 +15442,7 @@ start: 0x957B00 vram: 0x80A97890 follows_vram: ovl_009577A0 + compress: True subsegments: - [0x957B00, data, overlays/ovl_009577A0_reloc] @@ -13819,6 +15451,7 @@ start: 0x957B30 vram: 0x80A978C0 follows_vram: ovl_009577A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x957B30, data, overlays/ovl_00957B30] @@ -13827,6 +15460,7 @@ start: 0x957B80 vram: 0x80A97910 follows_vram: ovl_00957B30 + compress: True subsegments: - [0x957B80, data, overlays/ovl_00957B30_reloc] @@ -13835,6 +15469,7 @@ start: 0x957BA0 vram: 0x80A97930 follows_vram: ovl_00957B30_reloc + compress: True bss_size: 0x0 subsegments: - [0x957BA0, asm, overlays/ovl_00957BA0] @@ -13845,6 +15480,7 @@ start: 0x957FA0 vram: 0x80A97D30 follows_vram: ovl_00957BA0 + compress: True subsegments: - [0x957FA0, data, overlays/ovl_00957BA0_reloc] @@ -13853,6 +15489,7 @@ start: 0x957FF0 vram: 0x80A97D80 follows_vram: ovl_00957BA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x957FF0, data, overlays/ovl_00957FF0] @@ -13861,6 +15498,7 @@ start: 0x958040 vram: 0x80A97DD0 follows_vram: ovl_00957FF0 + compress: True subsegments: - [0x958040, data, overlays/ovl_00957FF0_reloc] @@ -13869,6 +15507,7 @@ start: 0x958060 vram: 0x80A97DF0 follows_vram: ovl_00957FF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x958060, data, overlays/ovl_00958060] @@ -13877,6 +15516,7 @@ start: 0x9580B0 vram: 0x80A97E40 follows_vram: ovl_00958060 + compress: True subsegments: - [0x9580B0, data, overlays/ovl_00958060_reloc] @@ -13885,6 +15525,7 @@ start: 0x9580D0 vram: 0x80A97E60 follows_vram: ovl_00958060_reloc + compress: True bss_size: 0x0 subsegments: - [0x9580D0, data, overlays/ovl_009580D0] @@ -13893,6 +15534,7 @@ start: 0x958120 vram: 0x80A97EB0 follows_vram: ovl_009580D0 + compress: True subsegments: - [0x958120, data, overlays/ovl_009580D0_reloc] @@ -13901,6 +15543,7 @@ start: 0x958140 vram: 0x80A97ED0 follows_vram: ovl_009580D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x958140, data, overlays/ovl_00958140] @@ -13909,6 +15552,7 @@ start: 0x958190 vram: 0x80A97F20 follows_vram: ovl_00958140 + compress: True subsegments: - [0x958190, data, overlays/ovl_00958140_reloc] @@ -13917,6 +15561,7 @@ start: 0x9581B0 vram: 0x80A97F40 follows_vram: ovl_00958140_reloc + compress: True bss_size: 0x0 subsegments: - [0x9581B0, data, overlays/ovl_009581B0] @@ -13925,6 +15570,7 @@ start: 0x958200 vram: 0x80A97F90 follows_vram: ovl_009581B0 + compress: True subsegments: - [0x958200, data, overlays/ovl_009581B0_reloc] @@ -13933,6 +15579,7 @@ start: 0x958220 vram: 0x80A97FB0 follows_vram: ovl_009581B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x958220, asm, overlays/ovl_00958220] @@ -13943,6 +15590,7 @@ start: 0x9590A0 vram: 0x80A98E30 follows_vram: ovl_00958220 + compress: True subsegments: - [0x9590A0, data, overlays/ovl_00958220_reloc] @@ -13951,6 +15599,7 @@ start: 0x9591D0 vram: 0x80A98F60 follows_vram: ovl_00958220_reloc + compress: True bss_size: 0x0 subsegments: - [0x9591D0, asm, overlays/ovl_009591D0] @@ -13961,6 +15610,7 @@ start: 0x95B1E0 vram: 0x80A9AF70 follows_vram: ovl_009591D0 + compress: True subsegments: - [0x95B1E0, data, overlays/ovl_009591D0_reloc] @@ -13969,6 +15619,7 @@ start: 0x95B440 vram: 0x80A9B1D0 follows_vram: ovl_009591D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x95B440, asm, overlays/ovl_0095B440] @@ -13979,6 +15630,7 @@ start: 0x95BD80 vram: 0x80A9BB10 follows_vram: ovl_0095B440 + compress: True subsegments: - [0x95BD80, data, overlays/ovl_0095B440_reloc] @@ -13987,6 +15639,7 @@ start: 0x95BDE0 vram: 0x80A9BB70 follows_vram: ovl_0095B440_reloc + compress: True bss_size: 0x0 subsegments: - [0x95BDE0, data, overlays/ovl_0095BDE0] @@ -13995,6 +15648,7 @@ start: 0x95BE30 vram: 0x80A9BBC0 follows_vram: ovl_0095BDE0 + compress: True subsegments: - [0x95BE30, data, overlays/ovl_0095BDE0_reloc] @@ -14003,6 +15657,7 @@ start: 0x95BE50 vram: 0x80A9BBE0 follows_vram: ovl_0095BDE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x95BE50, data, overlays/ovl_0095BE50] @@ -14011,6 +15666,7 @@ start: 0x95BEA0 vram: 0x80A9BC30 follows_vram: ovl_0095BE50 + compress: True subsegments: - [0x95BEA0, data, overlays/ovl_0095BE50_reloc] @@ -14019,6 +15675,7 @@ start: 0x95BEC0 vram: 0x80A9BC50 follows_vram: ovl_0095BE50_reloc + compress: True bss_size: 0x0 subsegments: - [0x95BEC0, data, overlays/ovl_0095BEC0] @@ -14027,6 +15684,7 @@ start: 0x95BF10 vram: 0x80A9BCA0 follows_vram: ovl_0095BEC0 + compress: True subsegments: - [0x95BF10, data, overlays/ovl_0095BEC0_reloc] @@ -14035,6 +15693,7 @@ start: 0x95BF30 vram: 0x80A9BCC0 follows_vram: ovl_0095BEC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x95BF30, data, overlays/ovl_0095BF30] @@ -14043,6 +15702,7 @@ start: 0x95BF80 vram: 0x80A9BD10 follows_vram: ovl_0095BF30 + compress: True subsegments: - [0x95BF80, data, overlays/ovl_0095BF30_reloc] @@ -14051,6 +15711,7 @@ start: 0x95BFA0 vram: 0x80A9BD30 follows_vram: ovl_0095BF30_reloc + compress: True bss_size: 0x0 subsegments: - [0x95BFA0, asm, overlays/ovl_0095BFA0] @@ -14061,6 +15722,7 @@ start: 0x95C5D0 vram: 0x80A9C360 follows_vram: ovl_0095BFA0 + compress: True subsegments: - [0x95C5D0, data, overlays/ovl_0095BFA0_reloc] @@ -14069,6 +15731,7 @@ start: 0x95C630 vram: 0x80A9C3C0 follows_vram: ovl_0095BFA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x95C630, asm, overlays/ovl_0095C630] @@ -14079,6 +15742,7 @@ start: 0x95CF10 vram: 0x80A9CCA0 follows_vram: ovl_0095C630 + compress: True subsegments: - [0x95CF10, data, overlays/ovl_0095C630_reloc] @@ -14087,6 +15751,7 @@ start: 0x95CFD0 vram: 0x80A9CD60 follows_vram: ovl_0095C630_reloc + compress: True bss_size: 0x0 subsegments: - [0x95CFD0, data, overlays/ovl_0095CFD0] @@ -14095,6 +15760,7 @@ start: 0x95D020 vram: 0x80A9CDB0 follows_vram: ovl_0095CFD0 + compress: True subsegments: - [0x95D020, data, overlays/ovl_0095CFD0_reloc] @@ -14103,6 +15769,7 @@ start: 0x95D040 vram: 0x80A9CDD0 follows_vram: ovl_0095CFD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x95D040, data, overlays/ovl_0095D040] @@ -14111,6 +15778,7 @@ start: 0x95D090 vram: 0x80A9CE20 follows_vram: ovl_0095D040 + compress: True subsegments: - [0x95D090, data, overlays/ovl_0095D040_reloc] @@ -14119,6 +15787,7 @@ start: 0x95D0B0 vram: 0x80A9CE40 follows_vram: ovl_0095D040_reloc + compress: True bss_size: 0x0 subsegments: - [0x95D0B0, data, overlays/ovl_0095D0B0] @@ -14127,6 +15796,7 @@ start: 0x95D100 vram: 0x80A9CE90 follows_vram: ovl_0095D0B0 + compress: True subsegments: - [0x95D100, data, overlays/ovl_0095D0B0_reloc] @@ -14135,6 +15805,7 @@ start: 0x95D120 vram: 0x80A9CEB0 follows_vram: ovl_0095D0B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x95D120, asm, overlays/ovl_0095D120] @@ -14144,6 +15815,7 @@ start: 0x95D4C0 vram: 0x80A9D250 follows_vram: ovl_0095D120 + compress: True subsegments: - [0x95D4C0, data, overlays/ovl_0095D120_reloc] @@ -14152,6 +15824,7 @@ start: 0x95D4F0 vram: 0x80A9D280 follows_vram: ovl_0095D120_reloc + compress: True bss_size: 0x0 subsegments: - [0x95D4F0, asm, overlays/ovl_0095D4F0] @@ -14162,6 +15835,7 @@ start: 0x95DD40 vram: 0x80A9DAD0 follows_vram: ovl_0095D4F0 + compress: True subsegments: - [0x95DD40, data, overlays/ovl_0095D4F0_reloc] @@ -14170,6 +15844,7 @@ start: 0x95DDA0 vram: 0x80A9DB30 follows_vram: ovl_0095D4F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x95DDA0, asm, overlays/ovl_0095DDA0] @@ -14179,6 +15854,7 @@ start: 0x95DE80 vram: 0x80A9DC10 follows_vram: ovl_0095DDA0 + compress: True subsegments: - [0x95DE80, data, overlays/ovl_0095DDA0_reloc] @@ -14187,6 +15863,7 @@ start: 0x95DEB0 vram: 0x80A9DC40 follows_vram: ovl_0095DDA0_reloc + compress: True bss_size: 0x0 subsegments: - [0x95DEB0, asm, overlays/ovl_0095DEB0] @@ -14197,6 +15874,7 @@ start: 0x95E4C0 vram: 0x80A9E250 follows_vram: ovl_0095DEB0 + compress: True subsegments: - [0x95E4C0, data, overlays/ovl_0095DEB0_reloc] @@ -14205,6 +15883,7 @@ start: 0x95E520 vram: 0x80A9E2B0 follows_vram: ovl_0095DEB0_reloc + compress: True bss_size: 0x0 subsegments: - [0x95E520, data, overlays/ovl_0095E520] @@ -14213,6 +15892,7 @@ start: 0x95E570 vram: 0x80A9E300 follows_vram: ovl_0095E520 + compress: True subsegments: - [0x95E570, data, overlays/ovl_0095E520_reloc] @@ -14221,6 +15901,7 @@ start: 0x95E590 vram: 0x80A9E320 follows_vram: ovl_0095E520_reloc + compress: True bss_size: 0x0 subsegments: - [0x95E590, data, overlays/ovl_0095E590] @@ -14229,6 +15910,7 @@ start: 0x95E5E0 vram: 0x80A9E370 follows_vram: ovl_0095E590 + compress: True subsegments: - [0x95E5E0, data, overlays/ovl_0095E590_reloc] @@ -14237,6 +15919,7 @@ start: 0x95E600 vram: 0x80A9E390 follows_vram: ovl_0095E590_reloc + compress: True bss_size: 0x0 subsegments: - [0x95E600, data, overlays/ovl_0095E600] @@ -14245,6 +15928,7 @@ start: 0x95E650 vram: 0x80A9E3E0 follows_vram: ovl_0095E600 + compress: True subsegments: - [0x95E650, data, overlays/ovl_0095E600_reloc] @@ -14253,6 +15937,7 @@ start: 0x95E670 vram: 0x80A9E400 follows_vram: ovl_0095E600_reloc + compress: True bss_size: 0x0 subsegments: - [0x95E670, data, overlays/ovl_0095E670] @@ -14261,6 +15946,7 @@ start: 0x95E6C0 vram: 0x80A9E450 follows_vram: ovl_0095E670 + compress: True subsegments: - [0x95E6C0, data, overlays/ovl_0095E670_reloc] @@ -14269,6 +15955,7 @@ start: 0x95E6E0 vram: 0x80A9E470 follows_vram: ovl_0095E670_reloc + compress: True bss_size: 0x0 subsegments: - [0x95E6E0, data, overlays/ovl_0095E6E0] @@ -14277,6 +15964,7 @@ start: 0x95E730 vram: 0x80A9E4C0 follows_vram: ovl_0095E6E0 + compress: True subsegments: - [0x95E730, data, overlays/ovl_0095E6E0_reloc] @@ -14285,6 +15973,7 @@ start: 0x95E750 vram: 0x80A9E4E0 follows_vram: ovl_0095E6E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x95E750, asm, overlays/ovl_0095E750] @@ -14295,6 +15984,7 @@ start: 0x95EC60 vram: 0x80A9E9F0 follows_vram: ovl_0095E750 + compress: True subsegments: - [0x95EC60, data, overlays/ovl_0095E750_reloc] @@ -14303,6 +15993,7 @@ start: 0x95ECC0 vram: 0x80A9EA50 follows_vram: ovl_0095E750_reloc + compress: True bss_size: 0x0 subsegments: - [0x95ECC0, asm, overlays/ovl_0095ECC0] @@ -14312,6 +16003,7 @@ start: 0x95ED90 vram: 0x80A9EB20 follows_vram: ovl_0095ECC0 + compress: True subsegments: - [0x95ED90, data, overlays/ovl_0095ECC0_reloc] @@ -14320,6 +16012,7 @@ start: 0x95EDC0 vram: 0x80A9EB50 follows_vram: ovl_0095ECC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x95EDC0, data, overlays/ovl_0095EDC0] @@ -14328,6 +16021,7 @@ start: 0x95EE10 vram: 0x80A9EBA0 follows_vram: ovl_0095EDC0 + compress: True subsegments: - [0x95EE10, data, overlays/ovl_0095EDC0_reloc] @@ -14336,6 +16030,7 @@ start: 0x95EE30 vram: 0x80A9EBC0 follows_vram: ovl_0095EDC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x95EE30, data, overlays/ovl_0095EE30] @@ -14344,6 +16039,7 @@ start: 0x95EE80 vram: 0x80A9EC10 follows_vram: ovl_0095EE30 + compress: True subsegments: - [0x95EE80, data, overlays/ovl_0095EE30_reloc] @@ -14352,6 +16048,7 @@ start: 0x95EEA0 vram: 0x80A9EC30 follows_vram: ovl_0095EE30_reloc + compress: True bss_size: 0x0 subsegments: - [0x95EEA0, data, overlays/ovl_0095EEA0] @@ -14360,6 +16057,7 @@ start: 0x95EEF0 vram: 0x80A9EC80 follows_vram: ovl_0095EEA0 + compress: True subsegments: - [0x95EEF0, data, overlays/ovl_0095EEA0_reloc] @@ -14368,6 +16066,7 @@ start: 0x95EF10 vram: 0x80A9ECA0 follows_vram: ovl_0095EEA0_reloc + compress: True bss_size: 0x20 subsegments: - [0x95EF10, asm, overlays/ovl_0095EF10] @@ -14379,6 +16078,7 @@ start: 0x95F750 vram: 0x80A9F500 follows_vram: ovl_0095EF10 + compress: True subsegments: - [0x95F750, data, overlays/ovl_0095EF10_reloc] @@ -14387,6 +16087,7 @@ start: 0x95F830 vram: 0x80A9F5E0 follows_vram: ovl_0095EF10_reloc + compress: True bss_size: 0x0 subsegments: - [0x95F830, asm, overlays/ovl_0095F830] @@ -14397,6 +16098,7 @@ start: 0x95FE60 vram: 0x80A9FC10 follows_vram: ovl_0095F830 + compress: True subsegments: - [0x95FE60, data, overlays/ovl_0095F830_reloc] @@ -14405,6 +16107,7 @@ start: 0x95FEC0 vram: 0x80A9FC70 follows_vram: ovl_0095F830_reloc + compress: True bss_size: 0x0 subsegments: - [0x95FEC0, asm, overlays/ovl_0095FEC0] @@ -14415,6 +16118,7 @@ start: 0x9625A0 vram: 0x80AA2350 follows_vram: ovl_0095FEC0 + compress: True subsegments: - [0x9625A0, data, overlays/ovl_0095FEC0_reloc] @@ -14423,6 +16127,7 @@ start: 0x962800 vram: 0x80AA25B0 follows_vram: ovl_0095FEC0_reloc + compress: True bss_size: 0x0 subsegments: - [0x962800, asm, overlays/ovl_00962800] @@ -14432,6 +16137,7 @@ start: 0x962CD0 vram: 0x80AA2A80 follows_vram: ovl_00962800 + compress: True subsegments: - [0x962CD0, data, overlays/ovl_00962800_reloc] @@ -14440,6 +16146,7 @@ start: 0x962D00 vram: 0x80AA2AB0 follows_vram: ovl_00962800_reloc + compress: True bss_size: 0x0 subsegments: - [0x962D00, asm, overlays/ovl_00962D00] @@ -14449,6 +16156,7 @@ start: 0x963000 vram: 0x80AA2DB0 follows_vram: ovl_00962D00 + compress: True subsegments: - [0x963000, data, overlays/ovl_00962D00_reloc] @@ -14457,6 +16165,7 @@ start: 0x963030 vram: 0x80AA2DE0 follows_vram: ovl_00962D00_reloc + compress: True bss_size: 0x0 subsegments: - [0x963030, asm, overlays/ovl_00963030] @@ -14466,6 +16175,7 @@ start: 0x963490 vram: 0x80AA3240 follows_vram: ovl_00963030 + compress: True subsegments: - [0x963490, data, overlays/ovl_00963030_reloc] @@ -14474,6 +16184,7 @@ start: 0x9634D0 vram: 0x80AA3280 follows_vram: ovl_00963030_reloc + compress: True bss_size: 0x0 subsegments: - [0x9634D0, asm, overlays/ovl_009634D0] @@ -14483,6 +16194,7 @@ start: 0x9635B0 vram: 0x80AA3360 follows_vram: ovl_009634D0 + compress: True subsegments: - [0x9635B0, data, overlays/ovl_009634D0_reloc] @@ -14491,6 +16203,7 @@ start: 0x9635E0 vram: 0x80AA3390 follows_vram: ovl_009634D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9635E0, asm, overlays/ovl_009635E0] @@ -14501,6 +16214,7 @@ start: 0x963D90 vram: 0x80AA3B40 follows_vram: ovl_009635E0 + compress: True subsegments: - [0x963D90, data, overlays/ovl_009635E0_reloc] @@ -14509,6 +16223,7 @@ start: 0x963DF0 vram: 0x80AA3BA0 follows_vram: ovl_009635E0_reloc + compress: True bss_size: 0xE0 subsegments: - [0x963DF0, asm, overlays/ovl_00963DF0] @@ -14520,6 +16235,7 @@ start: 0x965040 vram: 0x80AA4ED0 follows_vram: ovl_00963DF0 + compress: True subsegments: - [0x965040, data, overlays/ovl_00963DF0_reloc] @@ -14528,6 +16244,7 @@ start: 0x9651E0 vram: 0x80AA5070 follows_vram: ovl_00963DF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9651E0, asm, overlays/ovl_009651E0] @@ -14537,6 +16254,7 @@ start: 0x9652C0 vram: 0x80AA5150 follows_vram: ovl_009651E0 + compress: True subsegments: - [0x9652C0, data, overlays/ovl_009651E0_reloc] @@ -14545,6 +16263,7 @@ start: 0x9652F0 vram: 0x80AA5180 follows_vram: ovl_009651E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9652F0, data, overlays/ovl_009652F0] @@ -14553,6 +16272,7 @@ start: 0x965340 vram: 0x80AA51D0 follows_vram: ovl_009652F0 + compress: True subsegments: - [0x965340, data, overlays/ovl_009652F0_reloc] @@ -14561,6 +16281,7 @@ start: 0x965360 vram: 0x80AA51F0 follows_vram: ovl_009652F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x965360, data, overlays/ovl_00965360] @@ -14569,6 +16290,7 @@ start: 0x9653B0 vram: 0x80AA5240 follows_vram: ovl_00965360 + compress: True subsegments: - [0x9653B0, data, overlays/ovl_00965360_reloc] @@ -14577,6 +16299,7 @@ start: 0x9653D0 vram: 0x80AA5260 follows_vram: ovl_00965360_reloc + compress: True bss_size: 0x0 subsegments: - [0x9653D0, asm, overlays/ovl_009653D0] @@ -14587,6 +16310,7 @@ start: 0x965B80 vram: 0x80AA5A10 follows_vram: ovl_009653D0 + compress: True subsegments: - [0x965B80, data, overlays/ovl_009653D0_reloc] @@ -14595,6 +16319,7 @@ start: 0x965BE0 vram: 0x80AA5A70 follows_vram: ovl_009653D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x965BE0, asm, overlays/ovl_00965BE0] @@ -14605,6 +16330,7 @@ start: 0x967130 vram: 0x80AA6FC0 follows_vram: ovl_00965BE0 + compress: True subsegments: - [0x967130, data, overlays/ovl_00965BE0_reloc] @@ -14613,6 +16339,7 @@ start: 0x9672A0 vram: 0x80AA7130 follows_vram: ovl_00965BE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9672A0, data, overlays/ovl_009672A0] @@ -14621,6 +16348,7 @@ start: 0x9672F0 vram: 0x80AA7180 follows_vram: ovl_009672A0 + compress: True subsegments: - [0x9672F0, data, overlays/ovl_009672A0_reloc] @@ -14629,6 +16357,7 @@ start: 0x967310 vram: 0x80AA71A0 follows_vram: ovl_009672A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x967310, asm, overlays/ovl_00967310] @@ -14639,6 +16368,7 @@ start: 0x967940 vram: 0x80AA77D0 follows_vram: ovl_00967310 + compress: True subsegments: - [0x967940, data, overlays/ovl_00967310_reloc] @@ -14647,6 +16377,7 @@ start: 0x9679A0 vram: 0x80AA7830 follows_vram: ovl_00967310_reloc + compress: True bss_size: 0x0 subsegments: - [0x9679A0, asm, overlays/ovl_009679A0] @@ -14657,6 +16388,7 @@ start: 0x968030 vram: 0x80AA7EC0 follows_vram: ovl_009679A0 + compress: True subsegments: - [0x968030, data, overlays/ovl_009679A0_reloc] @@ -14665,6 +16397,7 @@ start: 0x9680A0 vram: 0x80AA7F30 follows_vram: ovl_009679A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x9680A0, asm, overlays/ovl_009680A0] @@ -14675,6 +16408,7 @@ start: 0x9686D0 vram: 0x80AA8560 follows_vram: ovl_009680A0 + compress: True subsegments: - [0x9686D0, data, overlays/ovl_009680A0_reloc] @@ -14683,6 +16417,7 @@ start: 0x968730 vram: 0x80AA85C0 follows_vram: ovl_009680A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x968730, data, overlays/ovl_00968730] @@ -14691,6 +16426,7 @@ start: 0x968780 vram: 0x80AA8610 follows_vram: ovl_00968730 + compress: True subsegments: - [0x968780, data, overlays/ovl_00968730_reloc] @@ -14699,6 +16435,7 @@ start: 0x9687A0 vram: 0x80AA8630 follows_vram: ovl_00968730_reloc + compress: True bss_size: 0x0 subsegments: - [0x9687A0, data, overlays/ovl_009687A0] @@ -14707,6 +16444,7 @@ start: 0x9687F0 vram: 0x80AA8680 follows_vram: ovl_009687A0 + compress: True subsegments: - [0x9687F0, data, overlays/ovl_009687A0_reloc] @@ -14715,6 +16453,7 @@ start: 0x968810 vram: 0x80AA86A0 follows_vram: ovl_009687A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x968810, data, overlays/ovl_00968810] @@ -14723,6 +16462,7 @@ start: 0x968860 vram: 0x80AA86F0 follows_vram: ovl_00968810 + compress: True subsegments: - [0x968860, data, overlays/ovl_00968810_reloc] @@ -14731,6 +16471,7 @@ start: 0x968880 vram: 0x80AA8710 follows_vram: ovl_00968810_reloc + compress: True bss_size: 0x0 subsegments: - [0x968880, asm, overlays/ovl_00968880] @@ -14740,6 +16481,7 @@ start: 0x968960 vram: 0x80AA87F0 follows_vram: ovl_00968880 + compress: True subsegments: - [0x968960, data, overlays/ovl_00968880_reloc] @@ -14748,6 +16490,7 @@ start: 0x968990 vram: 0x80AA8820 follows_vram: ovl_00968880_reloc + compress: True bss_size: 0x0 subsegments: - [0x968990, data, overlays/ovl_00968990] @@ -14756,6 +16499,7 @@ start: 0x9689E0 vram: 0x80AA8870 follows_vram: ovl_00968990 + compress: True subsegments: - [0x9689E0, data, overlays/ovl_00968990_reloc] @@ -14764,6 +16508,7 @@ start: 0x968A00 vram: 0x80AA8890 follows_vram: ovl_00968990_reloc + compress: True bss_size: 0x0 subsegments: - [0x968A00, data, overlays/ovl_00968A00] @@ -14772,6 +16517,7 @@ start: 0x968A50 vram: 0x80AA88E0 follows_vram: ovl_00968A00 + compress: True subsegments: - [0x968A50, data, overlays/ovl_00968A00_reloc] @@ -14780,6 +16526,7 @@ start: 0x968A70 vram: 0x80AA8900 follows_vram: ovl_00968A00_reloc + compress: True bss_size: 0x0 subsegments: - [0x968A70, data, overlays/ovl_00968A70] @@ -14788,6 +16535,7 @@ start: 0x968AC0 vram: 0x80AA8950 follows_vram: ovl_00968A70 + compress: True subsegments: - [0x968AC0, data, overlays/ovl_00968A70_reloc] @@ -14796,6 +16544,7 @@ start: 0x968AE0 vram: 0x80AA8970 follows_vram: ovl_00968A70_reloc + compress: True bss_size: 0x0 subsegments: - [0x968AE0, asm, overlays/ovl_00968AE0] @@ -14805,6 +16554,7 @@ start: 0x968DA0 vram: 0x80AA8C30 follows_vram: ovl_00968AE0 + compress: True subsegments: - [0x968DA0, data, overlays/ovl_00968AE0_reloc] @@ -14813,6 +16563,7 @@ start: 0x968DD0 vram: 0x80AA8C60 follows_vram: ovl_00968AE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x968DD0, asm, overlays/ovl_00968DD0] @@ -14822,6 +16573,7 @@ start: 0x969130 vram: 0x80AA8FC0 follows_vram: ovl_00968DD0 + compress: True subsegments: - [0x969130, data, overlays/ovl_00968DD0_reloc] @@ -14830,6 +16582,7 @@ start: 0x969160 vram: 0x80AA8FF0 follows_vram: ovl_00968DD0_reloc + compress: True bss_size: 0x0 subsegments: - [0x969160, data, overlays/ovl_00969160] @@ -14838,6 +16591,7 @@ start: 0x9691B0 vram: 0x80AA9040 follows_vram: ovl_00969160 + compress: True subsegments: - [0x9691B0, data, overlays/ovl_00969160_reloc] @@ -14846,6 +16600,7 @@ start: 0x9691D0 vram: 0x80AA9060 follows_vram: ovl_00969160_reloc + compress: True bss_size: 0x0 subsegments: - [0x9691D0, data, overlays/ovl_009691D0] @@ -14854,6 +16609,7 @@ start: 0x969220 vram: 0x80AA90B0 follows_vram: ovl_009691D0 + compress: True subsegments: - [0x969220, data, overlays/ovl_009691D0_reloc] @@ -14862,6 +16618,7 @@ start: 0x969240 vram: 0x80AA90D0 follows_vram: ovl_009691D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x969240, data, overlays/ovl_00969240] @@ -14870,6 +16627,7 @@ start: 0x969290 vram: 0x80AA9120 follows_vram: ovl_00969240 + compress: True subsegments: - [0x969290, data, overlays/ovl_00969240_reloc] @@ -14878,6 +16636,7 @@ start: 0x9692B0 vram: 0x80AA9140 follows_vram: ovl_00969240_reloc + compress: True bss_size: 0x0 subsegments: - [0x9692B0, data, overlays/ovl_009692B0] @@ -14886,6 +16645,7 @@ start: 0x969300 vram: 0x80AA9190 follows_vram: ovl_009692B0 + compress: True subsegments: - [0x969300, data, overlays/ovl_009692B0_reloc] @@ -14894,6 +16654,7 @@ start: 0x969320 vram: 0x80AA91B0 follows_vram: ovl_009692B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x969320, data, overlays/ovl_00969320] @@ -14902,6 +16663,7 @@ start: 0x969370 vram: 0x80AA9200 follows_vram: ovl_00969320 + compress: True subsegments: - [0x969370, data, overlays/ovl_00969320_reloc] @@ -14910,6 +16672,7 @@ start: 0x969390 vram: 0x80AA9220 follows_vram: ovl_00969320_reloc + compress: True bss_size: 0x0 subsegments: - [0x969390, data, overlays/ovl_00969390] @@ -14918,6 +16681,7 @@ start: 0x9693E0 vram: 0x80AA9270 follows_vram: ovl_00969390 + compress: True subsegments: - [0x9693E0, data, overlays/ovl_00969390_reloc] @@ -14926,6 +16690,7 @@ start: 0x969400 vram: 0x80AA9290 follows_vram: ovl_00969390_reloc + compress: True bss_size: 0x0 subsegments: - [0x969400, data, overlays/ovl_00969400] @@ -14934,6 +16699,7 @@ start: 0x969450 vram: 0x80AA92E0 follows_vram: ovl_00969400 + compress: True subsegments: - [0x969450, data, overlays/ovl_00969400_reloc] @@ -14942,6 +16708,7 @@ start: 0x969470 vram: 0x80AA9300 follows_vram: ovl_00969400_reloc + compress: True bss_size: 0x0 subsegments: - [0x969470, data, overlays/ovl_00969470] @@ -14950,6 +16717,7 @@ start: 0x9694C0 vram: 0x80AA9350 follows_vram: ovl_00969470 + compress: True subsegments: - [0x9694C0, data, overlays/ovl_00969470_reloc] @@ -14958,6 +16726,7 @@ start: 0x9694E0 vram: 0x80AA9370 follows_vram: ovl_00969470_reloc + compress: True bss_size: 0x0 subsegments: - [0x9694E0, data, overlays/ovl_009694E0] @@ -14966,6 +16735,7 @@ start: 0x969530 vram: 0x80AA93C0 follows_vram: ovl_009694E0 + compress: True subsegments: - [0x969530, data, overlays/ovl_009694E0_reloc] @@ -14974,6 +16744,7 @@ start: 0x969550 vram: 0x80AA93E0 follows_vram: ovl_009694E0_reloc + compress: True bss_size: 0x0 subsegments: - [0x969550, data, overlays/ovl_00969550] @@ -14982,6 +16753,7 @@ start: 0x9695A0 vram: 0x80AA9430 follows_vram: ovl_00969550 + compress: True subsegments: - [0x9695A0, data, overlays/ovl_00969550_reloc] @@ -14990,6 +16762,7 @@ start: 0x9695C0 vram: 0x80AA9450 follows_vram: ovl_00969550_reloc + compress: True bss_size: 0x0 subsegments: - [0x9695C0, data, overlays/ovl_009695C0] @@ -14998,6 +16771,7 @@ start: 0x969610 vram: 0x80AA94A0 follows_vram: ovl_009695C0 + compress: True subsegments: - [0x969610, data, overlays/ovl_009695C0_reloc] @@ -15006,6 +16780,7 @@ start: 0x969630 vram: 0x80AA94C0 follows_vram: ovl_009695C0_reloc + compress: True bss_size: 0x0 subsegments: - [0x969630, asm, overlays/ovl_00969630] @@ -15016,6 +16791,7 @@ start: 0x969B30 vram: 0x80AA99C0 follows_vram: ovl_00969630 + compress: True subsegments: - [0x969B30, data, overlays/ovl_00969630_reloc] @@ -15024,6 +16800,7 @@ start: 0x969B80 vram: 0x80AA9A10 follows_vram: ovl_00969630_reloc + compress: True bss_size: 0x0 subsegments: - [0x969B80, asm, overlays/ovl_00969B80] @@ -15034,6 +16811,7 @@ start: 0x96A080 vram: 0x80AA9F10 follows_vram: ovl_00969B80 + compress: True subsegments: - [0x96A080, data, overlays/ovl_00969B80_reloc] @@ -15042,6 +16820,7 @@ start: 0x96A0D0 vram: 0x80AA9F60 follows_vram: ovl_00969B80_reloc + compress: True bss_size: 0x0 subsegments: - [0x96A0D0, data, overlays/ovl_0096A0D0] @@ -15050,6 +16829,7 @@ start: 0x96A120 vram: 0x80AA9FB0 follows_vram: ovl_0096A0D0 + compress: True subsegments: - [0x96A120, data, overlays/ovl_0096A0D0_reloc] @@ -15058,6 +16838,7 @@ start: 0x96A140 vram: 0x80AA9FD0 follows_vram: ovl_0096A0D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x96A140, data, overlays/ovl_0096A140] @@ -15066,6 +16847,7 @@ start: 0x96A190 vram: 0x80AAA020 follows_vram: ovl_0096A140 + compress: True subsegments: - [0x96A190, data, overlays/ovl_0096A140_reloc] @@ -15074,6 +16856,7 @@ start: 0x96A1B0 vram: 0x80AAA040 follows_vram: ovl_0096A140_reloc + compress: True bss_size: 0x0 subsegments: - [0x96A1B0, data, overlays/ovl_0096A1B0] @@ -15082,6 +16865,7 @@ start: 0x96A200 vram: 0x80AAA090 follows_vram: ovl_0096A1B0 + compress: True subsegments: - [0x96A200, data, overlays/ovl_0096A1B0_reloc] @@ -15090,6 +16874,7 @@ start: 0x96A220 vram: 0x80AAA0B0 follows_vram: ovl_0096A1B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x96A220, data, overlays/ovl_0096A220] @@ -15098,6 +16883,7 @@ start: 0x96A270 vram: 0x80AAA100 follows_vram: ovl_0096A220 + compress: True subsegments: - [0x96A270, data, overlays/ovl_0096A220_reloc] @@ -15106,6 +16892,7 @@ start: 0x96A290 vram: 0x80AAA120 follows_vram: ovl_0096A220_reloc + compress: True bss_size: 0x0 subsegments: - [0x96A290, asm, overlays/ovl_0096A290] @@ -15115,6 +16902,7 @@ start: 0x96AF10 vram: 0x80AAADA0 follows_vram: ovl_0096A290 + compress: True subsegments: - [0x96AF10, data, overlays/ovl_0096A290_reloc] @@ -15123,6 +16911,7 @@ start: 0x96B010 vram: 0x80AAAEA0 follows_vram: ovl_0096A290_reloc + compress: True bss_size: 0x0 subsegments: - [0x96B010, asm, overlays/ovl_0096B010] @@ -15132,6 +16921,7 @@ start: 0x96B0F0 vram: 0x80AAAF80 follows_vram: ovl_0096B010 + compress: True subsegments: - [0x96B0F0, data, overlays/ovl_0096B010_reloc] @@ -15140,6 +16930,7 @@ start: 0x96B120 vram: 0x80AAAFB0 follows_vram: ovl_0096B010_reloc + compress: True bss_size: 0x0 subsegments: - [0x96B120, asm, overlays/ovl_0096B120] @@ -15149,6 +16940,7 @@ start: 0x96B200 vram: 0x80AAB090 follows_vram: ovl_0096B120 + compress: True subsegments: - [0x96B200, data, overlays/ovl_0096B120_reloc] @@ -15157,6 +16949,7 @@ start: 0x96B230 vram: 0x80AAB0C0 follows_vram: ovl_0096B120_reloc + compress: True bss_size: 0x0 subsegments: - [0x96B230, asm, overlays/ovl_0096B230] @@ -15166,6 +16959,7 @@ start: 0x96B310 vram: 0x80AAB1A0 follows_vram: ovl_0096B230 + compress: True subsegments: - [0x96B310, data, overlays/ovl_0096B230_reloc] @@ -15174,6 +16968,7 @@ start: 0x96B340 vram: 0x80AAB1D0 follows_vram: ovl_0096B230_reloc + compress: True bss_size: 0x0 subsegments: - [0x96B340, asm, overlays/ovl_0096B340] @@ -15183,6 +16978,7 @@ start: 0x96B450 vram: 0x80AAB2E0 follows_vram: ovl_0096B340 + compress: True subsegments: - [0x96B450, data, overlays/ovl_0096B340_reloc] @@ -15191,6 +16987,7 @@ start: 0x96B470 vram: 0x80AAB300 follows_vram: ovl_0096B340_reloc + compress: True bss_size: 0x0 subsegments: - [0x96B470, asm, overlays/ovl_0096B470] @@ -15201,6 +16998,7 @@ start: 0x96C2B0 vram: 0x80AAC140 follows_vram: ovl_0096B470 + compress: True subsegments: - [0x96C2B0, data, overlays/ovl_0096B470_reloc] @@ -15209,6 +17007,7 @@ start: 0x96C3A0 vram: 0x80AAC230 follows_vram: ovl_0096B470_reloc + compress: True bss_size: 0x0 subsegments: - [0x96C3A0, asm, overlays/ovl_0096C3A0] @@ -15218,6 +17017,7 @@ start: 0x96CC00 vram: 0x80AACA90 follows_vram: ovl_0096C3A0 + compress: True subsegments: - [0x96CC00, data, overlays/ovl_0096C3A0_reloc] @@ -15226,6 +17026,7 @@ start: 0x96CCF0 vram: 0x80AACB80 follows_vram: ovl_0096C3A0_reloc + compress: True bss_size: 0x0 subsegments: - [0x96CCF0, asm, overlays/ovl_0096CCF0] @@ -15235,6 +17036,7 @@ start: 0x96D1F0 vram: 0x80AAD080 follows_vram: ovl_0096CCF0 + compress: True subsegments: - [0x96D1F0, data, overlays/ovl_0096CCF0_reloc] @@ -15243,6 +17045,7 @@ start: 0x96D250 vram: 0x80AAD0E0 follows_vram: ovl_0096CCF0_reloc + compress: True bss_size: 0x0 subsegments: - [0x96D250, asm, overlays/ovl_0096D250] @@ -15253,6 +17056,7 @@ start: 0x96E7D0 vram: 0x80AAE660 follows_vram: ovl_0096D250 + compress: True subsegments: - [0x96E7D0, data, overlays/ovl_0096D250_reloc] @@ -15261,6 +17065,7 @@ start: 0x96E8E0 vram: 0x80AAE770 follows_vram: ovl_0096D250_reloc + compress: True bss_size: 0x0 subsegments: - [0x96E8E0, asm, overlays/ovl_0096E8E0] @@ -15270,6 +17075,7 @@ start: 0x96E9C0 vram: 0x80AAE850 follows_vram: ovl_0096E8E0 + compress: True subsegments: - [0x96E9C0, data, overlays/ovl_0096E8E0_reloc] @@ -15278,6 +17084,7 @@ start: 0x96E9F0 vram: 0x80AAE880 follows_vram: ovl_0096E8E0_reloc + compress: True bss_size: 0x10 subsegments: - [0x96E9F0, asm, overlays/ovl_0096E9F0] @@ -15288,6 +17095,7 @@ start: 0x96EB00 vram: 0x80AAE9A0 follows_vram: ovl_0096E9F0 + compress: True subsegments: - [0x96EB00, data, overlays/ovl_0096E9F0_reloc] @@ -15296,6 +17104,7 @@ start: 0x96EB20 vram: 0x80AAE9C0 follows_vram: ovl_0096E9F0_reloc + compress: True bss_size: 0x0 subsegments: - [0x96EB20, asm, overlays/ovl_0096EB20] @@ -15305,6 +17114,7 @@ start: 0x96F290 vram: 0x80AAF130 follows_vram: ovl_0096EB20 + compress: True subsegments: - [0x96F290, data, overlays/ovl_0096EB20_reloc] @@ -15313,6 +17123,7 @@ start: 0x96F360 vram: 0x80AAF200 follows_vram: ovl_0096EB20_reloc + compress: True bss_size: 0x0 subsegments: - [0x96F360, data, overlays/ovl_0096F360] @@ -15321,6 +17132,7 @@ start: 0x96F3B0 vram: 0x80AAF250 follows_vram: ovl_0096F360 + compress: True subsegments: - [0x96F3B0, data, overlays/ovl_0096F360_reloc] @@ -15329,6 +17141,7 @@ start: 0x96F3D0 vram: 0x80AAF270 follows_vram: ovl_0096F360_reloc + compress: True bss_size: 0x0 subsegments: - [0x96F3D0, data, overlays/ovl_0096F3D0] @@ -15337,6 +17150,7 @@ start: 0x96F420 vram: 0x80AAF2C0 follows_vram: ovl_0096F3D0 + compress: True subsegments: - [0x96F420, data, overlays/ovl_0096F3D0_reloc] @@ -15345,6 +17159,7 @@ start: 0x96F440 vram: 0x80AAF2E0 follows_vram: ovl_0096F3D0_reloc + compress: True bss_size: 0x0 subsegments: - [0x96F440, data, overlays/ovl_0096F440] @@ -15353,6 +17168,7 @@ start: 0x96F490 vram: 0x80AAF330 follows_vram: ovl_0096F440 + compress: True subsegments: - [0x96F490, data, overlays/ovl_0096F440_reloc] @@ -15361,6 +17177,7 @@ start: 0x96F4B0 vram: 0x80AAF350 follows_vram: ovl_0096F440_reloc + compress: True bss_size: 0x0 subsegments: - [0x96F4B0, data, overlays/ovl_0096F4B0] @@ -15369,6 +17186,7 @@ start: 0x96F500 vram: 0x80AAF3A0 follows_vram: ovl_0096F4B0 + compress: True subsegments: - [0x96F500, data, overlays/ovl_0096F4B0_reloc] @@ -15377,6 +17195,7 @@ start: 0x96F520 vram: 0x80AAF3C0 follows_vram: ovl_0096F4B0_reloc + compress: True bss_size: 0x0 subsegments: - [0x96F520, data, overlays/ovl_0096F520] @@ -15385,6 +17204,7 @@ start: 0x96F570 vram: 0x80AAF410 follows_vram: ovl_0096F520 + compress: True subsegments: - [0x96F570, data, overlays/ovl_0096F520_reloc] @@ -15393,6 +17213,7 @@ start: 0x96F590 vram: 0x80AAF430 follows_vram: ovl_0096F520_reloc + compress: True bss_size: 0x0 subsegments: - [0x96F590, data, overlays/ovl_0096F590] @@ -15401,6 +17222,7 @@ start: 0x96F5E0 vram: 0x80AAF480 follows_vram: ovl_0096F590 + compress: True subsegments: - [0x96F5E0, data, overlays/ovl_0096F590_reloc] @@ -15409,6 +17231,7 @@ start: 0x96F600 vram: 0x80AAF4A0 follows_vram: ovl_0096F590_reloc + compress: True bss_size: 0x0 subsegments: - [0x96F600, asm, overlays/ovl_0096F600] @@ -15418,6 +17241,7 @@ start: 0x96FAA0 vram: 0x80AAF940 follows_vram: ovl_0096F600 + compress: True subsegments: - [0x96FAA0, data, overlays/ovl_0096F600_reloc] @@ -15426,6 +17250,7 @@ start: 0x96FAE0 vram: 0x80AAF980 follows_vram: ovl_0096F600_reloc + compress: True bss_size: 0x0 subsegments: - [0x96FAE0, asm, overlays/ovl_0096FAE0] @@ -15435,6 +17260,7 @@ start: 0x96FE40 vram: 0x80AAFCE0 follows_vram: ovl_0096FAE0 + compress: True subsegments: - [0x96FE40, data, overlays/ovl_0096FAE0_reloc] @@ -15443,6 +17269,7 @@ start: 0x96FE70 vram: 0x80AAFD10 follows_vram: ovl_0096FAE0_reloc + compress: True bss_size: 0x0 subsegments: - [0x96FE70, asm, overlays/ovl_0096FE70] @@ -15452,6 +17279,7 @@ start: 0x9701D0 vram: 0x80AB0070 follows_vram: ovl_0096FE70 + compress: True subsegments: - [0x9701D0, data, overlays/ovl_0096FE70_reloc] @@ -15460,6 +17288,7 @@ start: 0x970200 vram: 0x80AB00A0 follows_vram: ovl_0096FE70_reloc + compress: True bss_size: 0x0 subsegments: - [0x970200, asm, overlays/ovl_00970200] @@ -15470,6 +17299,7 @@ start: 0x970820 vram: 0x80AB06C0 follows_vram: ovl_00970200 + compress: True subsegments: - [0x970820, data, overlays/ovl_00970200_reloc] @@ -15478,6 +17308,7 @@ start: 0x970880 vram: 0x80AB0720 follows_vram: ovl_00970200_reloc + compress: True bss_size: 0x0 subsegments: - [0x970880, asm, overlays/ovl_00970880] @@ -15487,6 +17318,7 @@ start: 0x9708F0 vram: 0x80AB0790 follows_vram: ovl_00970880 + compress: True subsegments: - [0x9708F0, data, overlays/ovl_00970880_reloc] @@ -15495,6 +17327,7 @@ start: 0x970920 vram: 0x80AB07C0 follows_vram: ovl_00970880_reloc + compress: True bss_size: 0x420 subsegments: - [0x970920, asm, overlays/ovl_00970920] @@ -15505,5 +17338,6 @@ start: 0x9754A0 vram: 0x80AB5760 follows_vram: ovl_00970920 + compress: True subsegments: - [0x9754A0, data, overlays/ovl_00970920_reloc] |
