mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-21 05:43:48 -07:00
ADD: pwpiwi 's FPGA compress
This commit is contained in:
parent
f53020e729
commit
9783989b40
15 changed files with 432 additions and 291 deletions
|
@ -11,23 +11,75 @@
|
|||
|
||||
#include "proxmark3.h"
|
||||
#include "apps.h"
|
||||
#include "zlib.h"
|
||||
#include "BigBuf.h"
|
||||
|
||||
static uint8_t *next_free_memory;
|
||||
extern struct common_area common_area;
|
||||
extern char __data_src_start__, __data_start__, __data_end__, __bss_start__, __bss_end__;
|
||||
|
||||
|
||||
static voidpf inflate_malloc(voidpf opaque, uInt items, uInt size)
|
||||
{
|
||||
uint8_t *allocated_memory;
|
||||
|
||||
allocated_memory = next_free_memory;
|
||||
next_free_memory += items*size;
|
||||
return allocated_memory;
|
||||
}
|
||||
|
||||
|
||||
static void inflate_free(voidpf opaque, voidpf address)
|
||||
{
|
||||
// nothing to do
|
||||
|
||||
}
|
||||
|
||||
static void uncompress_data_section(void)
|
||||
{
|
||||
z_stream data_section;
|
||||
|
||||
next_free_memory = BigBuf_get_addr();
|
||||
|
||||
// initialize zstream structure
|
||||
data_section.next_in = (uint8_t *) &__data_src_start__;
|
||||
data_section.avail_in = &__data_end__ - &__data_start__; // uncompressed size. Wrong but doesn't matter.
|
||||
data_section.next_out = (uint8_t *) &__data_start__;
|
||||
data_section.avail_out = &__data_end__ - &__data_start__; // uncompressed size. Correct.
|
||||
data_section.zalloc = &inflate_malloc;
|
||||
data_section.zfree = &inflate_free;
|
||||
data_section.opaque = NULL;
|
||||
|
||||
// initialize zlib for inflate
|
||||
inflateInit2(&data_section, 15);
|
||||
|
||||
// uncompress data segment to RAM
|
||||
inflate(&data_section, Z_FINISH);
|
||||
|
||||
// save the size of the compressed data section
|
||||
common_area.arg1 = data_section.total_in;
|
||||
}
|
||||
|
||||
|
||||
extern char __data_start__, __data_src_start__, __data_end__, __bss_start__, __bss_end__;
|
||||
void __attribute__((section(".startos"))) Vector(void)
|
||||
{
|
||||
/* Stack should have been set up by the bootloader */
|
||||
char *src, *dst, *end;
|
||||
// char *src;
|
||||
char *dst, *end;
|
||||
|
||||
uncompress_data_section();
|
||||
|
||||
/* Set up (that is: clear) BSS. */
|
||||
dst = &__bss_start__;
|
||||
end = &__bss_end__;
|
||||
while(dst < end) *dst++ = 0;
|
||||
|
||||
/* Set up data segment: Copy from flash to ram */
|
||||
src = &__data_src_start__;
|
||||
dst = &__data_start__;
|
||||
end = &__data_end__;
|
||||
while(dst < end) *dst++ = *src++;
|
||||
// Set up data segment: Copy from flash to ram
|
||||
// src = &__data_src_start__;
|
||||
// dst = &__data_start__;
|
||||
// end = &__data_end__;
|
||||
// while(dst < end) *dst++ = *src++;
|
||||
|
||||
|
||||
AppMain();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue