You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
Add NON-WORKING gzip DEFLATE support
This commit is contained in:
@@ -11,6 +11,9 @@
|
||||
#include "memory.h"
|
||||
#include "segment_symbols.h"
|
||||
#include "segments.h"
|
||||
#ifdef GZIP
|
||||
#include "gzip/gzipdma.h"
|
||||
#endif
|
||||
#ifdef UNF
|
||||
#include "usb/debug.h"
|
||||
#endif
|
||||
@@ -247,7 +250,7 @@ u32 main_pool_pop_state(void) {
|
||||
* Perform a DMA read from ROM. The transfer is split into 4KB blocks, and this
|
||||
* function blocks until completion.
|
||||
*/
|
||||
static void dma_read(u8 *dest, u8 *srcStart, u8 *srcEnd) {
|
||||
void dma_read(u8 *dest, u8 *srcStart, u8 *srcEnd) {
|
||||
u32 size = ALIGN16(srcEnd - srcStart);
|
||||
|
||||
osInvalDCache(dest, size);
|
||||
@@ -336,7 +339,11 @@ void *load_segment_decompress(s32 segment, u8 *srcStart, u8 *srcEnd) {
|
||||
dma_read(compressed, srcStart, srcEnd);
|
||||
dest = main_pool_alloc(*size, MEMORY_POOL_LEFT);
|
||||
if (dest != NULL) {
|
||||
#ifdef GZIP
|
||||
slidma(dest, compressed, compSize);
|
||||
#else
|
||||
slidstart(compressed, dest);
|
||||
#endif
|
||||
set_segment_base_addr(segment, dest);
|
||||
main_pool_free(compressed);
|
||||
} else {
|
||||
@@ -354,7 +361,11 @@ void *load_segment_decompress_heap(u32 segment, u8 *srcStart, u8 *srcEnd) {
|
||||
|
||||
if (compressed != NULL) {
|
||||
dma_read(compressed, srcStart, srcEnd);
|
||||
#ifdef GZIP
|
||||
slidma(gDecompressionHeap, compressed, compSize);
|
||||
#else
|
||||
slidstart(compressed, gDecompressionHeap);
|
||||
#endif
|
||||
set_segment_base_addr(segment, gDecompressionHeap);
|
||||
main_pool_free(compressed);
|
||||
} else {
|
||||
|
||||
34
src/gzip/gzip.h
Executable file
34
src/gzip/gzip.h
Executable file
@@ -0,0 +1,34 @@
|
||||
#ifndef __GZIP_H__
|
||||
#define __GZIP_H__
|
||||
|
||||
#ifndef NULL
|
||||
#ifdef __cplusplus
|
||||
#define NULL 0
|
||||
#else
|
||||
#define NULL ((void *)0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define INBUFSIZ 4096 // input buffer size
|
||||
#define WSIZE 0x8000
|
||||
|
||||
typedef struct {
|
||||
u8 * next_addr;
|
||||
u32 rest_size;
|
||||
} FILE_HND;
|
||||
|
||||
#define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf(0))
|
||||
#define try_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf(1))
|
||||
|
||||
extern unsigned int insize; // valid bytes in inbuf
|
||||
extern unsigned int inptr; // index of next byte to be processed in inbuf
|
||||
extern unsigned int outcnt; // bytes in output buffer
|
||||
extern u8 inbuf[]; // input buffer
|
||||
extern u8 *op; // Sliding window and suffix table
|
||||
|
||||
extern int inflate(void);
|
||||
extern int fill_inbuf(int eof_ok);
|
||||
extern void flush_window(void);
|
||||
extern void dma_read(u8 *dest, u8 *srcStart, u8 *srcEnd);
|
||||
|
||||
#endif
|
||||
768
src/gzip/gzipdma.c
Executable file
768
src/gzip/gzipdma.c
Executable file
File diff suppressed because it is too large
Load Diff
14
src/gzip/gzipdma.h
Executable file
14
src/gzip/gzipdma.h
Executable file
@@ -0,0 +1,14 @@
|
||||
#ifndef _GZIP_DMA_H_
|
||||
#define _GZIP_DMA_H_
|
||||
|
||||
#ifdef _LANGUAGE_C_PLUS_PLUS
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void slidma(unsigned long dmasrc, char *dst, unsigned long dmasiz);
|
||||
|
||||
#ifdef _LANGUAGE_C_PLUS_PLUS
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _GZIP_DMA_H_ */
|
||||
Reference in New Issue
Block a user