Index: c/src/lib/libbsp/m68k/mvme162/clock/ckinit.c
===================================================================
--- c/src/lib/libbsp/m68k/mvme162/clock/ckinit.c	(revision c6fb8e90960d4504018e61bbe2bf06ff7f116d72)
+++ c/src/lib/libbsp/m68k/mvme162/clock/ckinit.c	(revision 3a4ae6c210bcc37754767966f1128ae23c77b6af)
@@ -28,7 +28,6 @@
 #include <stdlib.h>
 
-#include <rtems.h>
 #include <bsp.h>
-#include <clockdrv.h>
+#include <rtems/libio.h>
 
 #define MS_COUNT          1000            /* T2's countdown constant (1 ms) */
@@ -39,22 +38,31 @@
 rtems_isr_entry  Old_ticker;
 
-rtems_device_driver Clock_initialize( 
-  rtems_device_major_number major,
-  rtems_device_minor_number minor,
-  void *pargp,
-  rtems_id tid,
-  rtems_unsigned32 *rval
-)
+void Clock_exit( void );
+ 
+#define CLOCK_VECTOR (VBR0 * 0x10 + 0x9)
+/*
+ * These are set by clock driver during its init
+ */
+ 
+rtems_device_major_number rtems_clock_major = ~0;
+rtems_device_minor_number rtems_clock_minor;
+ 
+
+/*
+ *  ISR Handler
+ */
+
+rtems_isr Clock_isr(rtems_vector_number vector)
 {
-  Install_clock( Clock_isr );
-}
+  Clock_driver_ticks += 1;
+  lcsr->timer_cnt_2 = 0;            /* clear counter */
+  lcsr->intr_clear |= 0x02000000;
 
-void ReInstall_clock(rtems_isr_entry clock_isr)
-{
-  rtems_unsigned32 isrlevel;
-
-  rtems_interrupt_disable( isrlevel );
-  (void) set_vector( clock_isr, VBR0 * 0x10 + 0x9, 1 );
-  rtems_interrupt_enable( isrlevel );
+  if ( Clock_isrs == 1 ) {
+    rtems_clock_tick();
+    Clock_isrs = BSP_Configuration.microseconds_per_tick / 1000;
+  }
+  else 
+    Clock_isrs -= 1;
 }
 
@@ -67,5 +75,5 @@
   if ( BSP_Configuration.ticks_per_timeslice ) {
     Old_ticker = 
-      (rtems_isr_entry) set_vector( clock_isr, VBR0 * 0x10 + 0x9, 1 );
+      (rtems_isr_entry) set_vector( clock_isr, CLOCK_VECTOR, 1 );
     lcsr->vector_base |= MASK_INT;   /* unmask VMEchip2 interrupts */
     lcsr->to_ctl = 0xE7;             /* prescaler to 1 MHz (see Appendix A1) */
@@ -80,5 +88,13 @@
     atexit( Clock_exit );
   } 
+}
 
+void ReInstall_clock(rtems_isr_entry clock_isr)
+{
+  rtems_unsigned32 isrlevel;
+
+  rtems_interrupt_disable( isrlevel );
+  (void) set_vector( clock_isr, CLOCK_VECTOR, 1 );
+  rtems_interrupt_enable( isrlevel );
 }
 
@@ -87,2 +103,50 @@
 /* Dummy for now. See other m68k BSP's for code examples */
 }
+
+rtems_device_driver Clock_initialize(
+  rtems_device_major_number major,
+  rtems_device_minor_number minor,
+  void *pargp
+)
+{
+  Install_clock( Clock_isr );
+ 
+  /*
+   * make major/minor avail to others such as shared memory driver
+   */
+ 
+  rtems_clock_major = major;
+  rtems_clock_minor = minor;
+ 
+  return RTEMS_SUCCESSFUL;
+}
+ 
+rtems_device_driver Clock_control(
+  rtems_device_major_number major,
+  rtems_device_minor_number minor,
+  void *pargp
+)
+{
+    rtems_libio_ioctl_args_t *args = pargp;
+ 
+    if (args == 0)
+        goto done;
+ 
+    /*
+     * This is hokey, but until we get a defined interface
+     * to do this, it will just be this simple...
+     */
+ 
+    if (args->command == rtems_build_name('I', 'S', 'R', ' '))
+    {
+        Clock_isr(CLOCK_VECTOR);
+    }
+    else if (args->command == rtems_build_name('N', 'E', 'W', ' '))
+    {
+        ReInstall_clock(args->buffer);
+    }
+ 
+done:
+    return RTEMS_SUCCESSFUL;
+}
+
Index: c/src/lib/libbsp/m68k/mvme162/console/console.c
===================================================================
--- c/src/lib/libbsp/m68k/mvme162/console/console.c	(revision c6fb8e90960d4504018e61bbe2bf06ff7f116d72)
+++ c/src/lib/libbsp/m68k/mvme162/console/console.c	(revision 3a4ae6c210bcc37754767966f1128ae23c77b6af)
@@ -22,8 +22,7 @@
 #define M162_INIT
 
