mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2024-12-28 19:31:19 +08:00
53d5dc643f
Added a lot of #ifndef , extern C, Move inside from ARMSRC -> THUMBS, which made the compiled image smaller.. I don't know if it broke anything. Moved MF_DBGLEVEL definitions into common.h Moved print_result from util.c into appmain.c Also split up some struct typedef into header files so they could be reused in other code places. ''' danger ''' this might have broken stuff...
84 lines
No EOL
2.3 KiB
C
84 lines
No EOL
2.3 KiB
C
//-----------------------------------------------------------------------------
|
|
// Jonathan Westhues, Mar 2006
|
|
//
|
|
// This code is licensed to you under the terms of the GNU GPL, version 2 or,
|
|
// at your option, any later version. See the LICENSE.txt file for the text of
|
|
// the license.
|
|
//-----------------------------------------------------------------------------
|
|
// Just vector to AppMain(). This is in its own file so that I can place it
|
|
// with the linker script.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#ifndef __START_H
|
|
#define __START_H
|
|
|
|
#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;
|
|
}
|
|
|
|
void __attribute__((section(".startos"))) Vector(void)
|
|
{
|
|
/* Stack should have been set up by the bootloader */
|
|
// 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++;
|
|
|
|
AppMain();
|
|
}
|
|
#endif |