summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2003-12-12 14:07:28 +0000
committerDaniel Stenberg <daniel@haxx.se>2003-12-12 14:07:28 +0000
commit0115af21d9badaab2fdb7e2404bea69a0504e4b0 (patch)
treed776d31422a5c978f9c9db5f046781c2c902f0f3 /tools
parentd0f59105348bfb2d29596ff65b41a3aaeea86432 (diff)
downloadrockbox-0115af21d9badaab2fdb7e2404bea69a0504e4b0.tar.gz
rockbox-0115af21d9badaab2fdb7e2404bea69a0504e4b0.tar.bz2
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.c112
-rw-r--r--tools/scramble.c88
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 */