summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/nds/tools/bin2s.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2008-04-16 18:37:33 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2008-04-16 18:37:33 +0000
commit311dfa65d823ebb1448a12e9a24d09c7ca7a9e2a (patch)
tree47eaf22ca7bb8cc68486ffe964abd54b535902ad /c/src/lib/libbsp/arm/nds/tools/bin2s.c
parent2008-04-16 Matthieu Bucchianeri <mbucchia@gmail.com> (diff)
downloadrtems-311dfa65d823ebb1448a12e9a24d09c7ca7a9e2a.tar.bz2
2008-04-16 Matthieu Bucchianeri <mbucchia@gmail.com>
* ChangeLog, Makefile.am, README, bsp_specs, configure.ac, mk_libnds.sh, patch.libnds, preinstall.am, block/block.c, clock/clock.c, console/console.c, coproc/coproc.S, coproc/coproc.c, coproc/coproc.ld, dswifi/dswifi_license.txt, dswifi/makefile, dswifi/arm7/makefile, dswifi/arm7/source/wifi_arm7.c, dswifi/arm7/source/wifi_arm7.h, dswifi/arm9/makefile, dswifi/arm9/source/sgIP.c, dswifi/arm9/source/sgIP.h, dswifi/arm9/source/sgIP_ARP.c, dswifi/arm9/source/sgIP_ARP.h, dswifi/arm9/source/sgIP_Config.h, dswifi/arm9/source/sgIP_DHCP.c, dswifi/arm9/source/sgIP_DHCP.h, dswifi/arm9/source/sgIP_DNS.c, dswifi/arm9/source/sgIP_DNS.h, dswifi/arm9/source/sgIP_Hub.c, dswifi/arm9/source/sgIP_Hub.h, dswifi/arm9/source/sgIP_ICMP.c, dswifi/arm9/source/sgIP_ICMP.h, dswifi/arm9/source/sgIP_IP.c, dswifi/arm9/source/sgIP_IP.h, dswifi/arm9/source/sgIP_TCP.c, dswifi/arm9/source/sgIP_TCP.h, dswifi/arm9/source/sgIP_UDP.c, dswifi/arm9/source/sgIP_UDP.h, dswifi/arm9/source/sgIP_memblock.c, dswifi/arm9/source/sgIP_memblock.h, dswifi/arm9/source/sgIP_sockets.c, dswifi/arm9/source/sgIP_sockets.h, dswifi/arm9/source/wifi_arm9.c, dswifi/arm9/source/wifi_arm9.h, dswifi/common/source/dsregs.h, dswifi/common/source/spinlock.h, dswifi/common/source/spinlock.s, dswifi/common/source/wifi_shared.h, dswifi/include/dswifi7.h, dswifi/include/dswifi9.h, dswifi/include/dswifi_version.h, dswifi/include/netdb.h, dswifi/include/sgIP_errno.h, dswifi/include/netinet/in.h, fb/fb.c, fb/fb.h, include/bsp.h, include/my_ipc.h, include/tm27.h, include/types.h, include/sys/iosupport.h, irq/irq.c, irq/irq.h, libfat/gba/include/fat.h, libfat/include/fat.h, libfat/nds/include/fat.h, libfat/source/bit_ops.h, libfat/source/cache.c, libfat/source/cache.h, libfat/source/common.h, libfat/source/directory.c, libfat/source/directory.h, libfat/source/fatdir.c, libfat/source/fatdir.h, libfat/source/fatfile.c, libfat/source/fatfile.h, libfat/source/file_allocation_table.c, libfat/source/file_allocation_table.h, libfat/source/filetime.c, libfat/source/filetime.h, libfat/source/libfat.c, libfat/source/mem_allocate.h, libfat/source/partition.c, libfat/source/partition.h, libfat/source/disc_io/disc.c, libfat/source/disc_io/disc.h, libfat/source/disc_io/disc_io.h, libfat/source/disc_io/io_cf_common.c, libfat/source/disc_io/io_cf_common.h, libfat/source/disc_io/io_dldi.h, libfat/source/disc_io/io_dldi.s, libfat/source/disc_io/io_efa2.c, libfat/source/disc_io/io_efa2.h, libfat/source/disc_io/io_fcsr.c, libfat/source/disc_io/io_fcsr.h, libfat/source/disc_io/io_m3_common.c, libfat/source/disc_io/io_m3_common.h, libfat/source/disc_io/io_m3cf.c, libfat/source/disc_io/io_m3cf.h, libfat/source/disc_io/io_m3sd.c, libfat/source/disc_io/io_m3sd.h, libfat/source/disc_io/io_mpcf.c, libfat/source/disc_io/io_mpcf.h, libfat/source/disc_io/io_njsd.c, libfat/source/disc_io/io_njsd.h, libfat/source/disc_io/io_nmmc.c, libfat/source/disc_io/io_nmmc.h, libfat/source/disc_io/io_sc_common.c, libfat/source/disc_io/io_sc_common.h, libfat/source/disc_io/io_sccf.c, libfat/source/disc_io/io_sccf.h, libfat/source/disc_io/io_scsd.c, libfat/source/disc_io/io_scsd.h, libfat/source/disc_io/io_scsd_s.s, libfat/source/disc_io/io_sd_common.c, libfat/source/disc_io/io_sd_common.h, libnds/Makefile.arm7, libnds/Makefile.arm9, libnds/libnds_license.txt, libnds/basicARM7/source/defaultARM7.c, libnds/include/default_font_bin.h, libnds/include/gbfs.h, libnds/include/nds.h, libnds/include/nds/bios.h, libnds/include/nds/card.h, libnds/include/nds/dma.h, libnds/include/nds/interrupts.h, libnds/include/nds/ipc.h, libnds/include/nds/jtypes.h, libnds/include/nds/memory.h, libnds/include/nds/registers_alt.h, libnds/include/nds/reload.h, libnds/include/nds/system.h, libnds/include/nds/timers.h, libnds/include/nds/arm7/audio.h, libnds/include/nds/arm7/clock.h, libnds/include/nds/arm7/serial.h, libnds/include/nds/arm7/touch.h, libnds/include/nds/arm9/background.h, libnds/include/nds/arm9/boxtest.h, libnds/include/nds/arm9/cache.h, libnds/include/nds/arm9/console.h, libnds/include/nds/arm9/exceptions.h, libnds/include/nds/arm9/image.h, libnds/include/nds/arm9/input.h, libnds/include/nds/arm9/math.h, libnds/include/nds/arm9/ndsmotion.h, libnds/include/nds/arm9/pcx.h, libnds/include/nds/arm9/postest.h, libnds/include/nds/arm9/rumble.h, libnds/include/nds/arm9/sound.h, libnds/include/nds/arm9/sprite.h, libnds/include/nds/arm9/trig_lut.h, libnds/include/nds/arm9/video.h, libnds/include/nds/arm9/videoGL.h, libnds/source/arm7/audio.c, libnds/source/arm7/clock.c, libnds/source/arm7/microphone.c, libnds/source/arm7/spi.c, libnds/source/arm7/touch.c, libnds/source/arm7/userSettings.c, libnds/source/arm9/COS.bin, libnds/source/arm9/COS.s, libnds/source/arm9/SIN.bin, libnds/source/arm9/SIN.s, libnds/source/arm9/TAN.bin, libnds/source/arm9/TAN.s, libnds/source/arm9/boxtest.c, libnds/source/arm9/console.c, libnds/source/arm9/dcache.s, libnds/source/arm9/default_font.bin, libnds/source/arm9/default_font.s, libnds/source/arm9/exceptionHandler.S, libnds/source/arm9/exceptionHandler.s, libnds/source/arm9/exceptions.c, libnds/source/arm9/gurumeditation.c, libnds/source/arm9/icache.s, libnds/source/arm9/image.c, libnds/source/arm9/initSystem.c, libnds/source/arm9/keys.c, libnds/source/arm9/ndsmotion.c, libnds/source/arm9/pcx.c, libnds/source/arm9/rumble.c, libnds/source/arm9/sound.c, libnds/source/arm9/system.c, libnds/source/arm9/touch.c, libnds/source/arm9/video.c, libnds/source/arm9/videoGL.c, libnds/source/common/biosCalls.s, libnds/source/common/card.c, libnds/source/common/gbfs.c, libnds/source/common/interruptDispatcher.s, libnds/source/common/interrupts.c, rtc/rtc.c, sound/sound.c, sound/sound.h, start/start.S, startup/linkcmds, startup/start.c, timer/timer.c, tools/Makefile.am, tools/bin2s, tools/bin2s.c, tools/configure.ac, tools/runtest, tools/ndstool/include/arm7_sha1_homebrew.h, tools/ndstool/include/arm7_sha1_nintendo.h, tools/ndstool/include/banner.h, tools/ndstool/include/bigint.h, tools/ndstool/include/crc.h, tools/ndstool/include/default_icon.h, tools/ndstool/include/encryption.h, tools/ndstool/include/header.h, tools/ndstool/include/hook.h, tools/ndstool/include/little.h, tools/ndstool/include/loadme.h, tools/ndstool/include/logo.h, tools/ndstool/include/ndscreate.h, tools/ndstool/include/ndsextract.h, tools/ndstool/include/ndstool.h, tools/ndstool/include/ndstree.h, tools/ndstool/include/overlay.h, tools/ndstool/include/passme.h, tools/ndstool/include/passme_sram.h, tools/ndstool/include/passme_vhd1.h, tools/ndstool/include/passme_vhd2.h, tools/ndstool/include/raster.h, tools/ndstool/include/sha1.h, tools/ndstool/include/types.h, tools/ndstool/source/arm7_sha1_homebrew.c, tools/ndstool/source/arm7_sha1_nintendo.c, tools/ndstool/source/banner.cpp, tools/ndstool/source/bigint.cpp, tools/ndstool/source/compile_date.c, tools/ndstool/source/crc.cpp, tools/ndstool/source/default_icon.c, tools/ndstool/source/encryption.cpp, tools/ndstool/source/header.cpp, tools/ndstool/source/hook.cpp, tools/ndstool/source/loadme.c, tools/ndstool/source/logo.cpp, tools/ndstool/source/ndscodes.cpp, tools/ndstool/source/ndscreate.cpp, tools/ndstool/source/ndsextract.cpp, tools/ndstool/source/ndstool.cpp, tools/ndstool/source/ndstree.cpp, tools/ndstool/source/passme.cpp, tools/ndstool/source/passme_sram.c, tools/ndstool/source/raster.cpp, tools/ndstool/source/sha1.cpp, touchscreen/README.reco, touchscreen/parser.c, touchscreen/reco.c, touchscreen/reco.h, touchscreen/touchscreen.c, touchscreen/touchscreen.h, wifi/compat.c, wifi/compat.h, wifi/wifi.c: New files.
Diffstat (limited to 'c/src/lib/libbsp/arm/nds/tools/bin2s.c')
-rw-r--r--c/src/lib/libbsp/arm/nds/tools/bin2s.c213
1 files changed, 213 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/arm/nds/tools/bin2s.c b/c/src/lib/libbsp/arm/nds/tools/bin2s.c
new file mode 100644
index 0000000000..5c0cd067d8
--- /dev/null
+++ b/c/src/lib/libbsp/arm/nds/tools/bin2s.c
@@ -0,0 +1,213 @@
+/*---------------------------------------------------------------------------------
+ $Id$
+
+ bin2s: convert a binary file to a gcc asm module
+ for gfx/foo.bin it'll write foo_bin (an array of char)
+ foo_bin_end, and foo_bin_len (an unsigned int)
+ for 4bit.chr it'll write _4bit_chr, _4bit_chr_end, and
+ _4bit_chr_len
+
+
+ Copyright 2003 - 2005 Damian Yerrick
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ IN THE SOFTWARE.
+
+ $Log$
+ Revision 1.3 2005/08/03 05:14:53 wntrmute
+ corrected typo _size, not _len
+
+ Revision 1.2 2005/08/01 03:42:53 wntrmute
+ strip path from input file
+
+ Revision 1.1 2005/07/21 13:03:05 wntrmute
+ renamed labels to conform with previous bin2o
+ added user configurable alignment
+
+
+---------------------------------------------------------------------------------*/
+
+
+
+/*
+.align
+.global SomeLabel_len
+.int 1234
+.global SomeLabel
+.byte blah,blah,blah,blah...
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+/*---------------------------------------------------------------------------------
+ Print the closest valid C identifier to a given word.
+---------------------------------------------------------------------------------*/
+void strnident(FILE *fout, const char *src) {
+//---------------------------------------------------------------------------------
+ char got_first = 0;
+
+ while(*src != 0) {
+
+ int s = *src++;
+
+ /* initial digit */
+ if(isdigit(s) && !got_first)
+ fputc('_', fout); /* stick a '_' before an initial digit */
+
+ /* convert only out-of-range characters */
+ if(!isalpha(s) && !isdigit(s) && (s != '_')) {
+ if(s == '-' || s == '.' || s == '/') s = '_';
+ else
+ s = 0;
+ }
+
+ if(s) {
+ fputc(s, fout);
+ got_first = 1;
+ }
+ }
+}
+
+
+//---------------------------------------------------------------------------------
+int main(int argc, char **argv) {
+//---------------------------------------------------------------------------------
+ FILE *fin;
+ size_t filelen;
+ int linelen;
+ int arg;
+ int alignment = 4;
+ if(argc < 2) {
+ fputs( "bin2s - convert binary files to assembly language\n"
+ "typical usage: bin2s foo.bin bar.bin baz.bin > foo.s\n", stderr);
+ return 1;
+ }
+
+ for(arg = 1; arg < argc; arg++) {
+
+ if (argv[arg][0] == '-')
+ {
+ switch (argv[arg][1])
+ {
+ case 'a':
+
+ alignment = (argc > arg) ? strtoul(argv[++arg], 0, 0) : 0;
+
+ if ( alignment == 0 ) alignment =4;
+ break;
+ }
+ continue;
+ }
+
+
+ fin = fopen(argv[arg], "rb");
+
+ if(!fin) {
+ fputs("bin2s: could not open ", stderr);
+ perror(argv[arg]);
+ return 1;
+ }
+
+ fseek(fin, 0, SEEK_END);
+ filelen = ftell(fin);
+ rewind(fin);
+
+ if(filelen == 0) {
+ fclose(fin);
+ fprintf(stderr, "bin2s: warning: skipping empty file %s\n", argv[arg]);
+ continue;
+ }
+
+ char *ptr = argv[arg];
+ char chr;
+ char *filename = NULL;
+
+ while ( (chr=*ptr) ) {
+
+ if ( chr == '\\' || chr == '/') {
+
+ filename = ptr;
+ }
+
+ ptr++;
+ }
+
+ if ( NULL != filename ) {
+ filename++;
+ } else {
+ filename = argv[arg];
+ }
+
+ /*---------------------------------------------------------------------------------
+ Generate the prolog for each included file. It has two purposes:
+
+ 1. provide length info, and
+ 2. align to user defined boundary, default is 32bit
+
+ ---------------------------------------------------------------------------------*/
+ fprintf( stdout, "/* Generated by BIN2S - please don't edit directly */\n"
+ "\t.section .rodata\n"
+ "\t.balign %d\n"
+ "\t.global ", alignment);
+ strnident(stdout, filename);
+ fputs("_size\n", stdout);
+ strnident(stdout, filename);
+ printf("_size: .int %lu\n\t.global ", (unsigned long)filelen);
+ strnident(stdout, filename);
+ fputs("\n", stdout);
+ strnident(stdout, filename);
+ fputs(":\n\t.byte ", stdout);
+
+ linelen = 0;
+
+ while(filelen > 0) {
+ unsigned char c = fgetc(fin);
+
+ printf("%3u", (unsigned int)c);
+ filelen--;
+
+ /* don't put a comma after the last item */
+ if(filelen) {
+
+ /* break after every 16th number */
+ if(++linelen >= 16) {
+ linelen = 0;
+ fputs("\n\t.byte ", stdout);
+ } else {
+ fputc(',', stdout);
+ }
+ }
+ }
+
+ fputs("\n\n\t.global ", stdout);
+ strnident(stdout, filename);
+ fputs("_end\n", stdout);
+ strnident(stdout, filename);
+ fputs("_end:\n\n", stdout);
+
+
+ fclose(fin);
+ }
+
+ return 0;
+}
+