diff options
author | Daniel Stenberg <daniel@haxx.se> | 2003-12-12 14:07:28 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2003-12-12 14:07:28 +0000 |
commit | 0115af21d9badaab2fdb7e2404bea69a0504e4b0 (patch) | |
tree | d776d31422a5c978f9c9db5f046781c2c902f0f3 /tools | |
parent | d0f59105348bfb2d29596ff65b41a3aaeea86432 (diff) | |
download | rockbox-0115af21d9badaab2fdb7e2404bea69a0504e4b0.tar.gz rockbox-0115af21d9badaab2fdb7e2404bea69a0504e4b0.zip |
removed the neo-specific scramble-tool and made it an option to scramble
instead, and made the makefile use this
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4140 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'tools')
-rw-r--r-- | tools/mkneofile.c | 112 | ||||
-rw-r--r-- | tools/scramble.c | 88 |
2 files changed, 57 insertions, 143 deletions
diff --git a/tools/mkneofile.c b/tools/mkneofile.c deleted file mode 100644 index 93e0d45043..0000000000 --- a/tools/mkneofile.c +++ /dev/null @@ -1,112 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2003 by Open Neo - * - * All files in this archive are subject to the GNU General Public License. - * See the file COPYING in the source tree root for full license agreement. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ -#include <stdio.h> -#include <stdlib.h> - -#define MY_FIRMWARE_TYPE "Rockbox" -#define MY_HEADER_VERSION 1 - -int main (int argc, char** argv) -{ - unsigned long length,i,slen; - unsigned char *inbuf; - unsigned short checksum=0; - unsigned char *iname = argv[1]; - unsigned char *oname = argv[2]; - unsigned char header[17]; - FILE* file; - - if (argc < 3) { - printf("usage: %s <input file> <output file>\n",argv[0]); - return -1; - } - - /* open file */ - file = fopen(iname,"rb"); - if (!file) { - perror(iname); - return -1; - } - fseek(file,0,SEEK_END); - length = ftell(file); - length = (length + 3) & ~3; /* Round up to nearest 4 byte boundary */ - - if (length >= 0x32000) { - printf("error: max firmware size is 200KB!\n"); - fclose(file); - return -1; - } - - fseek(file,0,SEEK_SET); - inbuf = malloc(length); - if ( !inbuf ) { - printf("out of memory!\n"); - return -1; - } - - /* read file */ - i=fread(inbuf,1,length,file); - if ( !i ) { - perror(iname); - return -1; - } - fclose(file); - - /* calculate checksum */ - for (i=0;i<length;i++) - checksum+=inbuf[i]; - - /* make header */ - memset(header, 0, sizeof(header)); - strncpy(header,MY_FIRMWARE_TYPE,9); - header[9]='\0'; /*shouldn't have to, but to be SURE */ - header[10]=MY_HEADER_VERSION&0xFF; - header[11]=(checksum>>8)&0xFF; - header[12]=checksum&0xFF; - header[13]=(sizeof(header)>>24)&0xFF; - header[14]=(sizeof(header)>>16)&0xFF; - header[15]=(sizeof(header)>>8)&0xFF; - header[16]=sizeof(header)&0xFF; - - /* write file */ - file = fopen(oname,"wb"); - if ( !file ) { - perror(oname); - return -1; - } - if ( !fwrite(header,sizeof(header),1,file) ) { - perror(oname); - return -1; - } - if ( !fwrite(inbuf,length,1,file) ) { - perror(oname); - return -1; - } - fclose(file); - - free(inbuf); - - printf("\r\nHeader Info:\r\n\t" - "Header Type:\t\t%s\r\n\t" - "Header Version:\t\t%d\r\n\t" - "Header Checksum:\t0x%x\r\n\t" - "Data Start:\t\t0x%x\r\n\r\n", - header,header[10],checksum,sizeof(header)); - return 0; -} diff --git a/tools/scramble.c b/tools/scramble.c index 95709c0618..0021bcacaa 100644 --- a/tools/scramble.c +++ b/tools/scramble.c @@ -31,9 +31,10 @@ int main (int argc, char** argv) int headerlen = 6; FILE* file; int version; + int scramble=1; if (argc < 3) { - printf("usage: %s [-fm] [-v2] <input file> <output file>\n",argv[0]); + printf("usage: %s [-fm] [-v2] [-neo]<input file> <output file>\n",argv[0]); return -1; } @@ -44,12 +45,20 @@ int main (int argc, char** argv) version = 4; } - if(!strcmp(argv[1], "-v2")) { + else if(!strcmp(argv[1], "-v2")) { headerlen = 24; iname = argv[2]; oname = argv[3]; version = 2; } + + else if(!strcmp(argv[1], "-neo")) { + headerlen = 17; + iname = argv[2]; + oname = argv[3]; + scramble = 0; + } + /* open file */ file = fopen(iname,"rb"); @@ -83,46 +92,63 @@ int main (int argc, char** argv) } fclose(file); - /* scramble */ - slen = length/4; - for (i = 0; i < length; i++) { - unsigned long addr = (i >> 2) + ((i % 4) * slen); - unsigned char data = inbuf[i]; - data = ~((data << 1) | ((data >> 7) & 1)); /* poor man's ROL */ - outbuf[addr] = data; + if(scramble) { + /* scramble */ + slen = length/4; + for (i = 0; i < length; i++) { + unsigned long addr = (i >> 2) + ((i % 4) * slen); + unsigned char data = inbuf[i]; + data = ~((data << 1) | ((data >> 7) & 1)); /* poor man's ROL */ + outbuf[addr] = data; + } } /* calculate checksum */ for (i=0;i<length;i++) crc += inbuf[i]; - /* make header */ memset(header, 0, sizeof header); - if (headerlen == 6) { - header[0] = (length >> 24) & 0xff; - header[1] = (length >> 16) & 0xff; - header[2] = (length >> 8) & 0xff; - header[3] = length & 0xff; - header[4] = (crc >> 8) & 0xff; - header[5] = crc & 0xff; - } - else { - header[0] = - header[1] = - header[2] = - header[3] = 0xff; /* ??? */ + if(scramble) { + if (headerlen == 6) { + header[0] = (length >> 24) & 0xff; + header[1] = (length >> 16) & 0xff; + header[2] = (length >> 8) & 0xff; + header[3] = length & 0xff; + header[4] = (crc >> 8) & 0xff; + header[5] = crc & 0xff; + } + else { + header[0] = + header[1] = + header[2] = + header[3] = 0xff; /* ??? */ - header[6] = (crc >> 8) & 0xff; - header[7] = crc & 0xff; + header[6] = (crc >> 8) & 0xff; + header[7] = crc & 0xff; + + header[11] = version; - header[11] = version; + header[15] = headerlen; /* really? */ - header[15] = headerlen; /* really? */ + header[20] = (length >> 24) & 0xff; + header[21] = (length >> 16) & 0xff; + header[22] = (length >> 8) & 0xff; + header[23] = length & 0xff; + } + } + else { +#define MY_FIRMWARE_TYPE "Rockbox" +#define MY_HEADER_VERSION 1 - header[20] = (length >> 24) & 0xff; - header[21] = (length >> 16) & 0xff; - header[22] = (length >> 8) & 0xff; - header[23] = length & 0xff; + strncpy(header,MY_FIRMWARE_TYPE,9); + header[9]='\0'; /*shouldn't have to, but to be SURE */ + header[10]=MY_HEADER_VERSION&0xFF; + header[11]=(crc>>8)&0xFF; + header[12]=crc&0xFF; + header[13]=(sizeof(header)>>24)&0xFF; + header[14]=(sizeof(header)>>16)&0xFF; + header[15]=(sizeof(header)>>8)&0xFF; + header[16]=sizeof(header)&0xFF; } /* write file */ |