Index: c/src/lib/libbsp/i386/i386ex/include/bsp.h
===================================================================
--- c/src/lib/libbsp/i386/i386ex/include/bsp.h	(revision 6c58b6fea3054acd2da3ebc741b6a4632c131602)
+++ c/src/lib/libbsp/i386/i386ex/include/bsp.h	(revision fe6ef776a79c19d0950891252da4343a6eeb9c1d)
@@ -22,4 +22,6 @@
 #include <rtems.h>
 #include <iosupp.h>
+#include <console.h>
+#include <clockdrv.h>
 
 /*
@@ -89,15 +91,4 @@
 #define Is_rx_ready( _status ) ( (_status) & 0x01 )
 
-/* Timer constants: WE DON'T use THESE */
-
-#define IERA   0x106     /* Interrupt Enable Register A */
-#define IMRA   0x112     /* Interrupt Mask Register A */
-#define TACR   0x118     /* Timer A Control Register */
-#define TADR   0x11e     /* Timer A Data Register */
-
-#define IERB   0x108     /* Interrupt Enable Register B */
-#define TBCR   0x11a     /* Timer B Control Register */
-#define TBDR   0x120     /* Timer B Data Register */
-
 /* Structures */
 
Index: c/src/lib/libbsp/i386/i386ex/startup/bspstart.c
===================================================================
--- c/src/lib/libbsp/i386/i386ex/startup/bspstart.c	(revision 6c58b6fea3054acd2da3ebc741b6a4632c131602)
+++ c/src/lib/libbsp/i386/i386ex/startup/bspstart.c	(revision fe6ef776a79c19d0950891252da4343a6eeb9c1d)
@@ -21,12 +21,15 @@
  */
 
-#include <rtems.h>
 #include <bsp.h>
+#include <rtems/libio.h>
+ 
 #include <libcsupport.h>
-
-#include <stackchk.h>
-
-#include <stdio.h>
+ 
+#include <fcntl.h>
+
+#ifdef PRINTON
+extern char inbyte(void);
 extern void outbyte(char);
+#endif
 
 /*
@@ -40,41 +43,104 @@
 rtems_cpu_table Cpu_table;
 
+char *rtems_progname;
+
 /*      Initialize whatever libc we are using
  *      called from postdriver hook
  */
-
+ 
 void bsp_libc_init()
 {
     extern int end;
     rtems_unsigned32        heap_start;
-
+ 
     heap_start = (rtems_unsigned32) &end;
     if (heap_start & (CPU_ALIGNMENT-1))
         heap_start = (heap_start + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
-
+ 
     RTEMS_Malloc_Initialize((void *) heap_start, 64 * 1024, 0);
-
+ 
+    /*
+     *  Init the RTEMS libio facility to provide UNIX-like system
+     *  calls for use by newlib (ie: provide __open, __close, etc)
+     *  Uses malloc() to get area for the iops, so must be after malloc init
+     */
+ 
+    rtems_libio_init();
+ 
     /*
      * Set up for the libc handling.
      */
-
+ 
     if (BSP_Configuration.ticks_per_timeslice > 0)
         libc_init(1);                /* reentrant if possible */
     else
         libc_init(0);                /* non-reentrant */
-
+}
+
+/*
+ *  Function:   bsp_pretasking_hook
+ *  Created:    95/03/10
+ *
+ *  Description:
+ *      BSP pretasking hook.  Called just before drivers are initialized.
+ *      Used to setup libc and install any BSP extensions.
+ *
+ *  NOTES:
+ *      Must not use libc (to do io) from here, since drivers are
+ *      not yet initialized.
+ *
+ */
+ 
+void
+bsp_pretasking_hook(void)
+{
+    bsp_libc_init();
+ 
+#ifdef STACK_CHECKER_ON
     /*
      *  Initialize the stack bounds checker
+     *  We can either turn it on here or from the app.
      */
-
-#ifdef STACK_CHECKER_ON
+ 
     Stack_check_Initialize();
 #endif
-
-}
-extern char inbyte(void);
-extern void outbyte(char);
-
-int bsp_start(
+ 
+#ifdef RTEMS_DEBUG
+    rtems_debug_enable( RTEMS_DEBUG_ALL_MASK );
+#endif
+}
+
+
+/*
+ * After drivers are setup, register some "filenames"
+ * and open stdin, stdout, stderr files
+ *
+ * Newlib will automatically associate the files with these
+ * (it hardcodes the numbers)
+ */
+ 
+void
+bsp_postdriver_hook(void)
+{
+  int stdin_fd, stdout_fd, stderr_fd;
+  int error_code;
+ 
+  error_code = 'S' << 24 | 'T' << 16;
+ 
+  if ((stdin_fd = __open("/dev/console", O_RDONLY, 0)) == -1)
+    rtems_fatal_error_occurred( error_code | 'D' << 8 | '0' );
+ 
+  if ((stdout_fd = __open("/dev/console", O_WRONLY, 0)) == -1)
+    rtems_fatal_error_occurred( error_code | 'D' << 8 | '1' );
+ 
+  if ((stderr_fd = __open("/dev/console", O_WRONLY, 0)) == -1)
+    rtems_fatal_error_occurred( error_code | 'D' << 8 | '2' );
+ 
+  if ((stdin_fd != 0) || (stdout_fd != 1) || (stderr_fd != 2))
+    rtems_fatal_error_occurred( error_code | 'I' << 8 | 'O' );
+}
+
+
+int main(
   int argc,
   char **argv,
@@ -82,12 +148,16 @@
 )
 {
+
 #ifdef PRINTON   
-
   outbyte('a');
   outbyte('b');
   outbyte('c');
   outbyte ('S');
-
-#endif
+#endif
+
+  if ((argc > 0) && argv && argv[0])
+    rtems_progname = argv[0];
+  else
+    rtems_progname = "RTEMS";
 
   /*
@@ -95,21 +165,21 @@
    */
 
-  Cpu_table.pretasking_hook = NULL;
-
-  Cpu_table.predriver_hook = bsp_libc_init;  /* RTEMS resources available */
-
-  Cpu_table.postdriver_hook = NULL;   /* Call our main() for constructors */
-
+  Cpu_table.pretasking_hook = bsp_pretasking_hook;  /* init libc, etc. */
+ 
+  Cpu_table.predriver_hook = NULL;
+ 
+  Cpu_table.postdriver_hook = bsp_postdriver_hook;
+ 
   Cpu_table.idle_task = NULL;  /* do not override system IDLE task */
-
+ 
   Cpu_table.do_zero_of_workspace = TRUE;
-
+ 
   Cpu_table.interrupt_table_segment = get_ds();
-
+ 
   Cpu_table.interrupt_table_offset = (void *)Interrupt_descriptor_table;
-
+ 
   Cpu_table.interrupt_stack_size = 4096;
-
-  Cpu_table.extra_system_initialization_stack = 0;
+ 
+  Cpu_table.extra_mpci_receive_server_stack = 0;
 
   /*
@@ -122,5 +192,4 @@
      RAM_END - BSP_Configuration.work_space_size;
 
-  
 
 #ifdef SPRINTON 
@@ -136,5 +205,5 @@
    */
 
-  BSP_Configuration.maximum_regions++;
+  BSP_Configuration.RTEMS_api_configuration->maximum_regions++;
 
   /*
@@ -156,5 +225,5 @@
   rtems_initialize_executive( &BSP_Configuration, &Cpu_table );
   /* does not return */
-  /* no cleanup necessary for Force CPU-386 */
+  /* no cleanup necessary for i386ex */
   for (;;);  /* was return 0 to go to the debug monitor */
 }
