analog-utilities/src/v2loader.h

36 lines
680 B
C

#include <zlib.h>
void do_jump(uint16_t addr) {
void_jump jump = (void_jump)addr;
jump();
}
void load_and_jump(char *filename, uint16_t execaddr) {
FILE *f;
size_t bytesread;
long fsz;
long total = 0;
char *ptr, *loadaddr;
f = fopen(filename, "rb");
if(f == NULL) {
return;
}
fseek(f, 0, SEEK_END);
fsz = ftell(f);
fseek(f, 0, SEEK_SET);
ptr = loadaddr = (char *)execaddr;
while(!feof(f) && (fsz > 0)) {
bytesread = fread(ptr, 1, longmin(512, fsz), f);
if(bytesread > 0) {
ptr += bytesread;
fsz -= bytesread;
}
};
fclose(f);
do_jump(execaddr);
}