-#include <rtems.h>
-#include "console.h"
-#include "bsp.h"
-#include "ringbuf.h"
+#include <bsp.h>
+#include <rtems/libio.h>
+#include <ringbuf.h>
 
 Ring_buffer_t  Buffer[2];
@@ -55,10 +54,9 @@
   rtems_device_major_number  major,
   rtems_device_minor_number  minor,
-  void                      *arg,
-  rtems_id                   self,
-  rtems_unsigned32          *status
+  void                      *arg
 )
 {
   int     i;
+  rtems_status_code status;
   
   /*
@@ -80,5 +78,32 @@
   mcchip->SCC_int_ctl = 0x13;     /* SCC IEN, IPL3 */
 
-  *status = RTEMS_SUCCESSFUL;
+  status = rtems_io_register_name(
+    "/dev/console",
+    major,
+    (rtems_device_minor_number) 0
+  );
+ 
+  if (status != RTEMS_SUCCESSFUL)
+    rtems_fatal_error_occurred(status);
+ 
+  status = rtems_io_register_name(
+    "/dev/tty00",
+    major,
+    (rtems_device_minor_number) 0
+  );
+ 
+  if (status != RTEMS_SUCCESSFUL)
+    rtems_fatal_error_occurred(status);
+ 
+  status = rtems_io_register_name(
+    "/dev/tty01",
+    major,
+    (rtems_device_minor_number) 0
+  );
+ 
+  if (status != RTEMS_SUCCESSFUL)
+    rtems_fatal_error_occurred(status);
+ 
+  return RTEMS_SUCCESSFUL;
 }
 
@@ -101,5 +126,5 @@
  */
 
