void ndsloadstub() { void (*func_ptr)(void) = (void*)ARM9STUBVMA; #ifndef BOOTHB swiDecompressLZSSWram((void*)ndsloader_lz, (void*)BOOTLDR_NDS); *((u32*)(BOOTLDR_NDS-8)) = *((u32*)ndsloader_lz) >> 8; #endif DC_FlushAll(); DC_InvalidateAll(); IC_InvalidateAll(); BOOTFLAG = 0; VRAM_C_CR = VRAM_ENABLE | VRAM_C_LCD; #ifndef BOOTHB NDSHEADER->arm7executeAddress = 0x06000000; #endif memcpy16((void*)ARM9STUBVMA, arm9stub_bin, arm9stub_bin_size); memcpy16(VRAM_C, arm7stub_bin, arm7stub_bin_size); VRAM_C_CR = VRAM_ENABLE | VRAM_C_ARM7_0x06000000; DC_FlushAll(); DC_InvalidateAll(); IC_InvalidateAll(); #ifdef BOOTHB resetARM7(0x06000000); #endif func_ptr(); }
void decompress(const void* data, void* dst, DecompressType type) { switch(type) { case LZ77Vram: swiDecompressLZSSVram((void*)data, (void*)dst, 0, &decomStream); break; case LZ77: swiDecompressLZSSWram((void*)data, (void*)dst); break; case HUFF: swiDecompressHuffman((void*)data, (void*)dst, 0, &decomStream); break; case RLE: swiDecompressRLEWram((void*)data, (void*)dst); break; case RLEVram: swiDecompressRLEVram((void*)data, (void*)dst, 0, &decomStream); break; default: break; } }