summaryrefslogtreecommitdiffstats
path: root/contrib/mkQNXnbi/mkQNXnbi.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/mkQNXnbi/mkQNXnbi.c')
-rw-r--r--contrib/mkQNXnbi/mkQNXnbi.c196
1 files changed, 0 insertions, 196 deletions
diff --git a/contrib/mkQNXnbi/mkQNXnbi.c b/contrib/mkQNXnbi/mkQNXnbi.c
deleted file mode 100644
index 2ec2dc4b..00000000
--- a/contrib/mkQNXnbi/mkQNXnbi.c
+++ /dev/null
@@ -1,196 +0,0 @@
-//*****************************************************************************
-//
-// Purpose: Make a boot-image for EtherBoot
-//
-//
-// Compiler: This source can be compiled with gcc and Watcom C
-//
-//
-// Note: The QNX boot image can be build with any reasonable
-// start address, e.g. 0x1000 (default) or 0x10000
-// (widespread Boot-Rom address)
-//
-//
-// Author: Anders Larsen
-//
-//
-// Copyright: (C) 1999 by
-//
-// Anders Larsen
-// systems engineer
-// Gutleuthausstr. 3
-// D-69469 Weinheim
-// Germany
-// phone: +49-6201-961717
-// fax: +49-6201-961718
-// e-mail: al@alarsen.net
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-//
-//-----------------------------------------------------------------------------
-//
-// Change Log:
-// V0.2: Sun 1999-12-13 Anders Larsen <al@alarsen.net>
-//*****************************************************************************
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-
-
-// max. size of QNX OS boot image is 512K
-#define MAXSIZE (512*1024)
-
-typedef unsigned short ushort_t;
-typedef unsigned long ulong_t;
-
-
-// global header of tagged image:
-struct initial_t
-{
- ulong_t magic;
- ulong_t length;
- ulong_t location;
- ulong_t start;
-};
-
-
-// header of each image:
-struct header_t
-{
- ulong_t flags;
- ulong_t loadaddr;
- ulong_t imgsize;
- ulong_t memsize;
-};
-
-
-// global header of the QNX EtherBoot image:
-struct qnx_loader_t
-{
- struct initial_t setup;
- struct header_t qnx;
-};
-
-
-// global header:
-union
-{
- struct qnx_loader_t h;
- char filler[512];
-} header;
-
-
-char buffer[MAXSIZE];
-
-
-int usage( char* const* argv )
-{
- fprintf( stderr, "%s - make a tagged boot image for EtherBoot\n", *argv );
- fprintf( stderr, "\nuse:\n" );
- fprintf( stderr, "%s [ -<option> ]*\n", *argv );
- fprintf( stderr, "\noptions:\n" );
- fprintf( stderr, " i <input file> : QNX boot file (default: stdin)\n" );
- fprintf( stderr, " o <output file> : tagged image file (default: stdout)\n" );
- fprintf( stderr, " v : be verbose\n" );
- return EXIT_FAILURE;
-}
-
-#ifdef __USAGE
-%C - make a tagged boot image for EtherBoot
-
-use:
-%C [ -<option> ]*
-
-options:
- i <input file> : QNX boot file (default: stdin)
- o <output file> : tagged image file (default: stdout)
- v : be verbose
-#endif
-
-
-int main( int argc, char* const* argv )
-{
- int ch, l;
- int verbose = 0;
-
- while ( ( ch = getopt( argc, argv, "hi:o:v" ) ) != EOF )
- switch ( ch )
- {
- case 'i':
- if ( !freopen( optarg, "r", stdin ) )
- {
- perror( "can't open input file" );
- return EXIT_FAILURE;
- }
- break;
-
- case 'o':
- if ( !freopen( optarg, "w", stdout ) )
- {
- perror( "can't create output file" );
- return EXIT_FAILURE;
- }
- break;
-
- case 'v':
- verbose++;
- break;
-
- case 'h':
- default:
- return usage( argv );
- }
- if ( optind != argc )
- return usage( argv );
-
- memset( &header, 0, sizeof header );
- header.h.setup.magic = 0x1b031336; // magic number
- header.h.setup.length = 4;
- header.h.setup.location = 0x93e00000; // just below the EtherBoot rom
- header.h.setup.start = 0; // filled in dynamically
- header.h.qnx.flags = 0x04000004; // single image only
- header.h.qnx.loadaddr = 0; // filled in dynamically
- header.h.qnx.imgsize = 0; // filled in dynamically
- header.h.qnx.memsize = 0; // filled in dynamically
-
- // read the QNX image from stdin:
- for ( ; ( l = fread( buffer + header.h.qnx.imgsize, 1, 1024, stdin ) ) > 0;
- header.h.qnx.imgsize += l
- )
- ;
- header.h.qnx.memsize = header.h.qnx.imgsize;
-
- // fill in the real load-address of the QNX boot image:
- header.h.setup.start = *(ushort_t*)&buffer[10] << 16;
- header.h.qnx.loadaddr = *(ushort_t*)&buffer[10] << 4;
-
- // write the tagged image file to stdout:
- fwrite( &header, 1, 512, stdout );
- fwrite( buffer, 1, header.h.qnx.imgsize, stdout );
-
- if ( verbose )
- {
- // print diagnostic information:
- fprintf( stderr, "QNX image size: %d bytes (%dK), load addr: 0x%05X\n",
- header.h.qnx.imgsize,
- header.h.qnx.imgsize / 1024,
- header.h.qnx.loadaddr
- );
- }
- return EXIT_SUCCESS;
-}