-char char_wait(int port)
+char inbyte(int port)
 {
   unsigned char tmp_char;
@@ -114,5 +139,5 @@
  */
 
-void char_put(int port, char ch)
+void outbyte(int port, char ch)
 {
   while (1) {
@@ -123,44 +148,107 @@
 
 /*
- *    Map port A (1) to stdin, stdout, and stderr.
- *    Map everything else to port B (0).
- */
-
-int __read(int fd, char *buf, int nbytes)
-{
-  int i, port;
-
-  if ( fd <= 2 ) port = 1;
-  else           port = 0;
-
-  for (i = 0; i < nbytes; i++) {
-    *(buf + i) = char_wait(port);
-    if ((*(buf + i) == '\n') || (*(buf + i) == '\r')) {
-      (*(buf + i++)) = '\n';
-      (*(buf + i)) = 0;
+ *  Open entry point
+ */
+
+rtems_device_driver console_open(
+  rtems_device_major_number major,
+  rtems_device_minor_number minor,
+  void                    * arg
+)
+{
+  return RTEMS_SUCCESSFUL;
+}
+ 
+/*
+ *  Close entry point
+ */
+
+rtems_device_driver console_close(
+  rtems_device_major_number major,
+  rtems_device_minor_number minor,
+  void                    * arg
+)
+{
+  return RTEMS_SUCCESSFUL;
+}
+
+/*
+ * read bytes from the serial port. We only have stdin.
+ */
+
+rtems_device_driver console_read(
+  rtems_device_major_number major,
+  rtems_device_minor_number minor,
+  void                    * arg
+)
+{
+  rtems_libio_rw_args_t *rw_args;
+  char *buffer;
+  int maximum;
+  int count = 0;
+ 
+  rw_args = (rtems_libio_rw_args_t *) arg;
+
+  buffer = rw_args->buffer;
+  maximum = rw_args->count;
+
+  if ( minor > 1 )
+    return RTEMS_INVALID_NUMBER;
+
+  for (count = 0; count < maximum; count++) {
+    buffer[ count ] = inbyte( minor );
+    if (buffer[ count ] == '\n' || buffer[ count ] == '\r') {
+      buffer[ count++ ]  = '\n';
+      buffer[ count ]  = 0;
       break;
     }
   }
-  return (i);
-}
-
-/*
- *  Map port A (1) to stdin, stdout, and stderr.
- *  Map everything else to port B (0).
- */
-
-int __write(int fd, char *buf, int nbytes)
-{
-  int i, port;
- 
-  if ( fd <= 2 ) port = 1;
-  else           port = 0;
- 
-  for (i = 0; i < nbytes; i++) {
-    if (*(buf + i) == '\n') {
-      char_put (port, '\r');
+
+  rw_args->bytes_moved = count;
+  return (count >= 0) ? RTEMS_SUCCESSFUL : RTEMS_UNSATISFIED;
+}
+
+/*
+ * write bytes to the serial port. Stdout and stderr are the same. 
+ */
+
+rtems_device_driver console_write(
+  rtems_device_major_number major,
+  rtems_device_minor_number minor,
+  void                    * arg
+)
+{
+  int count;
+  int maximum;
+  rtems_libio_rw_args_t *rw_args;
+  char *buffer;
+
+  rw_args = (rtems_libio_rw_args_t *) arg;
+
+  buffer = rw_args->buffer;
+  maximum = rw_args->count;
+
+  if ( minor > 1 )
+    return RTEMS_INVALID_NUMBER;
+
+  for (count = 0; count < maximum; count++) {
+    if ( buffer[ count ] == '\n') {
+      outbyte('\r', minor );
     }
-    char_put (port, *(buf + i));
-  }
-  return (nbytes);
-}
+    outbyte( buffer[ count ], minor  );
+  }
+  return maximum;
+}
+
+/*
+ *  IO Control entry point
+ */
+
+rtems_device_driver console_control(
+  rtems_device_major_number major,
+  rtems_device_minor_number minor,
+  void                    * arg
+)
+{
+  return RTEMS_SUCCESSFUL;
+}
Index: c/src/lib/libbsp/m68k/mvme162/include/bsp.h
===================================================================
--- c/src/lib/libbsp/m68k/mvme162/include/bsp.h	(revision c6fb8e90960d4504018e61bbe2bf06ff7f116d72)
+++ c/src/lib/libbsp/m68k/mvme162/include/bsp.h	(revision 3a4ae6c210bcc37754767966f1128ae23c77b6af)
@@ -29,4 +29,6 @@
 
 #include <rtems.h>
+#include <clockdrv.h>
+#include <console.h>
 #include <iosupp.h>
 
@@ -249,4 +251,22 @@
 #endif
 
+/*
+ *  Device Driver Table Entries
+ */
+
+/*
+ * NOTE: Use the standard Console driver entry
+ */
+ 
+/*
+ * NOTE: Use the standard Clock driver entry
+ */
+
+/*
+ * How many libio files we want
+ */
+
+#define BSP_LIBIO_MAX_FDS       20
+
 /* miscellaneous stuff assumed to exist */
 
Index: c/src/lib/libbsp/m68k/mvme162/startup/bspstart.c
===================================================================
--- c/src/lib/libbsp/m68k/mvme162/startup/bspstart.c	(revision c6fb8e90960d4504018e61bbe2bf06ff7f116d72)
+++ c/src/lib/libbsp/m68k/mvme162/startup/bspstart.c	(revision 3a4ae6c210bcc37754767966f1128ae23c77b6af)
@@ -28,8 +28,15 @@
  */
 
-#include <rtems.h>
 #include <bsp.h>
+#include <rtems/libio.h>
+ 
 #include <libcsupport.h>
-#include <z8036.h>
+ 
+#include <string.h>
+#include <fcntl.h>
+ 
+#ifdef STACK_CHECKER_ON
+#include <stackchk.h>
+#endif
 
 /*
@@ -42,4 +49,6 @@
 
 rtems_cpu_table Cpu_table;
+
+char *rtems_progname;
 
 /*      Initialize whatever libc we are using
@@ -59,4 +68,12 @@
 
     /*
+     *  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.
      */
@@ -76,5 +93,31 @@
 }
 
-int bsp_start(
+/*
+ * 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;
+ 
+  if ((stdin_fd = __open("/dev/console", O_RDONLY, 0)) == -1)
+    rtems_fatal_error_occurred('STD0');
+ 
+  if ((stdout_fd = __open("/dev/console", O_WRONLY, 0)) == -1)
+    rtems_fatal_error_occurred('STD1');
+ 
+  if ((stderr_fd = __open("/dev/console", O_WRONLY, 0)) == -1)
+    rtems_fatal_error_occurred('STD2');
+ 
+  if ((stdin_fd != 0) || (stdout_fd != 1) || (stderr_fd != 2))
+    rtems_fatal_error_occurred('STIO');
+}
+
+int main(
   int argc,
   char **argv,
@@ -85,4 +128,9 @@
   int             index;
 
+  if ((argc > 0) && argv && argv[0])
+    rtems_progname = argv[0];
+  else
+    rtems_progname = "RTEMS";
+
   /*
    *  162Bug Vectors are at 0xFFE00000
@@ -122,5 +170,5 @@
   Cpu_table.predriver_hook = bsp_libc_init;  /* RTEMS resources available */
 
-  Cpu_table.postdriver_hook = NULL;   /* Call our main() for constructors */
+  Cpu_table.postdriver_hook = bsp_postdriver_hook;
 
   Cpu_table.idle_task = NULL;  /* do not override system IDLE task */
@@ -162,4 +210,10 @@
 #endif
 
+  /*
+   * Tell libio how many fd's we want and allow it to tweak config
+   */
+
+  rtems_libio_config(&BSP_Configuration, BSP_LIBIO_MAX_FDS);
+
   BSP_Configuration.work_space_start = (void *)
      (RAM_END - BSP_Configuration.work_space_size);
