Index: c/src/ada-tests/sptests/sp01/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp01/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp01/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,162 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 1 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:41:04 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 1 ***" );
+
+      TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
+
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         1, 
+         2048, 
+         RTEMS.INTERRUPT_LEVEL( 31 ),
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 3 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1_THROUGH_3'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_1_THROUGH_3'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 3 ),
+         SPTEST.TASK_1_THROUGH_3'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  TASK_1_THROUGH_3
+--
+
+   procedure TASK_1_THROUGH_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      TID    : RTEMS.ID;
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+   
+      loop
+
+         RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+         if TIME.SECOND >= 35 then
+            TEXT_IO.PUT_LINE( "*** END OF TEST 1 ***" );
+            RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+         end if;
+
+         TEST_SUPPORT.PUT_NAME( 
+            SPTEST.TASK_NAME( TEST_SUPPORT.TASK_NUMBER( TID ) ),
+            FALSE
+         );
+
+         TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
+         TEXT_IO.NEW_LINE;
+
+         RTEMS.TASK_WAKE_AFTER( 
+            TEST_SUPPORT.TASK_NUMBER( TID ) * 5 * 
+              TEST_SUPPORT.TICKS_PER_SECOND, 
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+          
+      end loop;
+   
+   end TASK_1_THROUGH_3;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp01/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp01/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp01/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,115 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 1 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:41:05 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_1_THROUGH_3
+--
+--  DESCRIPTION:
+--
+--  This is the body of the RTEMS tasks which constitute this test.
+--
+
+   procedure TASK_1_THROUGH_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      50                         -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp02/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp02/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp02/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,331 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 2 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:41:09 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 2 ***" );
+
+      SPTEST.PREEMPT_TASK_NAME := RTEMS.BUILD_NAME(  'P', 'R', 'M', 'T' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.PREEMPT_TASK_NAME,
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.PREEMPT_TASK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF PREEMPT" );
+
+      RTEMS.TASK_START(
+         SPTEST.PREEMPT_TASK_ID,
+         SPTEST.PREEMPT_TASK'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF PREEMPT" );
+
+      TEXT_IO.PUT_LINE( "INIT - task_wake_after - yielding processor" );
+      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         3, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         3, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 3 ), 
+         3, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_2'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 3 ),
+         SPTEST.TASK_3'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+      TEXT_IO.PUT_LINE( 
+         "INIT - suspending TA2 while middle task on a ready chain"
+      );
+ 
+      RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+
+      RTEMS.TASK_DELETE( SPTEST.TASK_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA1" );
+
+      RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
+
+      RTEMS.TASK_DELETE( SPTEST.TASK_ID( 3 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         3, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 3 ), 
+         3, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_2'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 3 ),
+         SPTEST.TASK_3'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  PREEMPT_TASK
+--
+
+   procedure PREEMPT_TASK (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS            : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT_LINE( "PREEMPT - task_delete - deleting self" );
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF PREEMPT" );
+
+   end PREEMPT_TASK;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      TID2              : RTEMS.ID;
+      TID3              : RTEMS.ID;
+      STATUS            : RTEMS.STATUS_CODES;
+      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+   begin
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 1 second" );
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+          
+      RTEMS.TASK_IDENT( 
+         SPTEST.TASK_NAME( 2 ), 
+         RTEMS.SEARCH_ALL_NODES, 
+         TID2, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA2" );
+   
+      TEXT_IO.PUT( "TA1 - task_ident - tid of TA2 (" );
+      UNSIGNED32_IO.PUT( TID2, WIDTH => 8, BASE => 10#16# );
+      TEXT_IO.PUT_LINE( ")" );
+
+      RTEMS.TASK_IDENT( 
+         SPTEST.TASK_NAME( 3 ), 
+         RTEMS.SEARCH_ALL_NODES, 
+         TID3, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA3" );
+   
+      TEXT_IO.PUT( "TA1 - task_ident - tid of TA3 (" );
+      UNSIGNED32_IO.PUT( TID3, WIDTH => 8, BASE => 10#16# );
+      TEXT_IO.PUT_LINE( ")" );
+
+      RTEMS.TASK_SET_PRIORITY( TID3, 2, PREVIOUS_PRIORITY, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - task_set_priority - set TA3's priority to 2"
+      );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA2" );
+      RTEMS.TASK_SUSPEND( TID2, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA2" );
+      RTEMS.TASK_DELETE( TID2, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep for 5 seconds" );
+      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+      TEXT_IO.PUT_LINE( "*** END OF TEST 2 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+   
+   end TASK_1;
+
+--PAGE
+-- 
+--  TASK_2
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT_LINE( "TA2 - task_wake_after - sleep 1 minute" );
+      RTEMS.TASK_WAKE_AFTER( 60 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER IN TA2" );
+          
+   end TASK_2;
+
+--PAGE
+-- 
+--  TASK_3
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT_LINE( "TA3 - task_wake_after - sleep 5 seconds" );
+      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER IN TA3" );
+
+      TEXT_IO.PUT_LINE( "TA3 - task_delete - delete self" );
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
+          
+   end TASK_3;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp02/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp02/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp02/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,154 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 2 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:41:10 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+   PREEMPT_TASK_ID   : RTEMS.ID;
+   PREEMPT_TASK_NAME : RTEMS.NAME;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  PREEMPT_TASK
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the basic preemption capability.
+--
+
+   procedure PREEMPT_TASK (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_2
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_3
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      50                         -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp03/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp03/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp03/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,173 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 3 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:41:13 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 3 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_2'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TIME := ( 1988, 12, 31, 9, 15, 0, 0 );
+
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
+      TEST_SUPPORT.PRINT_TIME( "sets clock: ", TIME, "" );
+      TEXT_IO.NEW_LINE;
+
+      loop
+
+         RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+         TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
+         TEST_SUPPORT.PRINT_TIME( "going to sleep: ", TIME, "" );
+         TEXT_IO.NEW_LINE;
+
+         TIME.SECOND := TIME.SECOND + 5;
+         TIME.MINUTE := TIME.MINUTE + (TIME.SECOND / 60 );
+         TIME.SECOND := TIME.SECOND mod 60;
+         TIME.HOUR   := TIME.HOUR + (TIME.MINUTE / 60 );
+         TIME.MINUTE := TIME.MINUTE mod 60;
+         TIME.HOUR   := TIME.HOUR mod 24;
+
+         RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_WHEN" );
+          
+         TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 1 ), FALSE );
+         TEST_SUPPORT.PRINT_TIME( "awakened: ", TIME, "" );
+         TEXT_IO.NEW_LINE;
+
+      end loop;
+   
+   end TASK_1;
+
+--PAGE
+-- 
+--  TASK_2
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      loop
+
+         RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+          
+         RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+         if TIME.SECOND >= 17 then
+            TEXT_IO.PUT_LINE( "*** END OF TEST 3 ***" );
+            RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+         end if;
+
+         TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( 2 ), FALSE );
+         TEST_SUPPORT.PRINT_TIME( " ", TIME, "" );
+         TEXT_IO.NEW_LINE;
+
+      end loop;
+
+   end TASK_2;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp03/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp03/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp03/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,129 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 3 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:41:14 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the TASK_WAKE_WHEN directive of 
+--  the Task Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the TASK_WAKE_AFTER directive of 
+--  the Task Manager.
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      50                         -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp04/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp04/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp04/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,311 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 4 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:41:17 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 4 ***" );
+
+      TIME := ( 1988, 12, 31, 9, 15, 0, 0 );
+
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+      SPTEST.EXTENSION_NAME( 1 ) := RTEMS.BUILD_NAME(  'E', 'X', 'T', ' ' );
+
+      RTEMS.EXTENSION_CREATE(
+         SPTEST.EXTENSION_NAME( 1 ),
+         SPTEST.EXTENSIONS'ACCESS,
+         EXTENSION_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EXTENSION_CREATE" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
+
+      SPTEST.RUN_COUNT( 1 ) := 0;
+      SPTEST.RUN_COUNT( 2 ) := 0;
+      SPTEST.RUN_COUNT( 3 ) := 0;
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         1, 
+         2048, 
+         RTEMS.TIMESLICE,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         1, 
+         2048, 
+         RTEMS.TIMESLICE,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 3 ), 
+         1, 
+         2048, 
+         RTEMS.TIMESLICE,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_2'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 3 ),
+         SPTEST.TASK_3'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      SECONDS       : RTEMS.UNSIGNED32;
+      OLD_SECONDS   : RTEMS.UNSIGNED32;
+      STARTED_DELAY : RTEMS.UNSIGNED32;
+      PREVIOUS_MODE : RTEMS.MODE;
+      TIME          : RTEMS.TIME_OF_DAY;
+      START_TIME    : RTEMS.INTERVAL;
+      END_TIME      : RTEMS.INTERVAL;
+      STATUS        : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT_LINE( "TA1 - task_suspend - on Task 2" );
+      RTEMS.TASK_SUSPEND( TASK_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+ 
+      TEXT_IO.PUT_LINE( "TA1 - task_suspend - on Task 3" );
+      RTEMS.TASK_SUSPEND( TASK_ID( 3 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA3" );
+ 
+      TEXT_IO.PUT_LINE( "TA1 - killing time" );
+
+      RTEMS.CLOCK_GET(
+         RTEMS.CLOCK_GET_SECONDS_SINCE_EPOCH,
+         START_TIME'ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+      loop
+         RTEMS.CLOCK_GET(
+            RTEMS.CLOCK_GET_SECONDS_SINCE_EPOCH,
+            END_TIME'ADDRESS,
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+         exit when END_TIME > (START_TIME + 2);
+      end loop;
+
+      TEXT_IO.PUT_LINE( "TA1 - task_resume - on Task 2" );
+      RTEMS.TASK_RESUME( TASK_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA2" );
+ 
+      TEXT_IO.PUT_LINE( "TA1 - task_resume - on Task 3" );
+      RTEMS.TASK_RESUME( TASK_ID( 3 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA3" );
+ 
+      loop
+
+         if SPTEST.RUN_COUNT( 1 ) = 3 then
+
+            TEXT_IO.PUT_LINE( 
+               "TA1 - task_mode - change mode to NO PREEMPT"
+            );
+            RTEMS.TASK_MODE( 
+               RTEMS.NO_PREEMPT, 
+               RTEMS.PREEMPT_MASK, 
+               PREVIOUS_MODE, 
+               STATUS 
+            );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+
+            RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+            OLD_SECONDS := TIME.SECOND;
+
+            SECONDS := 0;
+            loop
+
+               exit when SECONDS >= 6;
+
+               RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+               TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+               if TIME.SECOND /= OLD_SECONDS then
+                  OLD_SECONDS := TIME.SECOND;
+                  SECONDS := SECONDS + 1;
+                  TEST_SUPPORT.PRINT_TIME( "TA1 - ", TIME, "" );
+                  TEXT_IO.NEW_LINE;
+               end if;
+
+            end loop;
+
+            TEXT_IO.PUT_LINE( 
+               "TA1 - task_mode - change mode to PREEMPT"
+            );
+
+            RTEMS.TASK_MODE( 
+               RTEMS.PREEMPT, 
+               RTEMS.PREEMPT_MASK, 
+               PREVIOUS_MODE, 
+               STATUS 
+            );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+
+<<LOOP_LABEL>>
+            goto LOOP_LABEL;
+
+         end if;
+
+      end loop;
+
+   end TASK_1;
+
+--PAGE
+-- 
+--  TASK_2
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+   begin
+
+<<LOOP_LABEL>>
+         goto LOOP_LABEL;
+
+   end TASK_2;
+
+--PAGE
+-- 
+--  TASK_3
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+   begin
+
+<<LOOP_LABEL>>
+         goto LOOP_LABEL;
+
+   end TASK_3;
+
+--PAGE
+-- 
+--  TASK_SWITCH
+--
+
+   procedure TASK_SWITCH (
+      UNUSED : in     RTEMS.TCB_POINTER;
+      HEIR   : in     RTEMS.TCB_POINTER
+   ) is
+      INDEX  : RTEMS.UNSIGNED32;
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      INDEX := TEST_SUPPORT.TASK_NUMBER( HEIR.OBJECT.ID );
+
+      case INDEX is
+         when 1  | 2 | 3 =>
+            SPTEST.RUN_COUNT( INDEX ) := SPTEST.RUN_COUNT( INDEX ) + 1;
+
+            RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+            TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INDEX ), FALSE );
+            TEST_SUPPORT.PRINT_TIME( "- ", TIME, "" );
+            TEXT_IO.NEW_LINE;
+           
+            if TIME.SECOND >= 16 then
+               TEXT_IO.PUT_LINE( "*** END OF TEST 4 ***" );
+               RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+            end if;
+
+         when others =>
+            NULL;
+      end case;
+
+   end TASK_SWITCH;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp04/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp04/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp04/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,187 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 4 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:41:18 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS extensions created
+--  by this test.
+--
+ 
+   EXTENSION_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   EXTENSION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+ 
+--
+--  This array contains the number of times each of the test tasks has
+--  been context switched TO.
+--
+
+   RUN_COUNT : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.UNSIGNED32;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_2
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task is used as a background task to suspend, resume,
+--  and context switch to.
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_3
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task is used as a background task to suspend, resume,
+--  and context switch to.
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_SWITCH
+--
+--  DESCRIPTION:
+--
+--  This subprogram is the TASK_SWITCH extension for this test.
+--  It is invoked at each context switch and counts the number
+--  of times each application task has been context switched to.
+--
+
+   procedure TASK_SWITCH (
+      UNUSED : in     RTEMS.TCB_POINTER;
+      HEIR   : in     RTEMS.TCB_POINTER
+   );
+
+--
+--  This is the User Extension Table for this test.
+--
+
+   EXTENSIONS : aliased RTEMS.EXTENSIONS_TABLE := 
+   (
+        NULL,                                        -- Task create
+        NULL,                                        -- Task start
+        NULL,                                        -- Task restart
+        NULL,                                        -- Task delete
+        SPTEST.TASK_SWITCH'ACCESS,                   -- Task switch
+        NULL,                                        -- Task begin
+        NULL,                                        -- Task exitted
+        NULL                                         -- Fatal error
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      1,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      100                        -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp05/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp05/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp05/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,229 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 5 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:41:23 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 5 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 3 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_2'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 3 ),
+         SPTEST.TASK_3'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      TID2   : RTEMS.ID;
+      TID3   : RTEMS.ID;
+      PASS   : RTEMS.UNSIGNED32;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.TASK_IDENT( 
+         SPTEST.TASK_NAME( 2 ), 
+         1, 
+         TID2, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA2" );
+   
+      RTEMS.TASK_IDENT( 
+         SPTEST.TASK_NAME( 3 ), 
+         1, 
+         TID3, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF TA3" );
+   
+      for PASS in 1 .. 3
+      loop
+
+         TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+         RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER OF TA1" );
+         
+         TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA3" );
+         RTEMS.TASK_SUSPEND( TID3, STATUS );
+         if PASS = 1 then
+           TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
+              STATUS, 
+              RTEMS.ALREADY_SUSPENDED, 
+              "TASK_SUSPEND OF TA3" 
+           );
+         else
+           TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA3" );
+         end if;
+         
+         TEXT_IO.PUT_LINE( "TA1 - task_resume - resume TA2" );
+         RTEMS.TASK_RESUME( TID2, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA2" );
+         
+         TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+         RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+         
+         TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA2" );
+         RTEMS.TASK_SUSPEND( TID2, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+         
+         TEXT_IO.PUT_LINE( "TA1 - task_resume - resume TA3" );
+         RTEMS.TASK_RESUME( TID3, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA3" );
+          
+      end loop;
+
+      TEXT_IO.PUT_LINE( "*** END OF TEST 5 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+   end TASK_1;
+
+--PAGE
+-- 
+--  TASK_2
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT_LINE( "TA2 - task_suspend - suspend self" );
+      RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+
+      loop
+         TEXT_IO.PUT_LINE( "TA2 - task_wake_after - sleep 1 second" );
+         RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER OF TA2" );
+      end loop;
+         
+   end TASK_2;
+
+--PAGE
+-- 
+--  TASK_3
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT_LINE( "TA3 - task_suspend - suspend self" );
+      RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA3" );
+
+      loop
+         TEXT_IO.PUT_LINE( "TA3 - task_wake_after - sleep 1 second" );
+         RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER OF TA3" );
+      end loop;
+         
+   end TASK_3;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp05/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp05/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp05/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,139 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 5 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:41:24 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_2
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_3
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Message Queue Manager.
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      100                        -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp06/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp06/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp06/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,222 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 6 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:41:27 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS            : RTEMS.STATUS_CODES;
+      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 6 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
+
+      SPTEST.ARGUMENT := 0;
+      SPTEST.RESTART_ARGUMENT := 1;
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 3 ), 
+         10, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_2'ACCESS,
+         SPTEST.ARGUMENT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 3 ),
+         SPTEST.TASK_3'ACCESS,
+         SPTEST.ARGUMENT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+      RTEMS.TASK_SET_PRIORITY(
+         SPTEST.TASK_ID( 3 ),
+         5,
+         PREVIOUS_PRIORITY,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY OF TA3" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      PASS   : RTEMS.UNSIGNED32;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT_LINE( "TA1 - is beginning to run" );
+
+      PASS := ARGUMENT + 1;
+
+      if PASS = 5 then
+         TEXT_IO.PUT_LINE( "*** END OF TEST 6 ***" );
+         RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+      end if;
+
+      if PASS = 1 then
+         TEXT_IO.PUT_LINE( "TA1 - restarting TA3" );
+         RTEMS.TASK_RESTART( 
+            SPTEST.TASK_ID( 3 ), 
+            SPTEST.RESTART_ARGUMENT, 
+            STATUS 
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF TA3" );
+
+         RTEMS.TASK_WAKE_AFTER( 2 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+      end if;
+
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_restart - restarting TA2" );
+      RTEMS.TASK_RESTART( 
+         SPTEST.TASK_ID( 2 ), 
+         SPTEST.RESTART_ARGUMENT, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF TA2" );
+
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_restart - restarting self" );
+      RTEMS.TASK_RESTART( SPTEST.TASK_ID( 1 ), PASS, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF SELF" );
+
+   end TASK_1;
+
+--PAGE
+-- 
+--  TASK_2
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT_LINE( "TA2 - is beginning to run" );
+
+      if ARGUMENT = SPTEST.ARGUMENT then
+         RTEMS.TASK_WAKE_AFTER( 2 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+      end if;
+
+      loop
+
+         TEXT_IO.PUT_LINE( "TA2 - task_wake_after - sleep 1/2 second" );
+         RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND / 2, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+      end loop;
+
+   end TASK_2;
+
+--PAGE
+-- 
+--  TASK_3
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end TASK_3;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp06/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp06/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp06/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,146 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 6 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:41:28 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  The following are used as arguments to the various RTEMS tasks
+--  in this test to indicate when a restart should be performed.
+
+   ARGUMENT         : RTEMS.UNSIGNED32;
+   RESTART_ARGUMENT : RTEMS.UNSIGNED32;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_2
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_3
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      100                        -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp07/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp07/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp07/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,486 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 7 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:41:32 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 7 ***" );
+
+      SPTEST.EXTENSION_NAME( 1 ) := RTEMS.BUILD_NAME(  'E', 'X', 'T', ' ' );
+
+      RTEMS.EXTENSION_CREATE(
+         SPTEST.EXTENSION_NAME( 1 ),
+         SPTEST.EXTENSIONS'ACCESS,
+         EXTENSION_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EXTENSION_CREATE" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
+      SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME(  'T', 'A', '4', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         4, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         4, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 3 ), 
+         250, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 4 ), 
+         254, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 4 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_2'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 3 ),
+         SPTEST.TASK_3'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 4 ),
+         SPTEST.TASK_4'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" );
+
+      RTEMS.TASK_RESTART( SPTEST.TASK_ID( 3 ), 0, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESTART OF TA3" );
+
+      RTEMS.TASK_SET_NOTE( SPTEST.TASK_ID( 1 ), 8, 4, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE OF TA1" );
+      TEXT_IO.PUT( "INIT - task_set_note - set TA1's NOTEPAD_8" ); 
+      TEXT_IO.PUT_LINE( " to TA1's initial priority:  4" );
+      
+      RTEMS.TASK_SET_NOTE( SPTEST.TASK_ID( 2 ), 8, 4, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE OF TA2" );
+      TEXT_IO.PUT( "INIT - task_set_note - set TA2's NOTEPAD_8" ); 
+      TEXT_IO.PUT_LINE( " to TA2's initial priority:  4" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS            : RTEMS.STATUS_CODES;
+      THE_PRIORITY      : RTEMS.TASK_PRIORITY;
+      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+   begin
+
+      TEST_SUPPORT.PAUSE;
+
+      RTEMS.TASK_SET_PRIORITY( 
+         RTEMS.SELF, 
+         RTEMS.CURRENT_PRIORITY, 
+         THE_PRIORITY, 
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+      TEXT_IO.PUT( "TA1 - task_set_priority - ");
+      TEXT_IO.PUT( "get initial priority of self: ");
+      UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
+      TEXT_IO.NEW_LINE;
+
+      loop
+
+         RTEMS.TASK_GET_NOTE( RTEMS.SELF, 8, THE_PRIORITY, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_GET_NOTE" );
+         TEXT_IO.PUT( "TA1 - task_get_note - "); 
+         TEXT_IO.PUT( "get NOTEPAD_8 - current priority: " );
+         UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
+         TEXT_IO.NEW_LINE;
+
+         THE_PRIORITY := THE_PRIORITY - 1;
+
+         if THE_PRIORITY = 0 then
+            TEXT_IO.PUT_LINE( "TA1 - task_suspend - suspend TA2" ); 
+            RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 2 ), STATUS );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+
+            TEXT_IO.PUT( "TA1 - task_set_priority - ");
+            TEXT_IO.PUT_LINE( "set priority of TA2 ( blocked )");
+            RTEMS.TASK_SET_PRIORITY( 
+               SPTEST.TASK_ID( 2 ), 
+               5, 
+               PREVIOUS_PRIORITY, 
+               STATUS
+            );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+            RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
+
+            RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+         end if;
+
+         TEXT_IO.PUT( "TA1 - task_set_note - set TA2's NOTEPAD_8: " );
+         UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
+         TEXT_IO.NEW_LINE;
+         RTEMS.TASK_SET_NOTE( 
+            SPTEST.TASK_ID( 2 ), 
+            8, 
+            THE_PRIORITY, 
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE" );
+
+         TEXT_IO.PUT("TA1 - task_set_priority - set TA2's priority: ");
+         UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
+         TEXT_IO.NEW_LINE;
+         RTEMS.TASK_SET_PRIORITY( 
+            SPTEST.TASK_ID( 2 ), 
+            THE_PRIORITY, 
+            PREVIOUS_PRIORITY, 
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+      end loop;
+   
+   end TASK_1;
+
+--PAGE
+-- 
+--  TASK_2
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS            : RTEMS.STATUS_CODES;
+      THE_PRIORITY      : RTEMS.TASK_PRIORITY;
+      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+   begin
+
+      loop
+
+         RTEMS.TASK_GET_NOTE( RTEMS.SELF, 8, THE_PRIORITY, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_GET_NOTE" );
+         TEXT_IO.PUT( "TA2 - task_get_note - ");
+         TEXT_IO.PUT( "get NOTEPAD_8 - current priority: " );
+         UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
+         TEXT_IO.NEW_LINE;
+
+         THE_PRIORITY := THE_PRIORITY - 1;
+
+         if THE_PRIORITY = 0 then
+            TEXT_IO.PUT_LINE( "TA2 - task_suspend - suspend TA1" ); 
+            RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 1 ), STATUS );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+
+            TEXT_IO.PUT( "TA2 - task_set_priority - ");
+            TEXT_IO.PUT_LINE( "set priority of TA1 ( blocked )");
+            RTEMS.TASK_SET_PRIORITY( 
+               SPTEST.TASK_ID( 1 ), 
+               5, 
+               PREVIOUS_PRIORITY, 
+               STATUS
+            );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+            RTEMS.TASK_DELETE( 
+               SPTEST.TASK_ID( 1 ), 
+               STATUS 
+            );                            -- TA1 is blocked
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA1" );
+
+            RTEMS.TASK_DELETE( 
+               SPTEST.TASK_ID( 3 ), 
+               STATUS
+            );                            -- TA3 is ready
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
+
+            RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+         else
+
+            TEXT_IO.PUT( "TA2 - task_set_note - set TA1's NOTEPAD_8: " );
+            UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2 );
+            TEXT_IO.NEW_LINE;
+            RTEMS.TASK_SET_NOTE( 
+               SPTEST.TASK_ID( 1 ), 
+               8, 
+               THE_PRIORITY, 
+               STATUS
+            );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_NOTE" );
+
+            TEXT_IO.PUT( "TA2 - task_set_priority - "); 
+            TEXT_IO.PUT( "set TA1's priority: ");
+            UNSIGNED32_IO.PUT( THE_PRIORITY, BASE => 10, WIDTH => 2);
+            TEXT_IO.NEW_LINE;
+            RTEMS.TASK_SET_PRIORITY( 
+               SPTEST.TASK_ID( 1 ), 
+               THE_PRIORITY, 
+               PREVIOUS_PRIORITY, 
+               STATUS
+            );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+         end if;
+
+      end loop;
+   
+   end TASK_2;
+
+--PAGE
+-- 
+--  TASK_3
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+   
+      loop
+
+         RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+      end loop;
+
+   end TASK_3;
+
+--PAGE
+-- 
+--  TASK_4
+--
+
+   procedure TASK_4 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+   begin
+
+      TEXT_IO.PUT_LINE( "TA4 - exitting task" );
+
+   end TASK_4;
+
+--PAGE
+-- 
+--  TASK_EXIT_EXTENSION
+--
+
+   procedure TASK_EXIT_EXTENSION (
+      RUNNING_TASK : in     RTEMS.TCB_POINTER
+   ) is
+   begin
+
+      if TEST_SUPPORT.TASK_NUMBER( RUNNING_TASK.OBJECT.ID ) > 0 then
+         TEXT_IO.PUT_LINE( "TASK_EXITTED - user extension invoked correctly" );
+      end if;
+
+      TEXT_IO.PUT_LINE( "*** END OF TEST 7 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+   end TASK_EXIT_EXTENSION;
+
+--PAGE
+-- 
+--  TASK_CREATE_EXTENSION
+--
+
+   procedure TASK_CREATE_EXTENSION (
+      UNUSED       : in     RTEMS.TCB_POINTER;
+      CREATED_TASK : in     RTEMS.TCB_POINTER
+   ) is
+   begin
+
+      if TEST_SUPPORT.TASK_NUMBER( CREATED_TASK.OBJECT.ID ) > 0 then
+         TEXT_IO.PUT( "TASKS_CREATE - " );
+         TEST_SUPPORT.PUT_NAME( 
+            SPTEST.TASK_NAME( 
+               TEST_SUPPORT.TASK_NUMBER( CREATED_TASK.OBJECT.ID )
+            ),
+            FALSE
+         );
+         TEXT_IO.PUT_LINE( "- created." );
+      end if;
+
+   end TASK_CREATE_EXTENSION;
+
+--PAGE
+-- 
+--  TASK_DELETE_EXTENSION
+--
+
+   procedure TASK_DELETE_EXTENSION (
+      RUNNING_TASK : in     RTEMS.TCB_POINTER;
+      DELETED_TASK : in     RTEMS.TCB_POINTER
+   ) is
+   begin
+
+      if TEST_SUPPORT.TASK_NUMBER( RUNNING_TASK.OBJECT.ID ) > 0 then
+         TEXT_IO.PUT( "TASKS_DELETE - " );
+         TEST_SUPPORT.PUT_NAME( 
+            SPTEST.TASK_NAME( 
+               TEST_SUPPORT.TASK_NUMBER( RUNNING_TASK.OBJECT.ID ) 
+            ),
+            FALSE
+         );
+      end if;
+
+      if TEST_SUPPORT.TASK_NUMBER( DELETED_TASK.OBJECT.ID ) > 0 then
+         TEXT_IO.PUT( "deleting " );
+         TEST_SUPPORT.PUT_NAME( 
+            SPTEST.TASK_NAME( 
+               TEST_SUPPORT.TASK_NUMBER( DELETED_TASK.OBJECT.ID ) 
+            ),
+            TRUE
+         );
+      end if;
+
+   end TASK_DELETE_EXTENSION;
+
+--PAGE
+-- 
+--  TASK_RESTART_EXTENSION
+--
+
+   procedure TASK_RESTART_EXTENSION (
+      UNUSED         : in     RTEMS.TCB_POINTER;
+      RESTARTED_TASK : in     RTEMS.TCB_POINTER
+   ) is
+   begin
+
+      if TEST_SUPPORT.TASK_NUMBER( RESTARTED_TASK.OBJECT.ID ) > 0 then
+         TEXT_IO.PUT( "TASKS_RESTART - " );
+         TEST_SUPPORT.PUT_NAME( 
+            SPTEST.TASK_NAME( 
+               TEST_SUPPORT.TASK_NUMBER( RESTARTED_TASK.OBJECT.ID ) 
+            ),
+            FALSE
+         );
+         TEXT_IO.PUT_LINE( " - restarted." );
+      end if;
+
+   end TASK_RESTART_EXTENSION;
+
+--PAGE
+-- 
+--  TASK_START_EXTENSION
+--
+
+   procedure TASK_START_EXTENSION (
+      UNUSED       : in     RTEMS.TCB_POINTER;
+      STARTED_TASK : in     RTEMS.TCB_POINTER
+   ) is
+   begin
+
+      if TEST_SUPPORT.TASK_NUMBER( STARTED_TASK.OBJECT.ID ) > 0 then
+         TEXT_IO.PUT( "TASKS_START - " );
+         TEST_SUPPORT.PUT_NAME( 
+            SPTEST.TASK_NAME( 
+               TEST_SUPPORT.TASK_NUMBER( STARTED_TASK.OBJECT.ID ) 
+            ),
+            FALSE
+         );
+         TEXT_IO.PUT_LINE( " - started." );
+      end if;
+
+   end TASK_START_EXTENSION;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp07/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp07/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp07/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,240 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 7 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:41:33 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 4 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS extensions created
+--  by this test.
+--
+ 
+   EXTENSION_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   EXTENSION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+ 
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_2
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_3
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests some of the capabilities of the Task Manager.
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_4
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Message Queue Manager.
+--
+
+   procedure TASK_4 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_CREATE_EXTENSION
+--
+--  DESCRIPTION:
+--
+--  This subprogram is the TASK_CREATE extension for this test.
+--
+
+   procedure TASK_CREATE_EXTENSION (
+      UNUSED       : in     RTEMS.TCB_POINTER;
+      CREATED_TASK : in     RTEMS.TCB_POINTER
+   );
+
+--
+--  TASK_DELETE_EXTENSION
+--
+--  DESCRIPTION:
+--
+--  This subprogram is the TASK_DELETE extension for this test.
+--
+
+   procedure TASK_DELETE_EXTENSION (
+      RUNNING_TASK : in     RTEMS.TCB_POINTER;
+      DELETED_TASK : in     RTEMS.TCB_POINTER
+   );
+
+--
+--  TASK_RESTART_EXTENSION
+--
+--  DESCRIPTION:
+--
+--  This subprogram is the TASK_RESTART extension for this test.
+--
+
+   procedure TASK_RESTART_EXTENSION (
+      UNUSED         : in     RTEMS.TCB_POINTER;
+      RESTARTED_TASK : in     RTEMS.TCB_POINTER
+   );
+
+--
+--  TASK_START_EXTENSION
+--
+--  DESCRIPTION:
+--
+--  This subprogram is the TASK_START extension for this test.
+--
+
+   procedure TASK_START_EXTENSION (
+      UNUSED       : in     RTEMS.TCB_POINTER;
+      STARTED_TASK : in     RTEMS.TCB_POINTER
+   );
+
+--
+--  TASK_EXIT_EXTENSION
+--
+--  DESCRIPTION:
+--
+--  This subprogram is the TASK_EXIT extension for this test.
+--  It is invoked when a RTEMS task exits from its entry point.
+--
+
+   procedure TASK_EXIT_EXTENSION (
+      RUNNING_TASK : in     RTEMS.TCB_POINTER
+   );
+
+--
+--  This is the User Extension Table for this test.
+--
+
+   EXTENSIONS : aliased RTEMS.EXTENSIONS_TABLE := 
+   (
+        SPTEST.TASK_CREATE_EXTENSION'ACCESS,         -- Task create
+        SPTEST.TASK_START_EXTENSION'ACCESS,          -- Task start
+        SPTEST.TASK_RESTART_EXTENSION'ACCESS,        -- Task restart
+        SPTEST.TASK_DELETE_EXTENSION'ACCESS,         -- Task delete
+        NULL,                                        -- Task switch
+        NULL,                                        -- Task begin
+        SPTEST.TASK_EXIT_EXTENSION'ACCESS,           -- Task exitted
+        NULL                                         -- Fatal error
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      1,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      100                        -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp08/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp08/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp08/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,351 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 8 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:41:36 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 8 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  PUT_MODE
+--
+
+   procedure PUT_MODE(
+      COMMENT     : in    STRING;
+      OUTPUT_MODE : in    RTEMS.MODE
+   ) is
+   begin
+
+      TEXT_IO.PUT( COMMENT );
+      UNSIGNED32_IO.PUT( OUTPUT_MODE, BASE => 16, WIDTH => 8 );
+      TEXT_IO.NEW_LINE;
+
+   end PUT_MODE;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      PREVIOUS_MODE : RTEMS.MODE;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+-- BEGINNING OF ASR
+
+      RTEMS.TASK_MODE( 
+         RTEMS.ASR, 
+         RTEMS.ASR_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - ASR                  - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+      RTEMS.TASK_MODE( 
+         RTEMS.NO_ASR, 
+         RTEMS.ASR_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - NO_ASR               - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+      RTEMS.TASK_MODE( 
+         RTEMS.NO_ASR, 
+         RTEMS.ASR_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - NO_ASR               - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+      RTEMS.TASK_MODE( 
+         RTEMS.ASR, 
+         RTEMS.ASR_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - ASR                  - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+-- END OF ASR
+
+-- BEGINNING OF TIMESLICE
+
+      RTEMS.TASK_MODE( 
+         RTEMS.NO_TIMESLICE, 
+         RTEMS.TIMESLICE_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - NO_TIMESLICE         - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+      RTEMS.TASK_MODE( 
+         RTEMS.TIMESLICE, 
+         RTEMS.TIMESLICE_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - TIMESLICE            - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+      RTEMS.TASK_MODE( 
+         RTEMS.TIMESLICE, 
+         RTEMS.TIMESLICE_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - TIMESLICE            - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+      RTEMS.TASK_MODE( 
+         RTEMS.NO_TIMESLICE, 
+         RTEMS.TIMESLICE_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - NO_TIMESLICE         - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+-- END OF TIMESLICE
+
+-- BEGINNING OF PREEMPT
+
+      RTEMS.TASK_MODE( 
+         RTEMS.PREEMPT, 
+         RTEMS.PREEMPT_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - PREEMPT              - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+      RTEMS.TASK_MODE( 
+         RTEMS.NO_PREEMPT, 
+         RTEMS.PREEMPT_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - NO_PREEMPT           - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+      RTEMS.TASK_MODE( 
+         RTEMS.NO_PREEMPT, 
+         RTEMS.PREEMPT_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - NO_PREEMPT           - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+      RTEMS.TASK_MODE( 
+         RTEMS.PREEMPT, 
+         RTEMS.PREEMPT_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - PREEMPT              - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+-- END OF PREEMPT
+
+-- BEGINNING OF INTERRUPT LEVEL
+
+      RTEMS.TASK_MODE( 
+         RTEMS.INTERRUPT_LEVEL( 3 ), 
+         RTEMS.INTERRUPT_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - INTERRUPT_LEVEL( 3 ) - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+      RTEMS.TASK_MODE( 
+         RTEMS.INTERRUPT_LEVEL( 5 ), 
+         RTEMS.INTERRUPT_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - INTERRUPT_LEVEL( 5 ) - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+-- END OF INTERRUPT LEVEL
+
+-- BEGINNING OF COMBINATIONS
+
+      RTEMS.TASK_MODE( 
+         RTEMS.INTERRUPT_LEVEL( 3 ) + RTEMS.NO_ASR + 
+            RTEMS.TIMESLICE + RTEMS.NO_PREEMPT, 
+         RTEMS.INTERRUPT_MASK + RTEMS.ASR_MASK + 
+            RTEMS.TIMESLICE_MASK + RTEMS.PREEMPT_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - set all modes        - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+      RTEMS.TASK_MODE( 
+         RTEMS.INTERRUPT_LEVEL( 3 ) + RTEMS.NO_ASR + 
+            RTEMS.TIMESLICE + RTEMS.NO_PREEMPT, 
+         RTEMS.INTERRUPT_MASK + RTEMS.ASR_MASK + 
+            RTEMS.TIMESLICE_MASK + RTEMS.PREEMPT_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - set all modes        - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+      RTEMS.TASK_MODE( 
+         RTEMS.INTERRUPT_LEVEL( 0 ) + RTEMS.ASR + 
+            RTEMS.NO_TIMESLICE + RTEMS.PREEMPT, 
+         RTEMS.INTERRUPT_MASK + RTEMS.ASR_MASK + 
+            RTEMS.TIMESLICE_MASK + RTEMS.PREEMPT_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - clear all modes      - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+-- END OF COMBINATIONS
+
+-- BEGINNING OF CURRENT MODE
+
+      RTEMS.TASK_MODE( 
+         RTEMS.CURRENT_MODE,
+         RTEMS.CURRENT_MODE,
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+      SPTEST.PUT_MODE(
+         "TA1 - task_mode - get current mode     - previous mode: ", 
+         PREVIOUS_MODE
+      );
+   
+-- END OF CURRENT MODE
+
+      TEXT_IO.PUT_LINE( "*** END OF TEST 8 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+   end TASK_1;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp08/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp08/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp08/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,129 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 8 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:41:37 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  PUT_MODE
+--
+--  DESCRIPTION:
+--
+--  This subprogram prints the COMMENT and the OUTPUT_MODE followed
+--  by a carriage return.
+--
+
+   procedure PUT_MODE(
+      COMMENT     : in    STRING;
+      OUTPUT_MODE : in    RTEMS.MODE
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the TASK_MODE directive of the Task Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      100                        -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp09/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp09/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp09/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,3151 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 9 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:41:40 joel Exp
+--
+
+with BSP;
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 9 ***" );
+
+      SPTEST.TASK_NAME( 1 )   := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 )   := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+      SPTEST.TASK_NAME( 3 )   := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
+      SPTEST.TASK_NAME( 4 )   := RTEMS.BUILD_NAME(  'T', 'A', '4', ' ' );
+      SPTEST.TASK_NAME( 5 )   := RTEMS.BUILD_NAME(  'T', 'A', '5', ' ' );
+      SPTEST.TASK_NAME( 6 )   := RTEMS.BUILD_NAME(  'T', 'A', '6', ' ' );
+      SPTEST.TASK_NAME( 7 )   := RTEMS.BUILD_NAME(  'T', 'A', '7', ' ' );
+      SPTEST.TASK_NAME( 8 )   := RTEMS.BUILD_NAME(  'T', 'A', '8', ' ' );
+      SPTEST.TASK_NAME( 9 )   := RTEMS.BUILD_NAME(  'T', 'A', '9', ' ' );
+      SPTEST.TASK_NAME( 10 )  := RTEMS.BUILD_NAME(  'T', 'A', 'A', ' ' );
+
+      SPTEST.TIMER_NAME( 1 )   := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
+
+      SPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME( 'S', 'M', '1', ' ' );
+      SPTEST.SEMAPHORE_NAME( 2 ) := RTEMS.BUILD_NAME( 'S', 'M', '2', ' ' );
+      SPTEST.SEMAPHORE_NAME( 3 ) := RTEMS.BUILD_NAME( 'S', 'M', '3', ' ' );
+
+      SPTEST.QUEUE_NAME( 1 )     := RTEMS.BUILD_NAME( 'M', 'Q', '1', ' ' );
+      SPTEST.QUEUE_NAME( 2 )     := RTEMS.BUILD_NAME( 'M', 'Q', '2', ' ' );
+
+      SPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME( 'P', 'T', '1', ' ' );
+
+      SPTEST.REGION_NAME( 1 )    := RTEMS.BUILD_NAME( 'R', 'N', '1', ' ' );
+
+      SPTEST.PORT_NAME( 1 )      := RTEMS.BUILD_NAME( 'D', 'P', '1', ' ' );
+
+      SPTEST.PERIOD_NAME( 1 )    := RTEMS.BUILD_NAME( 'T', 'M', '1', ' ' );
+
+--      RTEMS.TASK_CREATE(
+--         SPTEST.TASK_NAME( 1 ),
+--         4,
+--         10,
+--         RTEMS.DEFAULT_MODES,
+--         RTEMS.DEFAULT_ATTRIBUTES,
+--         SPTEST.TASK_ID( 1 ),
+--         STATUS
+--      );
+--       TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+--          STATUS,
+--          RTEMS.INVALID_SIZE,
+--          "TASK_CREATE WITH ILLEGAL STACK SIZE"
+--       );
+      TEXT_IO.PUT_LINE( "INIT - task_create - INVALID_SIZE -- NOT CHECKED" );
+
+      RTEMS.TASK_CREATE(
+         SPTEST.TASK_NAME( 1 ),
+         0,
+         2048,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_PRIORITY,
+         "TASK_CREATE WITH ILLEGAL PRIORITY"
+      );
+      TEXT_IO.PUT_LINE( "INIT - task_create - INVALID_PRIORITY" );
+
+      RTEMS.TASK_CREATE(
+         SPTEST.TASK_NAME( 1 ),
+         4,
+         2048,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_RESTART(
+         SPTEST.TASK_ID( 1 ),
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INCORRECT_STATE,
+         "TASK_RESTART OF DORMANT TASK"
+      );
+      TEXT_IO.PUT_LINE( "INIT - task_restart - INCORRECT_STATE" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  DELAYED_SUBPROGRAM
+--
+
+   procedure DELAYED_SUBPROGRAM (
+      IGNORED_ID      : in     RTEMS.ID;
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS
+   ) is
+   begin
+
+      NULL;
+
+   end DELAYED_SUBPROGRAM;
+
+--PAGE
+-- 
+--  SERVICE_ROUTINE
+--
+
+   procedure SERVICE_ROUTINE (
+      IGNORED : in     RTEMS.VECTOR_NUMBER
+   ) is
+   begin
+
+      NULL;
+
+   end SERVICE_ROUTINE;
+
+--PAGE
+-- 
+--  SCREEN_1
+--
+
+   procedure SCREEN_1
+   is
+      NOTEPAD_VALUE     : RTEMS.UNSIGNED32;
+      SELF_ID           : RTEMS.ID;
+      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+      STATUS            : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.TASK_DELETE( 100, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TASK_DELETE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_delete - INVALID_ID" );
+
+--      RTEMS.TASK_GET_NOTE( RTEMS.SELF, 
+--                           RTEMS.NOTEPAD_INDEX'LAST + 10, 
+--                           NOTEPAD_VALUE, 
+--                           STATUS 
+--      );
+--      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+--         STATUS,
+--         RTEMS.INVALID_NUMBER,
+--         "TASK_GET_NOTE WITH ILLEGAL NOTEPAD"
+--      );
+--      TEXT_IO.PUT_LINE( "TA1 - task_get_note - INVALID_NUMBER" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_get_note - INVALID_NUMBER -- constraint error"
+      );
+
+      RTEMS.TASK_GET_NOTE( 
+         100, 
+         RTEMS.NOTEPAD_INDEX'LAST, 
+         NOTEPAD_VALUE, 
+         STATUS 
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TASK_GET_NOTE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_get_note - INVALID_ID" );
+
+      RTEMS.TASK_IDENT(
+         RTEMS.SELF,
+         RTEMS.SEARCH_ALL_NODES, 
+         SELF_ID,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+      if SELF_ID /= SPTEST.TASK_ID( 1 ) then
+         TEXT_IO.PUT_LINE( "ERROR - task_ident - incorrect ID returned!" );
+         RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+      end if;
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_ident - current task SUCCESSFUL"
+      );
+
+      RTEMS.TASK_IDENT(
+         100,
+         RTEMS.SEARCH_ALL_NODES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "TASK_IDENT WITH ILLEGAL NAME (local)"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_ident - global INVALID_NAME" );
+
+      RTEMS.TASK_IDENT( 100, 1, SPTEST.JUNK_ID, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "TASK_IDENT WITH ILLEGAL NAME (global)"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_ident - local INVALID_NAME" );
+
+      RTEMS.TASK_IDENT( 100, 2, SPTEST.JUNK_ID, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NODE,
+         "TASK_IDENT WITH ILLEGAL NODE"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_ident - INVALID_NODE" );
+
+      RTEMS.TASK_RESTART( 100, 0, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TASK_RESTART WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_restart - INVALID_ID" );
+
+      RTEMS.TASK_RESUME( 100, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TASK_RESUME WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_resume - INVALID_ID" );
+
+      RTEMS.TASK_RESUME( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INCORRECT_STATE,
+         "TASK_RESUME OF READY TASK"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_resume - INCORRECT_STATE" );
+
+--      RTEMS.TASK_SET_PRIORITY( RTEMS.SELF, 512, PREVIOUS_PRIORITY, STATUS );
+--      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+--         STATUS,
+--         RTEMS.INVALID_PRIORITY,
+--         "TASK_SET_PRIORITY WITH ILLEGAL PRIORITY"
+--      );
+--      TEXT_IO.PUT_LINE(
+--         "TA1 - task_set_priority - INVALID_PRIORITY"
+--      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_set_priority - INVALID_PRIORITY -- constraint error"
+      );
+
+      RTEMS.TASK_SET_PRIORITY( 100, 8, PREVIOUS_PRIORITY, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TASK_SET_PRIORITY WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_set_priority - INVALID_ID" );
+
+--       RTEMS.TASK_SET_NOTE( RTEMS.SELF, 
+--                            RTEMS.NOTEPAD_INDEX'LAST + 10, 
+--                            NOTEPAD_VALUE, 
+--                            STATUS 
+--       );
+--       TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+--          STATUS,
+--          RTEMS.INVALID_NUMBER,
+--          "TASK_SET_NOTE WITH ILLEGAL NOTEPAD"
+--       );
+--      TEXT_IO.PUT_LINE( "TA1 - task_set_note - INVALID_NUMBER" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_set_note - INVALID_NUMBER -- constraint error"
+      );
+
+      RTEMS.TASK_SET_NOTE( 
+         100, 
+         RTEMS.NOTEPAD_INDEX'LAST, 
+         NOTEPAD_VALUE, 
+         STATUS 
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TASK_SET_NOTE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_set_note - INVALID_ID" );
+
+      RTEMS.TASK_START( 100, SPTEST.TASK_1'ACCESS, 0, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TASK_START WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_start - INVALID_ID" );
+
+      RTEMS.TASK_START( RTEMS.SELF, SPTEST.TASK_1'ACCESS, 0, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INCORRECT_STATE,
+         "TASK_START OF READY TASK"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_start - INCORRECT_STATE" );
+
+      RTEMS.TASK_SUSPEND( 100, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TASK_SUSPEND WITH INVALID ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_suspend - INVALID_ID" );
+
+   end SCREEN_1;
+
+--PAGE
+-- 
+--  SCREEN_2
+--
+
+   procedure SCREEN_2
+   is
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+-- errors before clock is set
+
+      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+     
+      if RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then
+         TEXT_IO.PUT_LINE(
+            "TA1 - clock_get - NOT_DEFINED -- DID THE BSP SET THE TIME OF DAY?"
+         );
+      else
+         TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+            STATUS,
+            RTEMS.NOT_DEFINED,
+            "CLOCK_GET BEFORE CLOCK IS SET"
+         );
+         TEXT_IO.PUT_LINE( "TA1 - clock_get - NOT_DEFINED" );
+      end if;
+
+      RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
+      if RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then
+         TEXT_IO.PUT( "TA1 - task_wake_when - NOT_DEFINED -- " );
+         TEXT_IO.PUT_LINE( "DID THE BSP SET THE TIME OF DAY?" );
+      else
+         TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+            STATUS,
+            RTEMS.NOT_DEFINED,
+            "TASK_WAKE_WHEN BEFORE CLOCK IS SET"
+         );
+         TEXT_IO.PUT_LINE( "TA1 - task_wake_when - NOT_DEFINED" );
+      end if;
+
+      RTEMS.TIMER_FIRE_WHEN(
+         0,
+         TIME,
+         SPTEST.DELAYED_SUBPROGRAM'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+
+      if RTEMS.IS_STATUS_SUCCESSFUL( STATUS ) then
+         TEXT_IO.PUT( "TA1 - task_fire_when - NOT_DEFINED -- " );
+         TEXT_IO.PUT_LINE( "DID THE BSP SET THE TIME OF DAY?" );
+      else
+
+         TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+            STATUS,
+            RTEMS.NOT_DEFINED,
+            "TIMER_FIRE_WHEN BEFORE CLOCK IS SET"
+         );
+         TEXT_IO.PUT_LINE( "TA1 - timer_fire_when - NOT_DEFINED" );
+
+      end if;
+
+-- invalid time of day field
+
+      TIME := ( 1987, 2, 5, 8, 30, 45, 0 );
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_CLOCK,
+         "CLOCK_SET WITH INVALID YEAR"
+      );
+      TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+      TIME := ( 1988, 15, 5, 8, 30, 45, 0 );
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_CLOCK,
+         "CLOCK_SET WITH INVALID MONTH"
+      );
+      TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+      TIME := ( 1988, 2, 32, 8, 30, 45, 0 );
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_CLOCK,
+         "CLOCK_SET WITH INVALID DAY"
+      );
+      TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+      TIME := ( 1988, 2, 5, 25, 30, 45, 0 );
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_CLOCK,
+         "CLOCK_SET WITH INVALID HOUR"
+      );
+      TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+      TIME := ( 1988, 2, 5, 8, 61, 45, 0 );
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_CLOCK,
+         "CLOCK_SET WITH INVALID MINUTE"
+      );
+      TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+      TIME := ( 1988, 2, 5, 8, 30, 61, 0 );
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_CLOCK,
+         "CLOCK_SET WITH INVALID SECOND"
+      );
+      TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+      TIME := ( 1988, 2, 5, 8, 30, 45, TEST_SUPPORT.TICKS_PER_SECOND + 1 );
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_CLOCK,
+         "CLOCK_SET WITH INVALID TICKS PER SECOND"
+      );
+      TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+      TIME := ( 1988, 2, 5, 8, 30, 45, 0 );
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
+      TEXT_IO.PUT_LINE( " - SUCCESSFUL" );
+
+-- task_wake_when
+
+      TIME := ( 1988, 2, 5, 8, 30, 48, TEST_SUPPORT.TICKS_PER_SECOND + 1 );
+      TEXT_IO.PUT( "TA1 - task_wake_when - TICK INVALID - " );
+      TEXT_IO.PUT_LINE( "sleep about 3 seconds" );
+      RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED(
+         STATUS,
+         "TASK_WAKE_WHEN WITH INVALID TICKS PER SECOND"
+      );
+      TEXT_IO.PUT( "TA1 - task_wake_when - TICK INVALID - " );
+      TEXT_IO.PUT_LINE( "woke up SUCCESSFUL" );
+
+      TIME := ( 1961, 2, 5, 8, 30, 48, 0 );
+      TEST_SUPPORT.PRINT_TIME( "TA1 - task_wake_when - ", TIME, "" );
+      RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_CLOCK,
+         "TASK_WAKE_WHEN WITH INVALID YEAR"
+      );
+      TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+      TIME := ( 1988, 2, 5, 25, 30, 48, 0 );
+      TEST_SUPPORT.PRINT_TIME( "TA1 - task_wake_when - ", TIME, "" );
+      RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_CLOCK,
+         "TASK_WAKE_WHEN WITH INVALID HOUR"
+      );
+      TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" );
+      TEST_SUPPORT.PRINT_TIME( "TA1 - current time - ", TIME, "" );
+      TEXT_IO.NEW_LINE;
+
+      TIME.MONTH := 1;
+      TEST_SUPPORT.PRINT_TIME( "TA1 - task_wake_when - ", TIME, "" );
+      RTEMS.TASK_WAKE_WHEN( TIME, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_CLOCK,
+         "TASK_WAKE_WHEN BEFORE CURRENT TIME"
+      );
+      TEXT_IO.PUT_LINE( " - INVALID_CLOCK" );
+
+   end SCREEN_2;
+
+--PAGE
+-- 
+--  SCREEN_3
+--
+
+   procedure SCREEN_3
+   is
+      TASK_NAME : RTEMS.NAME;
+      STATUS    : RTEMS.STATUS_CODES;
+   begin
+
+      TASK_NAME := 1;
+
+      RTEMS.TASK_CREATE(
+         0,
+         1,
+         2048,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "TASK_CREATE WITH ILLEGAL NAME"
+      );
+      TEXT_IO.PUT_LINE( 
+         "TA1 - task_create - INVALID_NAME"
+      );
+
+      RTEMS.TASK_CREATE(
+         TASK_NAME,
+         1,
+         BSP.CONFIGURATION.WORKSPACE_SIZE,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.UNSATISFIED,
+         "TASK_CREATE WITH A STACK SIZE LARGER THAN THE WORKSPACE"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_create - stack size - UNSATISFIED"
+      );
+
+      RTEMS.TASK_CREATE(
+         SPTEST.TASK_NAME( 2 ),
+         4,
+         2048,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_create - TA2 created - SUCCESSFUL"
+      );
+
+      RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_suspend - suspend TA2 - SUCCESSFUL"
+      );
+
+      RTEMS.TASK_SUSPEND( SPTEST.TASK_ID( 2 ), STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.ALREADY_SUSPENDED,
+         "TASK_SUSPEND ON SUSPENDED TA2"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_suspend - suspend TA2 - ALREADY_SUSPENDED"
+      );
+
+      RTEMS.TASK_RESUME( SPTEST.TASK_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF TA2" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_resume - TA2 resumed - SUCCESSFUL"
+      );
+
+      RTEMS.TASK_CREATE(
+         SPTEST.TASK_NAME( 3 ),
+         4,
+         2048,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_create - TA3 created - SUCCESSFUL"
+      );
+
+      RTEMS.TASK_CREATE(
+         SPTEST.TASK_NAME( 4 ),
+         4,
+         2048,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 4 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_create - 4 created - SUCCESSFUL"
+      );
+
+      RTEMS.TASK_CREATE(
+         SPTEST.TASK_NAME( 5 ),
+         4,
+         2048,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 5 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA5" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_create - 5 created - SUCCESSFUL"
+      );
+
+      RTEMS.TASK_CREATE(
+         SPTEST.TASK_NAME( 6 ),
+         4,
+         2048,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 6 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA6" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_create - 6 created - SUCCESSFUL"
+      );
+
+      RTEMS.TASK_CREATE(
+         SPTEST.TASK_NAME( 7 ),
+         4,
+         2048,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 7 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA7" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_create - 7 created - SUCCESSFUL"
+      );
+
+      RTEMS.TASK_CREATE(
+         SPTEST.TASK_NAME( 8 ),
+         4,
+         2048,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 8 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA8" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_create - 8 created - SUCCESSFUL"
+      );
+
+      RTEMS.TASK_CREATE(
+         SPTEST.TASK_NAME( 9 ),
+         4,
+         2048,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 9 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA9" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_create - 9 created - SUCCESSFUL"
+      );
+
+      RTEMS.TASK_CREATE(
+         SPTEST.TASK_NAME( 10 ),
+         4,
+         2048,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 10 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA10" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_create - 10 created - SUCCESSFUL"
+      );
+
+      RTEMS.TASK_CREATE(
+         TASK_NAME,
+         4,
+         2048,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TOO_MANY,
+         "TASK_CREATE FOR TOO MANY TASKS"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_create - 11 - TOO_MANY" );
+
+      RTEMS.TASK_CREATE(
+         TASK_NAME,
+         4,
+         2048,
+         RTEMS.DEFAULT_MODES,
+         RTEMS.GLOBAL,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.MP_NOT_CONFIGURED,
+         "TASK_CREATE OF GLOBAL TASK IN SINGLE CPU SYSTEM"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - task_create - MP_NOT_CONFIGURED" );
+
+   end SCREEN_3;
+
+--PAGE
+-- 
+--  SCREEN_4
+--
+
+   procedure SCREEN_4
+   is
+      EVENT_OUT : RTEMS.EVENT_SET;
+      TIME      : RTEMS.TIME_OF_DAY;
+      STATUS    : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.EVENT_RECEIVE(
+         RTEMS.EVENT_16,
+         RTEMS.NO_WAIT,
+         RTEMS.NO_TIMEOUT,
+         EVENT_OUT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.UNSATISFIED,
+         "EVENT_RECEIVE UNSATISFIED (ALL)"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - event_receive - UNSATISFIED ( all conditions )"
+      );
+
+      RTEMS.EVENT_RECEIVE(
+         RTEMS.EVENT_16,
+         RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
+         RTEMS.NO_TIMEOUT,
+         EVENT_OUT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.UNSATISFIED,
+         "EVENT_RECEIVE UNSATISFIED (ANY)"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - event_receive - UNSATISFIED ( any conditions )"
+      );
+
+      TEXT_IO.PUT_LINE( "TA1 - event_receive - timeout in 3 seconds" );
+      RTEMS.EVENT_RECEIVE(
+         RTEMS.EVENT_16,
+         RTEMS.DEFAULT_OPTIONS,
+         3 * TEST_SUPPORT.TICKS_PER_SECOND,
+         EVENT_OUT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TIMEOUT,
+         "EVENT_RECEIVE AFTER 3 SECOND TIMEOUT"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - event_receive - woke with TIMEOUT"
+      );
+
+      RTEMS.EVENT_SEND(
+         100,
+         RTEMS.EVENT_16,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "EVENT_SEND WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - event_send - INVALID_ID"
+      );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - task_wake_after - sleep 1 second - SUCCESSFUL" 
+      );
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (1 SECOND)" );
+
+      TIME := ( 1988, 2, 5, 8, 30, 45, 0 );
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
+      TEXT_IO.PUT_LINE( " - SUCCESSFUL" );
+
+   end SCREEN_4;
+
+--PAGE
+-- 
+--  SCREEN_5
+--
+
+   procedure SCREEN_5
+   is
+      COUNT          : RTEMS.UNSIGNED32;
+      STATUS         : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.SEMAPHORE_CREATE(
+         0,
+         1,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "SEMAPHORE_CREATE WITH ILLEGAL NAME"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_create - INVALID_NAME" );
+
+      RTEMS.SEMAPHORE_CREATE(
+         SPTEST.SEMAPHORE_NAME( 1 ),
+         1,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.SEMAPHORE_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED(
+         STATUS,
+         "SEMAPHORE_CREATE SUCCESSFUL"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_create - 1 - SUCCESSFUL" );
+
+      RTEMS.SEMAPHORE_CREATE(
+         SPTEST.SEMAPHORE_NAME( 2 ),
+         1,
+         RTEMS.BINARY_SEMAPHORE,
+         SPTEST.SEMAPHORE_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED(
+         STATUS,
+         "SEMAPHORE_CREATE SUCCESSFUL"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_create - 2 - SUCCESSFUL" );
+
+      RTEMS.SEMAPHORE_CREATE(
+         SPTEST.SEMAPHORE_NAME( 3 ),
+         1,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TOO_MANY,
+         "SEMAPHORE_CREATE OF TOO MANY"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_create - 3 - TOO_MANY" );
+
+      RTEMS.SEMAPHORE_CREATE(
+         SPTEST.SEMAPHORE_NAME( 1 ),
+         1,
+         RTEMS.INHERIT_PRIORITY + RTEMS.BINARY_SEMAPHORE + RTEMS.FIFO,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.NOT_DEFINED,
+         "SEMAPHORE_CREATE OF FIFO INHERIT PRIORITY"
+      );
+      TEXT_IO.PUT_LINE("TA1 - semaphore_create - NOT_DEFINED");
+
+      RTEMS.SEMAPHORE_CREATE(
+         SPTEST.SEMAPHORE_NAME( 1 ),
+         1,
+         RTEMS.INHERIT_PRIORITY + RTEMS.COUNTING_SEMAPHORE + RTEMS.PRIORITY,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.NOT_DEFINED,
+         "SEMAPHORE_CREATE OF COUNTING_SEMAPHORE INHERIT PRIORITY"
+      );
+      TEXT_IO.PUT_LINE("TA1 - semaphore_create - NOT_DEFINED");
+
+      RTEMS.SEMAPHORE_CREATE(
+         SPTEST.SEMAPHORE_NAME( 1 ),
+         2,
+         RTEMS.BINARY_SEMAPHORE,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NUMBER,
+         "SEMAPHORE_CREATE OF BINARY_SEMAPHORE with COUNT > 1"
+      );
+      TEXT_IO.PUT_LINE("TA1 - semaphore_create - INVALID_NUMBER");
+
+      RTEMS.SEMAPHORE_CREATE(
+         SPTEST.SEMAPHORE_NAME( 3 ),
+         1,
+         RTEMS.GLOBAL,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.MP_NOT_CONFIGURED,
+         "SEMAPHORE_CREATE OF MP_NOT_CONFIGURED"
+      );
+      TEXT_IO.PUT_LINE("TA1 - semaphore_create - MP_NOT_CONFIGURED");
+
+      RTEMS.SEMAPHORE_DELETE( 100, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "SEMAPHORE_DELETE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - semaphore_delete - unknown INVALID_ID"
+      );
+
+      RTEMS.SEMAPHORE_DELETE( 16#10100#, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "SEMAPHORE_DELETE WITH LOCAL ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - semaphore_delete - local INVALID_ID"
+      );
+
+      RTEMS.SEMAPHORE_IDENT(
+         100,
+         RTEMS.SEARCH_ALL_NODES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "SEMAPHORE_IDENT WITH ILLEGAL NAME (local)"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - semaphore_ident - global INVALID_NAME"
+      );
+
+      RTEMS.SEMAPHORE_IDENT( 100, 1, SPTEST.JUNK_ID, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "SEMAPHORE_IDENT WITH ILLEGAL NAME (global)"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - semaphore_ident - local INVALID_NAME"
+      );
+
+  end SCREEN_5;
+
+--PAGE
+-- 
+--  SCREEN_6
+--
+
+   procedure SCREEN_6
+   is
+      COUNT          : RTEMS.UNSIGNED32;
+      STATUS         : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.SEMAPHORE_OBTAIN(
+         100,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "SEMAPHORE_OBTAIN WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - INVALID_ID" );
+
+      RTEMS.SEMAPHORE_OBTAIN(
+         SPTEST.SEMAPHORE_ID( 1 ),
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED(STATUS, "SEMAPHORE_OBTAIN SUCCESSFUL");
+      TEXT_IO.PUT_LINE( 
+         "TA1 - semaphore_obtain - got sem 1 - SUCCESSFUL"
+      );
+
+      RTEMS.SEMAPHORE_OBTAIN(
+         SPTEST.SEMAPHORE_ID( 1 ),
+         RTEMS.NO_WAIT,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.UNSATISFIED,
+         "SEMAPHORE_OBTAIN NOT AVAILABLE"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - UNSATISFIED" );
+
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - timeout in 3 seconds" );
+      RTEMS.SEMAPHORE_OBTAIN(
+         SPTEST.SEMAPHORE_ID( 1 ),
+         RTEMS.DEFAULT_OPTIONS,
+         3 * TEST_SUPPORT.TICKS_PER_SECOND,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TIMEOUT,
+         "SEMAPHORE_OBTAIN NOT AVAILABLE"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - semaphore_obtain - woke with TIMEOUT"
+      );
+
+      RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.NOT_OWNER_OF_RESOURCE,
+         "SEMAPHORE_RELEASE AND NOT OWNER"
+      );
+      TEXT_IO.PUT_LINE( 
+         "TA1 - semaphore_release - NOT_OWNER_OF_RESOURCE"
+      );
+
+      RTEMS.SEMAPHORE_RELEASE( 100, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "SEMAPHORE_RELEASE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_release - INVALID_ID" );
+
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_start - start TA2 - SUCCESSFUL"
+     );
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_2'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - task_wake_after - yield processor - SUCCESSFUL"
+      );
+      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - semaphore_delete - delete sem 1 - SUCCESSFUL"
+      );
+      RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM1" );
+
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - binary semaphore" );
+      RTEMS.SEMAPHORE_OBTAIN(
+         SPTEST.SEMAPHORE_ID( 2 ),
+         RTEMS.NO_WAIT,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - semaphore_delete - delete sem 2 - RESOURCE_IN_USE"
+      );
+      RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
+         STATUS, 
+         RTEMS.RESOURCE_IN_USE,
+         "SEMAPHORE_DELETE OF SM2" 
+      );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - task_wake_after - yield processor - SUCCESSFUL"
+      );
+      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" );
+
+      RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TASK_DELETE AFTER THE TASK HAS BEEN DELETED"
+      );
+      TEXT_IO.PUT_LINE( 
+         "TA1 - task_delete TA2 - already deleted INVALID_ID"
+      );
+
+   end SCREEN_6;
+
+--PAGE
+-- 
+--  SCREEN_7
+--
+
+   procedure SCREEN_7
+   is
+      BUFFER         : RTEMS.BUFFER;
+      BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+      COUNT          : RTEMS.UNSIGNED32;
+      STATUS         : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.MESSAGE_QUEUE_BROADCAST(
+         100,
+         BUFFER_POINTER,
+         COUNT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "MESSAGE_QUEUE_BROADCAST WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_broadcast - INVALID_ID"
+      );
+
+      BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+      RTEMS.MESSAGE_QUEUE_CREATE(
+         0,
+         3,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "MESSAGE_QUEUE_CREATE WITH ILLEGAL NAME"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_create - Q 1 - INVALID_NAME"
+      );
+
+      RTEMS.MESSAGE_QUEUE_CREATE(
+         SPTEST.QUEUE_NAME( 1 ),
+         1,
+         RTEMS.GLOBAL,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.MP_NOT_CONFIGURED,
+         "MESSAGE_QUEUE_CREATE OF MP NOT CONFIGURED"
+      );
+      TEXT_IO.PUT_LINE(
+             "TA1 - message_queue_create - Q 1 - MP_NOT_CONFIGURED");
+
+      RTEMS.MESSAGE_QUEUE_CREATE(
+         SPTEST.QUEUE_NAME( 1 ),
+         2,
+         RTEMS.LIMIT,
+         SPTEST.QUEUE_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED(
+         STATUS,
+         "MESSAGE_QUEUE_CREATE SUCCESSFUL"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_create - Q 1 - LIMIT - SUCCESSFUL"
+      );
+
+      RTEMS.MESSAGE_QUEUE_CREATE(
+         SPTEST.QUEUE_NAME( 2 ),
+         1,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TOO_MANY,
+         "MESSAGE_QUEUE_CREATE OF TOO MANY"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_create - Q 2 - TOO_MANY"
+      );
+
+      RTEMS.MESSAGE_QUEUE_DELETE( 100, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "MESSAGE_QUEUE_DELETE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_delete - unknown INVALID_ID"
+      );
+
+      RTEMS.MESSAGE_QUEUE_DELETE( 16#10100#, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "MESSAGE_QUEUE_DELETE WITH LOCAL ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_delete - local INVALID_ID"
+      );
+
+      RTEMS.MESSAGE_QUEUE_IDENT(
+         100,
+         RTEMS.SEARCH_ALL_NODES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "MESSAGE_QUEUE_IDENT WITH ILLEGAL NAME"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_ident - INVALID_NAME" );
+
+      RTEMS.MESSAGE_QUEUE_FLUSH( 100, COUNT, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "MESSAGE_QUEUE_FLUSH WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - INVALID_ID" );
+
+      RTEMS.MESSAGE_QUEUE_RECEIVE(
+         100,
+         BUFFER_POINTER,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "MESSAGE_QUEUE_RECEIVE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_receive - INVALID_ID" );
+
+      RTEMS.MESSAGE_QUEUE_RECEIVE(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         RTEMS.NO_WAIT,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.UNSATISFIED,
+         "MESSAGE_QUEUE_RECEIVE UNSATISFIED"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_receive - Q 1 - UNSATISFIED"
+      );
+
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_receive - Q 1 - timeout in 3 seconds"
+      );
+      RTEMS.MESSAGE_QUEUE_RECEIVE(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         RTEMS.DEFAULT_OPTIONS,
+         3 * TEST_SUPPORT.TICKS_PER_SECOND,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TIMEOUT,
+         "MESSAGE_QUEUE_RECEIVE 3 SECOND TIMEOUT"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_receive - Q 1 - woke up with TIMEOUT"
+      );
+
+      RTEMS.MESSAGE_QUEUE_SEND( 100, BUFFER_POINTER, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "MESSAGE_QUEUE_SEND WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - INVALID_ID" );
+
+      RTEMS.MESSAGE_QUEUE_SEND(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_send - BUFFER 1 TO Q 1 - SUCCESSFUL"
+      );
+
+      RTEMS.MESSAGE_QUEUE_SEND(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_send - BUFFER 2 TO Q 1 - SUCCESSFUL"
+      );
+
+      RTEMS.MESSAGE_QUEUE_SEND(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TOO_MANY,
+         "MESSAGE_QUEUE_SEND TOO MANY TO LIMITED QUEUE"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_send - BUFFER 3 TO Q 1 - TOO_MANY"
+      );
+
+   end SCREEN_7;
+
+--PAGE
+-- 
+--  SCREEN_8
+--
+
+   procedure SCREEN_8
+   is
+      BUFFER         : RTEMS.BUFFER;
+      BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+      STATUS         : RTEMS.STATUS_CODES;
+   begin
+
+      BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+      RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED(
+         STATUS,
+         "MESSAGE_QUEUE_DELETE SUCCESSFUL"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_delete - Q 1 - SUCCESSFUL"
+      );
+
+      RTEMS.MESSAGE_QUEUE_CREATE(
+         SPTEST.QUEUE_NAME( 1 ),
+         2,
+         RTEMS.LIMIT,
+         SPTEST.QUEUE_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED(
+         STATUS,
+         "MESSAGE_QUEUE_CREATE SUCCESSFUL"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_create - Q 1 - LIMIT - SUCCESSFUL"
+      );
+
+      RTEMS.MESSAGE_QUEUE_SEND(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_send - BUFFER 1 TO Q 1 - SUCCESSFUL"
+      );
+
+      RTEMS.MESSAGE_QUEUE_SEND(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_send - BUFFER 2 TO Q 1 - SUCCESSFUL"
+      );
+
+      RTEMS.MESSAGE_QUEUE_SEND(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TOO_MANY,
+         "MESSAGE_QUEUE_SEND TOO MANY TO LIMITED QUEUE"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_send - BUFFER 3 TO Q 1 - TOO_MANY"
+      );
+
+      RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED(
+         STATUS,
+         "MESSAGE_QUEUE_DELETE SUCCESSFUL"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_delete - Q 1 - SUCCESSFUL"
+      );
+
+      RTEMS.MESSAGE_QUEUE_CREATE(
+         SPTEST.QUEUE_NAME( 1 ),
+         3,
+         RTEMS.LIMIT,
+         SPTEST.QUEUE_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED(
+         STATUS,
+         "MESSAGE_QUEUE_CREATE SUCCESSFUL"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_create - Q 1 - LIMIT - SUCCESSFUL"
+      );
+
+      RTEMS.MESSAGE_QUEUE_SEND(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_send - BUFFER 1 TO Q 1 - SUCCESSFUL"
+      );
+
+      RTEMS.MESSAGE_QUEUE_SEND(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_send - BUFFER 2 TO Q 1 - SUCCESSFUL"
+      );
+
+      RTEMS.MESSAGE_QUEUE_SEND(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.UNSATISFIED,
+         "MESSAGE_QUEUE_SEND TOO MANY TO LIMITED QUEUE"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_send - BUFFER 3 TO Q 1 - UNSATISFIED"
+      );
+
+      RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED(
+         STATUS,
+         "MESSAGE_QUEUE_DELETE SUCCESSFUL"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_delete - Q 1 - SUCCESSFUL"
+      );
+
+      RTEMS.MESSAGE_QUEUE_CREATE(
+         SPTEST.QUEUE_NAME( 1 ),
+         2,
+         RTEMS.LIMIT,
+         SPTEST.QUEUE_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED(
+         STATUS,
+         "MESSAGE_QUEUE_CREATE SUCCESSFUL"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_create - Q 1 - LIMIT - SUCCESSFUL"
+      );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - task_start - start TA3 - SUCCESSFUL"
+      );
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 3 ),
+         SPTEST.TASK_3'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - task_wake_after - yield processor - SUCCESSFUL"
+      );
+      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" );
+
+      RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED(
+         STATUS,
+         "MESSAGE_QUEUE_DELETE SUCCESSFUL"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - message_queue_delete - delete Q 1 - SUCCESSFUL"
+      );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - task_wake_after - yield processor - SUCCESSFUL"
+      );
+      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" );
+
+   end SCREEN_8;
+
+--PAGE
+-- 
+--  SCREEN_9
+--
+
+   procedure SCREEN_9
+   is
+      CONVERTED           : RTEMS.ADDRESS;
+      STATUS              : RTEMS.STATUS_CODES;
+      OLD_SERVICE_ROUTINE : RTEMS.ADDRESS;
+   begin
+
+--      RTEMS.INTERRUPT_CATCH( 
+--         SPTEST.SERVICE_ROUTINE'ACCESS,
+--         500,
+--         OLD_SERVICE_ROUTINE,
+--         STATUS
+--      );
+--      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+--         STATUS,
+--         RTEMS.INVALID_NUMBER,
+--         "INTERRUPT_CATCH WITH INVALID VECTOR"
+--      );
+--      TEXT_IO.PUT_LINE( "TA1 - interrupt_catch - INVALID_NUMBER" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - interrupt_catch - INVALID_NUMBER -- constraint error"
+      );
+
+      RTEMS.INTERRUPT_CATCH( 
+         RTEMS.NULL_ADDRESS,
+         3,
+         OLD_SERVICE_ROUTINE,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ADDRESS,
+         "INTERRUPT_CATCH WITH INVALID HANDLER"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - interrupt_catch - INVALID_ADDRESS" );
+
+      RTEMS.SIGNAL_SEND( 100, RTEMS.SIGNAL_1, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "SIGNAL_SEND WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - signal_send - INVALID_ID" );
+
+      RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_16, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.NOT_DEFINED,
+         "SIGNAL_SEND WITH NO HANDLER"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - signal_send - NOT_DEFINED" );
+
+      RTEMS.PORT_CREATE(
+         0,
+         SPTEST.INTERNAL_PORT_AREA'ADDRESS,
+         SPTEST.EXTERNAL_PORT_AREA'ADDRESS,
+         SPTEST.INTERNAL_PORT_AREA'LENGTH,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "PORT_CREATE WITH ILLEGAL NAME"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - port_create - INVALID_NAME" );
+
+      RTEMS.PORT_CREATE(
+         SPTEST.PORT_NAME( 1 ),
+         SPTEST.INTERNAL_PORT_AREA( 1 )'ADDRESS,
+         SPTEST.EXTERNAL_PORT_AREA'ADDRESS,
+         SPTEST.INTERNAL_PORT_AREA'LENGTH,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ADDRESS,
+         "PORT_CREATE WITH ILLEGAL ADDRESS"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - port_create - INVALID_ADDRESS" );
+
+      RTEMS.PORT_CREATE(
+         SPTEST.PORT_NAME( 1 ),
+         SPTEST.INTERNAL_PORT_AREA'ADDRESS,
+         SPTEST.EXTERNAL_PORT_AREA'ADDRESS,
+         SPTEST.INTERNAL_PORT_AREA'LENGTH,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TOO_MANY,
+         "PORT_CREATE OF TOO MANY"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - port_create - TOO_MANY" );
+
+      RTEMS.PORT_DELETE( 0, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "PORT_DELETE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - port_delete - INVALID_ID" );
+
+      RTEMS.PORT_IDENT( 0, SPTEST.JUNK_ID, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "PORT_IDENT WITH ILLEGAL NAME"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - port_ident - INVALID_NAME" );
+
+      RTEMS.PORT_INTERNAL_TO_EXTERNAL(
+         100,
+         SPTEST.INTERNAL_PORT_AREA'ADDRESS,
+         CONVERTED,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "PORT_INTERNAL_TO_EXTERNAL WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - port_internal_to_external - INVALID_ID"
+      );
+
+      RTEMS.PORT_EXTERNAL_TO_INTERNAL(
+         100,
+         SPTEST.EXTERNAL_PORT_AREA'ADDRESS,
+         CONVERTED,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "PORT_EXTERNAL_TO_INTERNAL WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - port_external_to_internal - INVALID_ID"
+      );
+
+   end SCREEN_9;
+
+--PAGE
+-- 
+--  SCREEN_10
+--
+
+   procedure SCREEN_10
+   is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.RATE_MONOTONIC_CREATE( 0, SPTEST.JUNK_ID, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "RATE_MONOTONIC_CREATE WITH ILLEGAL NAME"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - rate_monotonic_create - INVALID_NAME"
+      );
+
+      RTEMS.RATE_MONOTONIC_CREATE(
+         SPTEST.PERIOD_NAME( 1 ),
+         SPTEST.PERIOD_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CREATE" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - rate_monotonic_create - SUCCESSFUL"
+      );
+
+      RTEMS.RATE_MONOTONIC_CREATE(
+         SPTEST.PERIOD_NAME( 1 ),
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TOO_MANY,
+         "RATE_MONOTONIC_CREATE FOR TOO MANY"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - rate_monotonic_create - TOO_MANY" );
+
+      RTEMS.RATE_MONOTONIC_IDENT( 0, SPTEST.JUNK_ID, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "RATE_MONOTONIC_IDENT WITH ILLEGAL NAME"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - rate_monotonic_ident - INVALID_NAME"
+      );
+
+      RTEMS.RATE_MONOTONIC_PERIOD( 100, 5, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "RATE_MONOTONIC_PERIOD WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - rate_monotonic_period - unknown INVALID_ID"
+      );
+
+      RTEMS.RATE_MONOTONIC_PERIOD( 16#10100#, 5, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "RATE_MONOTONIC_PERIOD WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - rate_monotonic_period - local INVALID_ID"
+      );
+
+      RTEMS.RATE_MONOTONIC_PERIOD(
+         SPTEST.PERIOD_ID( 1 ),
+         RTEMS.PERIOD_STATUS,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.NOT_DEFINED,
+         "RATE_MONOTONIC_PERIOD STATUS NOT DEFINED"
+      );
+      TEXT_IO.PUT_LINE( 
+         "TA1 - rate_monotonic_period( STATUS ) - NOT_DEFINED"
+      );
+
+      RTEMS.RATE_MONOTONIC_PERIOD( SPTEST.PERIOD_ID( 1 ), 100, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED(
+         STATUS,
+         "RATE_MONOTONIC_PERIOD 100 TICKS"
+      );
+      TEXT_IO.PUT( "TA1 - rate_monotonic_period - 100 ticks - " );
+      TEXT_IO.PUT_LINE( "SUCCESSFUL" );
+
+      RTEMS.RATE_MONOTONIC_PERIOD(
+         SPTEST.PERIOD_ID( 1 ),
+         RTEMS.PERIOD_STATUS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED(
+         STATUS,
+         "RATE_MONOTONIC_PERIOD STATUS"
+      );
+      TEXT_IO.PUT( "TA1 - rate_monotonic_period( STATUS ) - " );
+      TEXT_IO.PUT_LINE( "SUCCESSFUL" );
+
+      loop
+
+         RTEMS.RATE_MONOTONIC_PERIOD(
+            SPTEST.PERIOD_ID( 1 ),
+            RTEMS.PERIOD_STATUS,
+            STATUS
+         );
+
+         exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.TIMEOUT );
+
+         TEST_SUPPORT.DIRECTIVE_FAILED(
+            STATUS,
+            "RATE_MONOTONIC_PERIOD STATUS WAITING FOR TIMEOUT"
+         );
+ 
+      end loop;
+      TEXT_IO.PUT( "TA1 - rate_monotonic_period( STATUS ) - " );
+      TEXT_IO.PUT_LINE( "TIMEOUT" );
+
+      RTEMS.RATE_MONOTONIC_CANCEL( 100, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "RATE_MONOTONIC_CANCEL WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - rate_monotonic_cancel - unknown INVALID_ID"
+      );
+
+      RTEMS.RATE_MONOTONIC_CANCEL( 16#10100#, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "RATE_MONOTONIC_CANCEL WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - rate_monotonic_cancel - local INVALID_ID"
+      );
+
+      RTEMS.RATE_MONOTONIC_CANCEL( SPTEST.PERIOD_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CANCEL" );
+      TEXT_IO.PUT_LINE( "TA1 - rate_monotonic_cancel - SUCCESSFUL" );
+
+      RTEMS.RATE_MONOTONIC_PERIOD( SPTEST.PERIOD_ID( 1 ), 5, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED(
+         STATUS,
+         "RATE_MONOTONIC_PERIOD RESTART"
+      );
+
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+      RTEMS.RATE_MONOTONIC_PERIOD( SPTEST.PERIOD_ID( 1 ), 5, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TIMEOUT,
+         "RATE_MONOTONIC_PERIOD TIMED OUT"
+      );
+      TEXT_IO.PUT_LINE( 
+         "TA1 - rate_monotonic_period - 5 ticks - TIMEOUT" 
+      );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 4 ),
+         SPTEST.TASK_4'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yielding to TA4" );
+      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER (yield)" );
+
+      RTEMS.RATE_MONOTONIC_DELETE( 100, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "RATE_MONOTONIC_DELETE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - rate_monotonic_delete - unknown INVALID_ID"
+      );
+
+      RTEMS.RATE_MONOTONIC_DELETE( 16#10100#, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "RATE_MONOTONIC_DELETE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - rate_monotonic_delete - local INVALID_ID"
+      );
+
+      RTEMS.RATE_MONOTONIC_DELETE( SPTEST.PERIOD_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_DELETE" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - rate_monotonic_delete - SUCCESSFUL"
+      );
+
+   end SCREEN_10;
+
+--PAGE
+-- 
+--  SCREEN_11
+--
+
+   procedure SCREEN_11
+   is
+      BUFFER_ADDRESS_1 : RTEMS.ADDRESS;
+      BUFFER_ADDRESS_2 : RTEMS.ADDRESS;
+      BUFFER_ADDRESS_3 : RTEMS.ADDRESS;
+      STATUS           : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.PARTITION_CREATE(
+         0,
+         SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+         128,
+         40,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "PARTITION_CREATE WITH ILLEGAL NAME"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - partition_create - INVALID_NAME" );
+
+      RTEMS.PARTITION_CREATE(
+         SPTEST.PARTITION_NAME( 1 ),
+         SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+         0,
+         80,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_SIZE,
+         "PARTITION_CREATE WITH ILLEGAL LENGTH"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - partition_create - length - INVALID_SIZE"
+      );
+
+      RTEMS.PARTITION_CREATE(
+         SPTEST.PARTITION_NAME( 1 ),
+         SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+         128,
+         0,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_SIZE,
+         "PARTITION_CREATE WITH ILLEGAL BUFFER_SIZE"
+      );
+      TEXT_IO.PUT_LINE( 
+         "TA1 - partition_create - buffer size - INVALID_SIZE" 
+      );
+
+      RTEMS.PARTITION_CREATE(
+         SPTEST.PARTITION_NAME( 1 ),
+         SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+         128,
+         256,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_SIZE,
+         "PARTITION_CREATE WITH BUFFER_SIZE > LENGTH"
+      );
+      TEXT_IO.PUT_LINE( 
+       "TA1 - partition_create - length < buffer size - INVALID_SIZE"
+      );
+
+      RTEMS.PARTITION_CREATE(
+         SPTEST.PARTITION_NAME( 1 ),
+         SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+         128,
+         64,
+         RTEMS.GLOBAL,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.MP_NOT_CONFIGURED,
+         "PARTITION_CREATE OF GLOBAL"
+      );
+      TEXT_IO.PUT_LINE("TA1 - partition_create - MP_NOT_CONFIGURED");
+
+      RTEMS.PARTITION_CREATE(
+         SPTEST.PARTITION_NAME( 1 ),
+         SPTEST.PARTITION_BAD_AREA'ADDRESS,
+         128,
+         64,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ADDRESS,
+         "PARTITION_CREATE WITH BAD ADDRESS"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - partition_create - INVALID_ADDRESS" );
+
+      RTEMS.PARTITION_CREATE(
+         SPTEST.PARTITION_NAME( 1 ),
+         SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+         128,
+         34,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_SIZE,
+         "PARTITION_CREATE WITH UNALIGNED BUFFER_SIZE"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - partition_create - INVALID_SIZE" );
+
+      RTEMS.PARTITION_DELETE( 100, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "PARTITION_DELETE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - partition_delete - unknown INVALID_ID"
+      );
+
+      RTEMS.PARTITION_DELETE( 16#10100#, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "PARTITION_DELETE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - partition_delete - local INVALID_ID"
+      );
+
+      RTEMS.PARTITION_GET_BUFFER( 100, BUFFER_ADDRESS_1, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "PARTITION_GET_BUFFER WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - partition_get_buffer - INVALID_ID" );
+
+      RTEMS.PARTITION_IDENT(
+         0,
+         RTEMS.SEARCH_ALL_NODES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "PARTITION_IDENT WITH ILLEGAL NAME"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - partition_ident - INVALID_NAME" );
+
+      RTEMS.PARTITION_RETURN_BUFFER( 100, BUFFER_ADDRESS_1, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "PARTITION_RETURN WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - partition_return_buffer - INVALID_ID"
+      );
+
+      RTEMS.PARTITION_CREATE(
+         SPTEST.PARTITION_NAME( 1 ),
+         SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+         128,
+         64,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.PARTITION_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE" );
+      TEXT_IO.PUT_LINE( "TA1 - partition_create - SUCCESSFUL" );
+
+      RTEMS.PARTITION_CREATE(
+         SPTEST.PARTITION_NAME( 1 ),
+         SPTEST.PARTITION_GOOD_AREA'ADDRESS,
+         128,
+         64,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TOO_MANY,
+         "PARTITION_CREATE OF TOO MANY"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - partition_create - TOO_MANY" );
+
+      RTEMS.PARTITION_GET_BUFFER(
+         SPTEST.PARTITION_ID( 1 ),
+         BUFFER_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
+      TEXT_IO.PUT_LINE( "TA1 - partition_get_buffer - SUCCESSFUL" );
+
+      RTEMS.PARTITION_GET_BUFFER(
+         SPTEST.PARTITION_ID( 1 ),
+         BUFFER_ADDRESS_2,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
+      TEXT_IO.PUT_LINE( "TA1 - partition_get_buffer - SUCCESSFUL" );
+
+      RTEMS.PARTITION_GET_BUFFER(
+         SPTEST.PARTITION_ID( 1 ),
+         BUFFER_ADDRESS_3,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.UNSATISFIED,
+         "PARTITION_GET_BUFFER UNSATISFIED"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - partition_get_buffer - UNSATISFIED" );
+
+      RTEMS.PARTITION_DELETE(
+         SPTEST.PARTITION_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.RESOURCE_IN_USE,
+         "PARTITION_DELETE WITH BUFFERS IN USE"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - partition_delete - RESOURCE_IN_USE" );
+
+      RTEMS.PARTITION_RETURN_BUFFER(
+         SPTEST.PARTITION_ID( 1 ),
+         SPTEST.REGION_GOOD_AREA( 0 )'ADDRESS,  -- NOTE: REGION
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ADDRESS,
+         "PARTITION_RETURN WITH BUFFER ADDRESS OUT OF PARTITION"
+      );
+      TEXT_IO.PUT( "TA1 - partition_return_buffer - " );
+      TEXT_IO.PUT_LINE( "INVALID_ADDRESS - out of range" );
+
+      RTEMS.PARTITION_RETURN_BUFFER(
+         SPTEST.PARTITION_ID( 1 ),
+         SPTEST.PARTITION_GOOD_AREA( 7 )'ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ADDRESS,
+         "PARTITION_RETURN WITH BUFFER ADDRESS NOT ON BOUNDARY"
+      );
+      TEXT_IO.PUT( "TA1 - partition_return_buffer - " );
+      TEXT_IO.PUT_LINE( "INVALID_ADDRESS - not on boundary" );
+
+
+   end SCREEN_11;
+
+--PAGE
+-- 
+--  SCREEN_12
+--
+
+   procedure SCREEN_12
+   is
+      SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_3 : RTEMS.ADDRESS;
+      OFFSET            : RTEMS.UNSIGNED32;
+      GOOD_FRONT_FLAG   : RTEMS.UNSIGNED32;
+      GOOD_BACK_FLAG    : RTEMS.UNSIGNED32;
+      STATUS            : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.REGION_CREATE(
+         0,
+         SPTEST.REGION_GOOD_AREA'ADDRESS,
+         128,
+         32,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "REGION_CREATE WITH ILLEGAL NAME"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - region_create - INVALID_NAME" );
+
+      RTEMS.REGION_CREATE(
+         SPTEST.REGION_NAME( 1 ),
+         SPTEST.REGION_BAD_AREA'ADDRESS,
+         128,
+         32,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ADDRESS,
+         "REGION_CREATE WITH ILLEGAL ADDRESS"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - region_create - INVALID_ADDRESS" );
+
+      RTEMS.REGION_CREATE(
+         SPTEST.REGION_NAME( 1 ),
+         SPTEST.REGION_GOOD_AREA'ADDRESS,
+         128,
+         34,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_SIZE,
+         "REGION_CREATE WITH ILLEGAL SIZE"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - region_create - INVALID_SIZE" );
+
+      RTEMS.REGION_CREATE(
+         SPTEST.REGION_NAME( 1 ),
+         SPTEST.REGION_GOOD_AREA( SPTEST.REGION_START_OFFSET )'ADDRESS,
+         SPTEST.REGION_LENGTH,
+         128,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.REGION_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE" );
+      TEXT_IO.PUT_LINE( "TA1 - region_create - SUCCESSFUL" );
+
+      RTEMS.REGION_CREATE(
+         SPTEST.REGION_NAME( 1 ),
+         SPTEST.REGION_GOOD_AREA'ADDRESS,
+         128,
+         32,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TOO_MANY,
+         "REGION_CREATE FOR TOO MANY"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - region_create - TOO_MANY" );
+
+      RTEMS.REGION_DELETE( 100, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "REGION_DELETE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - region_delete - unknown INVALID_ID" );
+
+      RTEMS.REGION_DELETE( 16#10100#, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "REGION_DELETE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - region_delete - local INVALID_ID" );
+
+      RTEMS.REGION_IDENT( 0, SPTEST.JUNK_ID, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "REGION_IDENT WITH ILLEGAL NAME"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - region_ident - INVALID_NAME" );
+
+      RTEMS.REGION_GET_SEGMENT(
+         100,
+         128,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "REGION_GET_SEGMENT WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - region_get_segment - INVALID_ID" );
+
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         RTEMS.UNSIGNED32'LAST,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_SIZE,
+         "REGION_GET_SEGMENT WITH ILLEGAL SIZE"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - region_get_segment - INVALID_SIZE" );
+
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         384,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT_LINE( "TA1 - region_get_segment - SUCCESSFUL" );
+
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         384,
+         RTEMS.NO_WAIT,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_2,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.UNSATISFIED,
+         "REGION_GET_SEGMENT UNSATISFIED"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - region_get_segment - UNSATISFIED" );
+
+      TEXT_IO.PUT_LINE( "TA1 - region_get_segment - timeout in 3 seconds" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         128,
+         RTEMS.DEFAULT_OPTIONS,
+         3 * TEST_SUPPORT.TICKS_PER_SECOND,
+         SEGMENT_ADDRESS_3,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TIMEOUT,
+         "REGION_GET_SEGMENT TIMEOUT"
+      );
+      TEXT_IO.PUT_LINE( 
+         "TA1 - region_get_segment - woke up with TIMEOUT" 
+      );
+
+      RTEMS.REGION_DELETE( SPTEST.REGION_ID( 1 ), STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.RESOURCE_IN_USE,
+         "REGION_DELETE WITH BUFFERS IN USE"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - region_delete - RESOURCE_IN_USE" );
+
+      RTEMS.REGION_RETURN_SEGMENT(
+         100,
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "REGION_RETURN_SEGMENT WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - region_return_segment - INVALID_ID" );
+
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SPTEST.REGION_GOOD_AREA'ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ADDRESS,
+         "REGION_RETURN_SEGMENT WITH ILLEGAL SEGMENT"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - region_return_segment - INVALID_ADDRESS"
+      );
+
+      -- internal heap errors, subject to change if heap code changes
+
+      TEXT_IO.PUT_LINE( "TA1 - debug_disable - DEBUG_REGION" );
+      RTEMS.DEBUG_DISABLE( RTEMS.DEBUG_REGION );
+
+      OFFSET := RTEMS.SUBTRACT( 
+                   SEGMENT_ADDRESS_1, 
+                   SPTEST.REGION_GOOD_AREA'ADDRESS
+                ) / 4;
+
+      -- bad FRONT_FLAG error
+
+      GOOD_FRONT_FLAG := SPTEST.REGION_GOOD_AREA( OFFSET - 1 );
+      SPTEST.REGION_GOOD_AREA( OFFSET - 1 ) := GOOD_FRONT_FLAG + 2;
+
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ADDRESS,
+         "REGION_RETURN_SEGMENT WITH BACK_FLAG /= FRONT_FLAG"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - region_return_segment - INVALID_ADDRESS"
+      );
+
+      SPTEST.REGION_GOOD_AREA( OFFSET - 1 ) := GOOD_FRONT_FLAG;
+
+      -- bad BACK_FLAG error
+
+      GOOD_BACK_FLAG := SPTEST.REGION_GOOD_AREA( OFFSET - 2 );
+      SPTEST.REGION_GOOD_AREA( OFFSET - 2 ) := 1024;
+
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ADDRESS,
+         "REGION_RETURN_SEGMENT WITH BACK_FLAG /= FRONT_FLAG"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - region_return_segment - INVALID_ADDRESS"
+      );
+
+      SPTEST.REGION_GOOD_AREA( OFFSET - 2 ) := GOOD_BACK_FLAG;
+
+      TEXT_IO.PUT_LINE( "TA1 - debug_enable - DEBUG_REGION" );
+      RTEMS.DEBUG_ENABLE( RTEMS.DEBUG_REGION );
+
+      RTEMS.REGION_EXTEND(
+         100,
+         SPTEST.REGION_GOOD_AREA'ADDRESS,
+         128,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "REGION_EXTEND WITH INVALID_ID"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - region_extend - INVALID_ID"
+      );
+
+      RTEMS.REGION_EXTEND(
+         SPTEST.REGION_ID( 1 ),
+         SPTEST.REGION_GOOD_AREA( SPTEST.REGION_START_OFFSET + 16 )'ADDRESS,
+         128,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ADDRESS,
+         "REGION_EXTEND WITH INVALID_ADDRESS"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - region_extend - within heap - INVALID_ADDRESS"
+      );
+
+      RTEMS.REGION_EXTEND(
+         SPTEST.REGION_ID( 1 ),
+         SPTEST.REGION_BAD_AREA'ADDRESS,
+         128,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.NOT_IMPLEMENTED,
+         "REGION_EXTEND WITH NOT_IMPLEMENTED"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - region_extend - non-contiguous lower - NOT_IMPLEMENTED"
+      );
+
+      RTEMS.REGION_EXTEND(
+         SPTEST.REGION_ID( 1 ),
+         SPTEST.REGION_GOOD_AREA( 
+            SPTEST.REGION_START_OFFSET - SPTEST.REGION_LENGTH )'ADDRESS,
+         128,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.NOT_IMPLEMENTED,
+         "REGION_EXTEND WITH NOT_IMPLEMENTED"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - region_extend - contiguous lower - NOT_IMPLEMENTED"
+      );
+
+      RTEMS.REGION_EXTEND(
+         SPTEST.REGION_ID( 1 ),
+         SPTEST.REGION_GOOD_AREA( 
+            SPTEST.REGION_START_OFFSET + SPTEST.REGION_LENGTH + 16 )'ADDRESS,
+         128,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.NOT_IMPLEMENTED,
+         "REGION_EXTEND WITH NOT_IMPLEMENTED"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - region_extend - non-contiguous higher - NOT_IMPLEMENTED"
+      );
+
+   end SCREEN_12;
+
+--PAGE
+-- 
+--  SCREEN_13
+--
+
+   procedure SCREEN_13
+   is
+      RESULT : RTEMS.UNSIGNED32;
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.IO_CLOSE(
+         RTEMS.DEVICE_MAJOR_NUMBER'LAST,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RESULT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NUMBER,
+         "IO_CLOSE WITH BAD MAJOR NUMBER"
+      );
+      TEXT_IO.PUT_LINE("TA1 - io_close - INVALID_NUMBER");
+
+      RTEMS.IO_CONTROL(
+         RTEMS.DEVICE_MAJOR_NUMBER'LAST,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RESULT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NUMBER,
+         "IO_CONTROL WITH BAD MAJOR NUMBER"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_control - INVALID_NUMBER"
+      );
+
+      RTEMS.IO_INITIALIZE(
+         RTEMS.DEVICE_MAJOR_NUMBER'LAST,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RESULT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NUMBER,
+         "IO_INITIALIZE WITH BAD MAJOR NUMBER"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_initialize - INVALID_NUMBER"
+      );
+
+      RTEMS.IO_OPEN(
+         RTEMS.DEVICE_MAJOR_NUMBER'LAST,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RESULT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NUMBER,
+         "IO_OPEN WITH BAD MAJOR NUMBER"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - io_open - INVALID_NUMBER" );
+
+      RTEMS.IO_READ(
+         RTEMS.DEVICE_MAJOR_NUMBER'LAST,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RESULT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NUMBER,
+         "IO_READ WITH BAD MAJOR NUMBER"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - io_read - INVALID_NUMBER" );
+
+      RTEMS.IO_WRITE(
+         RTEMS.DEVICE_MAJOR_NUMBER'LAST,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RESULT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NUMBER,
+         "IO_WRITE WITH BAD MAJOR NUMBER"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - io_write - INVALID_NUMBER" );
+
+      TIME := ( 2000, 12, 31, 23, 59, 59, 0 );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
+      TEST_SUPPORT.PRINT_TIME(
+         "TA1 - clock_set - ",
+         TIME,
+         " - SUCCESSFUL"
+      );
+      TEXT_IO.NEW_LINE;
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" );
+      TEST_SUPPORT.PRINT_TIME(
+         "TA1 - clock_get - ",
+         TIME,
+         " - SUCCESSFUL"
+      );
+      TEXT_IO.NEW_LINE;
+
+      TIME := ( 1999, 12, 31, 23, 59, 59, 0 );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
+      TEST_SUPPORT.PRINT_TIME(
+         "TA1 - clock_set - ",
+         TIME,
+         " - SUCCESSFUL"
+      );
+      TEXT_IO.NEW_LINE;
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" );
+      TEST_SUPPORT.PRINT_TIME(
+         "TA1 - clock_get - ",
+         TIME,
+         " - SUCCESSFUL"
+      );
+      TEXT_IO.NEW_LINE;
+
+      TIME := ( 2100, 12, 31, 23, 59, 59, 0 );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
+      TEST_SUPPORT.PRINT_TIME(
+         "TA1 - clock_set - ",
+         TIME,
+         " - SUCCESSFUL"
+      );
+      TEXT_IO.NEW_LINE;
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" );
+      TEST_SUPPORT.PRINT_TIME(
+         "TA1 - clock_get - ",
+         TIME,
+         " - SUCCESSFUL"
+      );
+      TEXT_IO.NEW_LINE;
+
+      TIME := ( 2099, 12, 31, 23, 59, 59, 0 );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
+      TEST_SUPPORT.PRINT_TIME(
+         "TA1 - clock_set - ",
+         TIME,
+         " - SUCCESSFUL"
+      );
+      TEXT_IO.NEW_LINE;
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" );
+      TEST_SUPPORT.PRINT_TIME(
+         "TA1 - clock_get - ",
+         TIME,
+         " - SUCCESSFUL"
+      );
+      TEXT_IO.NEW_LINE;
+
+      TIME := ( 1991, 12, 31, 23, 59, 59, 0 );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET SUCCESSFUL" );
+      TEST_SUPPORT.PRINT_TIME(
+         "TA1 - clock_set - ",
+         TIME,
+         " - SUCCESSFUL"
+      );
+      TEXT_IO.NEW_LINE;
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" );
+      TEST_SUPPORT.PRINT_TIME(
+         "TA1 - clock_get - ",
+         TIME,
+         " - SUCCESSFUL"
+      );
+      TEXT_IO.NEW_LINE;
+
+   end SCREEN_13;
+
+--PAGE
+-- 
+--  SCREEN_14
+--
+
+   procedure SCREEN_14
+   is
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.TIMER_CREATE( 0, SPTEST.JUNK_ID, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "TIMER_CREATE WITH ILLEGAL NAME"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - timer_create - INVALID_NAME" );
+
+      RTEMS.TIMER_CREATE(
+         SPTEST.TIMER_NAME( 1 ),
+         SPTEST.TIMER_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE" );
+      TEXT_IO.PUT_LINE( "TA1 - timer_create - 1 - SUCCESSFUL" );
+
+      RTEMS.TIMER_CREATE(
+         SPTEST.TIMER_NAME( 1 ),
+         SPTEST.JUNK_ID,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.TOO_MANY,
+         "TIMER_CREATE FOR TOO MANY"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - timer_create - 2 - TOO_MANY" );
+
+      RTEMS.TIMER_DELETE( 100, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TIMER_DELETE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - timer_delete - local INVALID_ID" );
+
+      RTEMS.TIMER_DELETE( 16#10100#, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TIMER_DELETE WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - timer_delete - global INVALID_ID" );
+
+      RTEMS.TIMER_IDENT( 0, SPTEST.JUNK_ID, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NAME,
+         "TIMER_IDENT WITH ILLEGAL NAME"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - timer_ident - INVALID_NAME" );
+
+      RTEMS.TIMER_CANCEL( 16#10100#, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TIMER_CANCEL WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - timer_cancel - INVALID_ID" );
+
+      RTEMS.TIMER_RESET( 16#10100#, STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TIMER_RESET WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - timer_reset - INVALID_ID" );
+
+      RTEMS.TIMER_RESET( SPTEST.TIMER_ID( 1 ), STATUS );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.NOT_DEFINED,
+         "TIMER_RESET BEFORE INITIATED"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - timer_reset - NOT_DEFINED" );
+
+      RTEMS.TIMER_FIRE_AFTER(
+         16#10100#,
+         5 * TEST_SUPPORT.TICKS_PER_SECOND,
+         SPTEST.DELAYED_SUBPROGRAM'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TIMER_FIRE_AFTER WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - timer_fire_after - INVALID_ID" );
+
+      TIME := ( 1994, 12, 31, 1, 0, 0, 0 );
+      RTEMS.TIMER_FIRE_WHEN(
+         16#10100#,
+         TIME,
+         SPTEST.DELAYED_SUBPROGRAM'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_ID,
+         "TIMER_FIRE_WHEN WITH ILLEGAL ID"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - timer_fire_when - INVALID_ID" );
+
+      RTEMS.TIMER_FIRE_AFTER(
+         SPTEST.TIMER_ID( 1 ),
+         0,
+         SPTEST.DELAYED_SUBPROGRAM'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_NUMBER,
+         "TIMER_FIRE_AFTER WITH 0 TICKS"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - timer_fire_after - INVALID_NUMBER" );
+
+      TIME := ( 1987, 2, 5, 8, 30, 45, 0 );
+      RTEMS.TIMER_FIRE_WHEN(
+         SPTEST.TIMER_ID( 1 ),
+         TIME,
+         SPTEST.DELAYED_SUBPROGRAM'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_CLOCK,
+         "TIMER_FIRE_WHEN WITH ILLEGAL TIME"
+      );
+      TEST_SUPPORT.PRINT_TIME(
+         "TA1 - timer_fire_when - ",
+         TIME,
+         " - INVALID_CLOCK"
+      );
+      TEXT_IO.NEW_LINE;
+
+      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET SUCCESSFUL" );
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get       - ", TIME, "" );
+      TEXT_IO.NEW_LINE;
+
+      TIME := ( 1990, 2, 5, 8, 30, 45, 0 );
+      RTEMS.TIMER_FIRE_WHEN(
+         SPTEST.TIMER_ID( 1 ),
+         TIME,
+         SPTEST.DELAYED_SUBPROGRAM'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.INVALID_CLOCK,
+         "TIMER_FIRE_WHEN BEFORE CURRENT TIME"
+      );
+      TEST_SUPPORT.PRINT_TIME(
+         "TA1 - timer_fire_when - ",
+         TIME,
+         " - before INVALID_CLOCK"
+      );
+      TEXT_IO.NEW_LINE;
+
+   end SCREEN_14;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      SPTEST.SCREEN_1;
+      TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 2 );
+
+      SPTEST.SCREEN_2;
+      TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 3 );
+
+      SPTEST.SCREEN_3;
+      TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 4 );
+
+      SPTEST.SCREEN_4;
+      TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 5 );
+
+      SPTEST.SCREEN_5;
+      TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 6 );
+
+      SPTEST.SCREEN_6;
+      TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 7 );
+
+      SPTEST.SCREEN_7;
+      TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 8 );
+
+      SPTEST.SCREEN_8;
+      TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 9 );
+
+      SPTEST.SCREEN_9;
+      TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 10 );
+
+      SPTEST.SCREEN_10;
+      TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 11 );
+
+      SPTEST.SCREEN_11;
+      TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 12 );
+
+      SPTEST.SCREEN_12;
+      TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 13 );
+
+      SPTEST.SCREEN_13;
+      TEST_SUPPORT.PAUSE_AND_SCREEN_NUMBER( 14 );
+
+      SPTEST.SCREEN_14;
+
+      TEXT_IO.PUT_LINE( "*** END OF TEST 9 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+   end TASK_1;
+
+--PAGE
+-- 
+--  TASK_2
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT_LINE( "TA2 - semaphore_obtain - sem 1 - WAIT FOREVER" );
+      RTEMS.SEMAPHORE_OBTAIN(
+         SPTEST.SEMAPHORE_ID( 1 ),
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.OBJECT_WAS_DELETED,
+         "SEMAPHORE_OBTAIN WAITING TO BE DELETED"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA2 - semaphore_obtain - woke up with OBJECT_WAS_DELETED"
+      );
+
+      TEXT_IO.PUT_LINE( 
+         "TA2 - task_delete - delete self - SUCCESSFUL" 
+      );
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
+
+   end TASK_2;
+
+--PAGE
+-- 
+--  TASK_3
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      BUFFER         : RTEMS.BUFFER;
+      BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+      STATUS         : RTEMS.STATUS_CODES;
+   begin
+
+      BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+      TEXT_IO.PUT_LINE(
+         "TA3 - message_queue_receive - Q 1 - WAIT FOREVER"
+      );
+      RTEMS.MESSAGE_QUEUE_RECEIVE(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.OBJECT_WAS_DELETED,
+         "MESSAGE_QUEUE_RECEIVE WAITING TO BE DELETED"
+      );
+      TEXT_IO.PUT( "TA3 - message_queue_receive - woke up " );
+      TEXT_IO.PUT_LINE( "with OBJECT_WAS_DELETED" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA3 - task_delete - delete self - SUCCESSFUL" 
+      );
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
+
+   end TASK_3;
+
+--PAGE
+-- 
+--  TASK_4
+--
+
+   procedure TASK_4 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.RATE_MONOTONIC_CANCEL(
+         SPTEST.PERIOD_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.NOT_OWNER_OF_RESOURCE,
+         "RATE_MONOTONIC_CANCEL NOT THE OWNER"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA4 - rate_monotonic_cancel - NOT_OWNER_OF_RESOURCE"
+       );
+
+      RTEMS.RATE_MONOTONIC_PERIOD(
+         SPTEST.PERIOD_ID( 1 ),
+         5,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS(
+         STATUS,
+         RTEMS.NOT_OWNER_OF_RESOURCE,
+         "RATE_MONOTONIC_PERIOD NOT THE OWNER"
+      );
+      TEXT_IO.PUT_LINE(
+         "TA4 - rate_monotonic_period - NOT_OWNER_OF_RESOURCE"
+      );
+
+      TEXT_IO.PUT_LINE(
+         "TA4 - task_delete - delete self - SUCCESSFUL" 
+      );
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA4" );
+
+
+   end TASK_4;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp09/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp09/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp09/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,444 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 9 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:41:42 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+with SYSTEM;
+with System.Storage_Elements;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 11 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 11 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS timers created
+--  by this test.
+--
+
+   TIMER_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+   TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS semaphores created
+--  by this test.
+--
+
+   SEMAPHORE_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS message queues 
+--  created by this test.
+--
+
+   QUEUE_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+   QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS partitions created
+--  by this test.
+--
+
+   PARTITION_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+   PARTITION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS regions created
+--  by this test.
+--
+
+   REGION_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+   REGION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS ports created
+--  by this test.
+--
+
+   PORT_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+   PORT_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS periods created
+--  by this test.
+--
+
+   PERIOD_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+   PERIOD_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+--  This variable is used as the output ID on directives which return
+--  an ID but are invoked in a manner which returns a non-SUCCESSFUL
+--  status code.
+--
+
+   JUNK_ID : RTEMS.ID;
+
+--
+--  The following area defines a memory area to be used as the
+--  internal address space of the port.
+-- 
+
+   INTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
+       System.Storage_Elements.To_Address(16#00001000#);
+
+   INTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+      of RTEMS.UNSIGNED8;
+   for INTERNAL_PORT_AREA use at INTERNAL_PORT_AREA_ADDRESS;
+
+--
+--  The following area defines a memory area to be used as the
+--  external address space of the port.
+-- 
+
+   EXTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
+       System.Storage_Elements.To_Address(16#00002000#);
+
+   EXTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+      of RTEMS.UNSIGNED8;
+   for EXTERNAL_PORT_AREA use at EXTERNAL_PORT_AREA_ADDRESS;
+
+--
+--  The following area defines a memory area to be used as the
+--  memory space for a partition.
+-- 
+
+   PARTITION_GOOD_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+      of RTEMS.UNSIGNED8;
+   for PARTITION_GOOD_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+--
+--  The following area defines a memory area to be used as the
+--  memory space for a partition which starts at an invalid address.
+-- 
+
+   PARTITION_BAD_AREA_ADDRESS : constant System.Address :=
+       System.Storage_Elements.To_Address(16#00000006#);
+
+   PARTITION_BAD_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+      of RTEMS.UNSIGNED8;
+   for PARTITION_BAD_AREA use at PARTITION_BAD_AREA_ADDRESS;
+
+--
+--  The following area defines a memory area to be used as the
+--  memory space for a region and constants used to define the regions
+--  starting area and length.
+-- 
+
+   REGION_GOOD_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 4095 )
+      of RTEMS.UNSIGNED32;
+   for REGION_GOOD_AREA'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+   REGION_START_OFFSET : constant RTEMS.UNSIGNED32 := 1024;
+   REGION_LENGTH       : constant RTEMS.UNSIGNED32 := 512;
+
+--
+--  The following area defines a memory area to be used as the
+--  memory space for a region which starts at an invalid address.
+-- 
+
+   REGION_BAD_AREA_ADDRESS : constant System.Address :=
+       System.Storage_Elements.To_Address(16#00000006#);
+
+   REGION_BAD_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+      of RTEMS.UNSIGNED8;
+   for REGION_BAD_AREA use at REGION_BAD_AREA_ADDRESS;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  DELAYED_SUBPROGRAM
+--
+--  DESCRIPTION:
+--
+--  This subprogram is scheduled as a timer service routine.
+--  It performs no actions if it fires.
+--
+
+   procedure DELAYED_SUBPROGRAM (
+      IGNORED_ID      : in     RTEMS.ID;  
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS 
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests numerous error conditions.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_2
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests numerous error conditions.
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_3
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests numerous error conditions.
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_4
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests numerous error conditions.
+--
+
+   procedure TASK_4 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  SERVICE_ROUTINE
+--
+--  DESCRIPTION:
+--
+--  This subprogram serves as a dummy ISR which is installed at an
+--  illegal vector number.
+--
+
+   procedure SERVICE_ROUTINE (
+      IGNORED : in     RTEMS.VECTOR_NUMBER
+   );
+
+--
+--  SCREEN_1
+--
+--  DESCRIPTION:
+--
+--  This subprogram processes the a single output screen of this test.
+--
+
+   procedure SCREEN_1;
+
+--
+--  SCREEN_2
+--
+--  DESCRIPTION:
+--
+--  This subprogram processes the a single output screen of this test.
+--
+
+   procedure SCREEN_2;
+
+--
+--  SCREEN_3
+--
+--  DESCRIPTION:
+--
+--  This subprogram processes the a single output screen of this test.
+--
+
+   procedure SCREEN_3;
+
+--
+--  SCREEN_4
+--
+--  DESCRIPTION:
+--
+--  This subprogram processes the a single output screen of this test.
+--
+
+   procedure SCREEN_4;
+
+--
+--  SCREEN_5
+--
+--  DESCRIPTION:
+--
+--  This subprogram processes the a single output screen of this test.
+--
+
+   procedure SCREEN_5;
+
+--
+--  SCREEN_6
+--
+--  DESCRIPTION:
+--
+--  This subprogram processes the a single output screen of this test.
+--
+
+   procedure SCREEN_6;
+
+--
+--  SCREEN_7
+--
+--  DESCRIPTION:
+--
+--  This subprogram processes the a single output screen of this test.
+--
+
+   procedure SCREEN_7;
+
+--
+--  SCREEN_8
+--
+--  DESCRIPTION:
+--
+--  This subprogram processes the a single output screen of this test.
+--
+
+   procedure SCREEN_8;
+
+--
+--  SCREEN_9
+--
+--  DESCRIPTION:
+--
+--  This subprogram processes the a single output screen of this test.
+--
+
+   procedure SCREEN_9;
+
+--
+--  SCREEN_10
+--
+--  DESCRIPTION:
+--
+--  This subprogram processes the a single output screen of this test.
+--
+
+   procedure SCREEN_10;
+
+--
+--  SCREEN_11
+--
+--  DESCRIPTION:
+--
+--  This subprogram processes the a single output screen of this test.
+--
+
+   procedure SCREEN_11;
+
+--
+--  SCREEN_12
+--
+--  DESCRIPTION:
+--
+--  This subprogram processes the a single output screen of this test.
+--
+
+   procedure SCREEN_12;
+
+--
+--  SCREEN_13
+--
+--  DESCRIPTION:
+--
+--  This subprogram processes the a single output screen of this test.
+--
+
+   procedure SCREEN_13;
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      1,                         -- maximum # timers
+      2,                         -- maximum # semaphores
+      1,                         -- maximum # message queues
+      2,                         -- maximum # messages
+      1,                         -- maximum # partitions
+      1,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      1,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      100                        -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp11/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp11/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp11/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,900 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 11 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:41:45 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 11 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         4, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         4, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_2'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
+      SPTEST.TIMER_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'M', '2', ' ' );
+      SPTEST.TIMER_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'M', '3', ' ' );
+      SPTEST.TIMER_NAME( 4 ) := RTEMS.BUILD_NAME(  'T', 'M', '4', ' ' );
+      SPTEST.TIMER_NAME( 5 ) := RTEMS.BUILD_NAME(  'T', 'M', '5', ' ' );
+      SPTEST.TIMER_NAME( 6 ) := RTEMS.BUILD_NAME(  'T', 'M', '6', ' ' );
+
+      RTEMS.TIMER_CREATE( 
+         SPTEST.TIMER_NAME( 1 ),
+         SPTEST.TIMER_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM1" );
+
+      RTEMS.TIMER_CREATE( 
+         SPTEST.TIMER_NAME( 2 ),
+         SPTEST.TIMER_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM2" );
+
+      RTEMS.TIMER_CREATE( 
+         SPTEST.TIMER_NAME( 3 ),
+         SPTEST.TIMER_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM3" );
+
+      RTEMS.TIMER_CREATE( 
+         SPTEST.TIMER_NAME( 4 ),
+         SPTEST.TIMER_ID( 4 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM4" );
+
+      RTEMS.TIMER_CREATE( 
+         SPTEST.TIMER_NAME( 5 ),
+         SPTEST.TIMER_ID( 5 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM5" );
+
+      RTEMS.TIMER_CREATE( 
+         SPTEST.TIMER_NAME( 6 ),
+         SPTEST.TIMER_ID( 6 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM6" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      EVENTOUT : RTEMS.EVENT_SET;
+      TIME     : RTEMS.TIME_OF_DAY;
+      STATUS   : RTEMS.STATUS_CODES;
+      INDEX    : RTEMS.UNSIGNED32;
+   begin
+
+      TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_16 to TA2" );
+      RTEMS.EVENT_SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_16, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 16" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_receive - waiting forever on EVENT_14 and EVENT_15"
+      );
+      RTEMS.EVENT_RECEIVE( 
+         RTEMS.EVENT_14 + RTEMS.EVENT_15,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         EVENTOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 14 and 15" );
+      TEXT_IO.PUT( "TA1 - EVENT_14 and EVENT_15 received - eventout => ");
+      UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_18 to TA2" );
+      RTEMS.EVENT_SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_18, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 18" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_receive - waiting with 10 second timeout on EVENT_14"
+      );
+      RTEMS.EVENT_RECEIVE( 
+         RTEMS.EVENT_14,
+         RTEMS.DEFAULT_OPTIONS,
+         10 * TEST_SUPPORT.TICKS_PER_SECOND,
+         EVENTOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 14" );
+      TEXT_IO.PUT( "TA1 - EVENT_14 received - eventout => ");
+      UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_19 to TA2" );
+      RTEMS.EVENT_SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_19, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 19" );
+
+      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_GET" );
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" );
+      TEXT_IO.NEW_LINE;
+
+      TEST_SUPPORT.PAUSE;
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_send - send EVENT_18 to self after 5 seconds"
+      );
+      RTEMS.TIMER_FIRE_AFTER( 
+         SPTEST.TIMER_ID( 1 ),
+         5 * TEST_SUPPORT.TICKS_PER_SECOND,
+         SPTEST.TA1_SEND_18_TO_SELF_5_SECONDS'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 5 seconds" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_receive - waiting forever on EVENT_18"
+      );
+      RTEMS.EVENT_RECEIVE( 
+         RTEMS.EVENT_18,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         EVENTOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 18" );
+
+      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_GET" );
+
+      TEXT_IO.PUT( "TA1 - EVENT_18 received - eventout => ");
+      UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+      TEXT_IO.NEW_LINE;
+
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_3 to self" );
+      RTEMS.EVENT_SEND( RTEMS.SELF, RTEMS.EVENT_3, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 3" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_receive - EVENT_3 or EVENT_22 - NO_WAIT and EVENT_ANY"
+      );
+      RTEMS.EVENT_RECEIVE( 
+         RTEMS.EVENT_3 + RTEMS.EVENT_22,
+         RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
+         RTEMS.NO_TIMEOUT,
+         EVENTOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 3 and 22" );
+      TEXT_IO.PUT( "TA1 - EVENT_3 received - eventout => ");
+      UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA1 - event_send - send EVENT_4 to self" );
+      RTEMS.EVENT_SEND( RTEMS.SELF, RTEMS.EVENT_4, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 4" );
+
+      TEXT_IO.PUT_LINE( 
+"TA1 - event_receive - waiting forever on EVENT_4 or EVENT_5 - EVENT_ANY"
+      );
+      RTEMS.EVENT_RECEIVE( 
+         RTEMS.EVENT_4 + RTEMS.EVENT_5,
+         RTEMS.EVENT_ANY,
+         RTEMS.NO_TIMEOUT,
+         EVENTOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 4 and 5" );
+      TEXT_IO.PUT( "TA1 - EVENT_4 received - eventout => ");
+      UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+      TEXT_IO.NEW_LINE;
+
+      TEST_SUPPORT.PAUSE;
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_send - send EVENT_18 to self after 5 seconds"
+      );
+      RTEMS.TIMER_FIRE_AFTER( 
+         SPTEST.TIMER_ID( 1 ),
+         5 * TEST_SUPPORT.TICKS_PER_SECOND,
+         SPTEST.TA1_SEND_18_TO_SELF_5_SECONDS'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 5 seconds" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - timer_cancel - cancelling timer for event EVENT_18"
+      );
+      RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_send - send EVENT_8 to self after 60 seconds"
+      );
+      RTEMS.TIMER_FIRE_AFTER( 
+         SPTEST.TIMER_ID( 1 ),
+         60 * TEST_SUPPORT.TICKS_PER_SECOND,
+         SPTEST.TA1_SEND_8_TO_SELF_60_SECONDS'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 60 secs" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_send - send EVENT_9 to self after 60 seconds"
+      );
+      RTEMS.TIMER_FIRE_AFTER( 
+         SPTEST.TIMER_ID( 2 ),
+         60 * TEST_SUPPORT.TICKS_PER_SECOND,
+         SPTEST.TA1_SEND_9_TO_SELF_60_SECONDS'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 60 secs" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_send - send EVENT_10 to self after 60 seconds"
+      );
+      RTEMS.TIMER_FIRE_AFTER( 
+         SPTEST.TIMER_ID( 3 ),
+         60 * TEST_SUPPORT.TICKS_PER_SECOND,
+         SPTEST.TA1_SEND_10_TO_SELF'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 60 secs" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - timer_cancel - cancelling timer for event EVENT_8"
+      );
+      RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+
+      TIME := ( 1988, 2, 12, 8, 15, 0, 0 );
+
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+      TEXT_IO.NEW_LINE;
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_send - send EVENT_1 every second"
+      );
+      RTEMS.TIMER_FIRE_AFTER( 
+         SPTEST.TIMER_ID( 1 ),
+         TEST_SUPPORT.TICKS_PER_SECOND,
+         SPTEST.TA1_SEND_1_TO_SELF_EVERY_SECOND'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 1 SECOND" );
+
+      INDEX := 0;
+
+      loop
+
+         exit when INDEX = 3;
+
+         RTEMS.EVENT_RECEIVE( 
+            RTEMS.EVENT_1,
+            RTEMS.EVENT_ANY,
+            RTEMS.NO_TIMEOUT,
+            EVENTOUT,
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 1" );
+
+         RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_GET" );
+
+         TEXT_IO.PUT( "TA1 - EVENT_1 received - eventout => ");
+         UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+         TEST_SUPPORT.PRINT_TIME( " - at ", TIME, "" );
+         TEXT_IO.NEW_LINE;
+
+         if INDEX < 2 then
+            RTEMS.TIMER_RESET( SPTEST.TIMER_ID( 1 ), STATUS );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 TIMER RESET" );
+         end if;
+
+         INDEX := INDEX + 1;
+      end loop;
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - timer_cancel - cancelling timer for event EVENT_1"
+      );
+      RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+
+      TEST_SUPPORT.PAUSE;
+
+      TIME.DAY := 13;
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_send - send EVENT_11 to self in 1 day"
+      );
+      RTEMS.TIMER_FIRE_WHEN( 
+         SPTEST.TIMER_ID( 1 ),
+         TIME,
+         SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 1 day" );
+
+      TIME.HOUR := 7;
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_send - send EVENT_11 to self in 1 day"
+      );
+      RTEMS.TIMER_FIRE_WHEN( 
+         SPTEST.TIMER_ID( 2 ),
+         TIME,
+         SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 1 day" );
+      TIME.HOUR := 8;
+
+      TIME.DAY := 14;
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_send - send EVENT_11 to self in 2 days"
+      );
+      RTEMS.TIMER_FIRE_WHEN( 
+         SPTEST.TIMER_ID( 3 ),
+         TIME,
+         SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 2 days" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - timer_cancel - cancelling EVENT_11 to self in 1 day"
+      );
+      RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - timer_cancel - cancelling EVENT_11 to self in 2 days"
+      );
+      RTEMS.TIMER_CANCEL( SPTEST.TIMER_ID( 3 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_send - resending EVENT_11 to self in 2 days"
+      );
+      RTEMS.TIMER_FIRE_WHEN( 
+         SPTEST.TIMER_ID( 3 ),
+         TIME,
+         SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 2 days" );
+
+      TIME.DAY := 15;
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+      TEXT_IO.NEW_LINE;
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_receive - waiting forever on EVENT_11"
+      );
+      RTEMS.EVENT_RECEIVE( 
+         RTEMS.EVENT_11,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         EVENTOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 11" );
+      TEXT_IO.PUT( "TA1 - EVENT_11 received - eventout => ");
+      UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+      TEXT_IO.NEW_LINE;
+
+      TEST_SUPPORT.PAUSE;
+
+-- The following code tests the case of deleting a timer ???
+
+      TEXT_IO.PUT_LINE( "TA1 - event_send/event_receive combination" );
+      RTEMS.TIMER_FIRE_AFTER( 
+         SPTEST.TIMER_ID( 1 ),
+         10,
+         SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 10 ticks" );
+      RTEMS.EVENT_RECEIVE( 
+         RTEMS.EVENT_11,
+         RTEMS.DEFAULT_OPTIONS,
+         11,
+         EVENTOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE" );
+
+      TIME := ( 1988, 2, 12, 8, 15, 0, 0 );
+
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+      TEXT_IO.NEW_LINE;
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
+
+      TIME.DAY := 13;
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_receive all outstanding events"
+      );
+      RTEMS.EVENT_RECEIVE(
+         RTEMS.ALL_EVENTS,
+         RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
+         RTEMS.NO_TIMEOUT,
+         EVENTOUT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
+         STATUS, 
+         RTEMS.UNSATISFIED, 
+         "EVENT_RECEIVE all events" 
+      );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_send - send EVENT_10 to self in 1 day"
+      );
+      RTEMS.TIMER_FIRE_WHEN( 
+         SPTEST.TIMER_ID( 1 ),
+         TIME,
+         SPTEST.TA1_SEND_10_TO_SELF'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 1 day" );
+
+      TIME.DAY := 14;
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_send - send EVENT_11 to self in 2 days"
+      );
+      RTEMS.TIMER_FIRE_WHEN( 
+         SPTEST.TIMER_ID( 2 ),
+         TIME,
+         SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 2 days" );
+
+      TIME := ( 1988, 2, 12, 7, 15, 0, 0 );
+
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+      TEXT_IO.NEW_LINE;
+      TEXT_IO.PUT_LINE( "TA1 - set time backwards" );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
+
+      RTEMS.EVENT_RECEIVE( 
+         RTEMS.ALL_EVENTS,
+         RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
+         RTEMS.NO_TIMEOUT,
+         EVENTOUT,
+         STATUS
+      );
+      if EVENTOUT >= RTEMS.EVENT_0 then 
+         TEXT_IO.PUT( "ERROR - " );
+         UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+         TEXT_IO.PUT_LINE( " events received" );
+      else
+         TEXT_IO.PUT_LINE( "TA1 - no events received" );
+      end if;
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
+         STATUS, 
+         RTEMS.UNSATISFIED, 
+         "EVENT_RECEIVE all events" 
+      );
+
+      TIME := ( 1988, 2, 14, 7, 15, 0, 0 );
+
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_set - ", TIME, "" );
+      TEXT_IO.NEW_LINE;
+      TEXT_IO.PUT_LINE( "TA1 - set time forwards (leave a timer)" );
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_SET" );
+
+      RTEMS.EVENT_RECEIVE( 
+         RTEMS.ALL_EVENTS,
+         RTEMS.NO_WAIT + RTEMS.EVENT_ANY,
+         RTEMS.NO_TIMEOUT,
+         EVENTOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE all events" );
+      if EVENTOUT = RTEMS.EVENT_10 then 
+         TEXT_IO.PUT_LINE( "TA1 - EVENT_10 received" );
+      else
+         TEXT_IO.PUT( "ERROR - " );
+         UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+         TEXT_IO.PUT_LINE( " events received" );
+      end if;
+         
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_send - send EVENT_11 to self in 100 ticks"
+      );
+      RTEMS.TIMER_FIRE_AFTER( 
+         SPTEST.TIMER_ID( 1 ),
+         100,
+         SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 100 ticks" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA1 - event_send - send EVENT_11 to self in 200 ticks"
+      );
+      RTEMS.TIMER_FIRE_AFTER( 
+         SPTEST.TIMER_ID( 2 ),
+         100,
+         SPTEST.TA1_SEND_11_TO_SELF'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER 200 ticks" );
+
+      TEXT_IO.PUT_LINE( "*** END OF TEST 11 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+   end TASK_1;
+
+--PAGE
+-- 
+--  TASK_2
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      EVENTOUT : RTEMS.EVENT_SET;
+      TIME     : RTEMS.TIME_OF_DAY;
+      STATUS   : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.TASK_WAKE_AFTER( 1 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA2 - event_receive - waiting forever on EVENT_16"
+      );
+      RTEMS.EVENT_RECEIVE( 
+         RTEMS.EVENT_16,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         EVENTOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 16" );
+      TEXT_IO.PUT( "TA2 - EVENT_16 received - eventout => ");
+      UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( 
+         "TA2 - event_send - send EVENT_14 and EVENT_15 to TA1"
+      );
+      RTEMS.EVENT_SEND( 
+         SPTEST.TASK_ID( 1 ), 
+         RTEMS.EVENT_14 + RTEMS.EVENT_15,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 14 and 15" );
+
+      TEXT_IO.PUT_LINE( 
+     "TA2 - event_receive - waiting forever on EVENT_17 or EVENT_18 - EVENT_ANY"
+      );
+      RTEMS.EVENT_RECEIVE( 
+         RTEMS.EVENT_17 + RTEMS.EVENT_18,
+         RTEMS.EVENT_ANY,
+         RTEMS.NO_TIMEOUT,
+         EVENTOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 17 and 18" );
+      TEXT_IO.PUT( "TA2 - EVENT_17 or EVENT_18 received - eventout => ");
+      UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( 
+         "TA2 - event_send - send EVENT_14 to TA1"
+      );
+      RTEMS.EVENT_SEND( 
+         SPTEST.TASK_ID( 1 ), 
+         RTEMS.EVENT_14,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 14" );
+
+      TIME := ( 1988,  2, 12, 8, 15, 0, 0 );
+
+      TEST_SUPPORT.PRINT_TIME( "TA2 - clock_set - ", TIME, "" );
+      TEXT_IO.NEW_LINE;
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA2 CLOCK_SET" );
+
+      TIME.SECOND := TIME.SECOND + 5;
+      TEXT_IO.PUT_LINE( 
+         "TA2 - event_send - sending EVENT_10 to self after 5 seconds"
+      );
+      RTEMS.TIMER_FIRE_WHEN( 
+         SPTEST.TIMER_ID( 5 ),
+         TIME,
+         SPTEST.TA2_SEND_10_TO_SELF'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN 5 SECONDS" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA2 - event_receive - waiting forever on EVENT_10"
+      );
+      RTEMS.EVENT_RECEIVE( 
+         RTEMS.EVENT_10,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         EVENTOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 10" );
+
+      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TA1 CLOCK_GET" );
+
+      TEXT_IO.PUT( "TA2 - EVENT_10 received - eventout => ");
+      UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+      TEXT_IO.NEW_LINE;
+
+      TEST_SUPPORT.PRINT_TIME( "TA1 - clock_get - ", TIME, "" );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA2 - event_receive - PENDING_EVENTS" );
+      RTEMS.EVENT_RECEIVE( 
+         RTEMS.PENDING_EVENTS,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         EVENTOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 10" );
+      TEXT_IO.PUT( "TA2 - eventout => ");
+      UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( 
+         "TA2 - event_receive - EVENT_19 - NO_WAIT"
+      );
+      RTEMS.EVENT_RECEIVE( 
+         RTEMS.EVENT_19,
+         RTEMS.NO_WAIT,
+         RTEMS.NO_TIMEOUT,
+         EVENTOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_RECEIVE of 10" );
+      TEXT_IO.PUT( "TA2 - EVENT_19 received - eventout => ");
+      UNSIGNED32_IO.PUT( EVENTOUT, BASE => 16, WIDTH => 8 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA2 - task_delete - deletes self" );
+      RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE of TA2" );
+
+   end TASK_2;
+
+--PAGE
+-- 
+--  TA1_SEND_18_TO_SELF_5_SECONDS
+--
+
+   procedure TA1_SEND_18_TO_SELF_5_SECONDS (
+      IGNORED_ID      : in     RTEMS.ID;
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS
+   )
+   is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_18, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 18" );
+
+   end TA1_SEND_18_TO_SELF_5_SECONDS;
+
+--PAGE
+-- 
+--  TA1_SEND_8_TO_SELF_60_SECONDS
+--
+
+   procedure TA1_SEND_8_TO_SELF_60_SECONDS (
+      IGNORED_ID      : in     RTEMS.ID;
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS
+   )
+   is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_8, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 8" );
+
+   end TA1_SEND_8_TO_SELF_60_SECONDS;
+
+--PAGE
+-- 
+--  TA1_SEND_9_TO_SELF_60_SECONDS
+--
+
+   procedure TA1_SEND_9_TO_SELF_60_SECONDS (
+      IGNORED_ID      : in     RTEMS.ID;
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS
+   )
+   is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_9, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 9" );
+
+   end TA1_SEND_9_TO_SELF_60_SECONDS;
+
+--PAGE
+-- 
+--  TA1_SEND_10_TO_SELF
+--
+
+   procedure TA1_SEND_10_TO_SELF (
+      IGNORED_ID      : in     RTEMS.ID;
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS
+   )
+   is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_10, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 10" );
+
+   end TA1_SEND_10_TO_SELF;
+
+--PAGE
+-- 
+--  TA1_SEND_1_TO_SELF_EVERY_SECOND
+--
+
+   procedure TA1_SEND_1_TO_SELF_EVERY_SECOND (
+      IGNORED_ID      : in     RTEMS.ID;
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS
+   )
+   is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_1, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 1" );
+
+   end TA1_SEND_1_TO_SELF_EVERY_SECOND;
+
+--PAGE
+-- 
+--  TA1_SEND_11_TO_SELF
+--
+
+   procedure TA1_SEND_11_TO_SELF (
+      IGNORED_ID      : in     RTEMS.ID;
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS
+   )
+   is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.EVENT_SEND( SPTEST.TASK_ID( 1 ), RTEMS.EVENT_11, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 11" );
+
+   end TA1_SEND_11_TO_SELF;
+
+--PAGE
+-- 
+--  TA2_SEND_10_TO_SELF
+--
+
+   procedure TA2_SEND_10_TO_SELF (
+      IGNORED_ID      : in     RTEMS.ID;
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS
+   )
+   is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.EVENT_SEND( SPTEST.TASK_ID( 2 ), RTEMS.EVENT_10, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "EVENT_SEND of 10" );
+
+   end TA2_SEND_10_TO_SELF;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp11/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp11/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp11/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,233 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 11 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:41:47 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS timers created
+--  by this test.
+--
+
+   TIMER_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 6 ) of RTEMS.ID;
+   TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 6 ) of RTEMS.NAME;
+
+--
+--  TA1_SEND_18_TO_SELF_5_SECONDS
+--
+--  DESCRIPTION:
+--
+--  This subprogram is scheduled to be fired by a timer after 5 seconds
+--  and to send EVENT_18 to TASK_1.
+--
+
+   procedure TA1_SEND_18_TO_SELF_5_SECONDS (
+      IGNORED_ID      : in     RTEMS.ID;  
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS 
+   ); 
+
+--
+--  TA1_SEND_8_TO_SELF_60_SECONDS
+--
+--  DESCRIPTION:
+--
+--  This subprogram is scheduled to be fired by a timer after 60 seconds
+--  and to send EVENT_8 to TASK_1.
+--
+
+   procedure TA1_SEND_8_TO_SELF_60_SECONDS (
+      IGNORED_ID      : in     RTEMS.ID;  
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS 
+   ); 
+
+--
+--  TA1_SEND_9_TO_SELF_5_SECONDS
+--
+--  DESCRIPTION:
+--
+--  This subprogram is scheduled to be fired by a timer after 60 seconds
+--  and to send EVENT_9 to TASK_1.
+--
+
+   procedure TA1_SEND_9_TO_SELF_60_SECONDS (
+      IGNORED_ID      : in     RTEMS.ID;  
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS 
+   ); 
+
+--
+--  TA1_SEND_10_TO_SELF
+--
+--  DESCRIPTION:
+--
+--  This subprogram is scheduled to be fired by a timer after 60 seconds
+--  and to send EVENT_10 to TASK_1.
+--
+
+   procedure TA1_SEND_10_TO_SELF (
+      IGNORED_ID      : in     RTEMS.ID;  
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS 
+   ); 
+
+--
+--  TA1_SEND_1_TO_SELF_EVERY_SECOND
+--
+--  DESCRIPTION:
+--
+--  This subprogram is scheduled to be fired by a timer every second
+--  and to send EVENT_1 to TASK_1 until the timer is cancelled.
+--
+
+   procedure TA1_SEND_1_TO_SELF_EVERY_SECOND (
+      IGNORED_ID      : in     RTEMS.ID;  
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS 
+   ); 
+
+--
+--  TA1_SEND_11_TO_SELF
+--
+--  DESCRIPTION:
+--
+--  This subprogram is scheduled to be fired by a timer at a
+--  specific time of day and to send EVENT_11 to TASK_1.
+--
+
+   procedure TA1_SEND_11_TO_SELF (
+      IGNORED_ID      : in     RTEMS.ID;  
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS 
+   ); 
+
+--
+--  TA2_SEND_10_TO_SELF
+--
+--  DESCRIPTION:
+--
+--  This subprogram is scheduled to be fired by a timer after 5 seconds
+--  and to send EVENT_10 to TASK_2.
+--
+
+   procedure TA2_SEND_10_TO_SELF (
+      IGNORED_ID      : in     RTEMS.ID;  
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS 
+   ); 
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Event and Timer Managers.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_2
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Event and Timer Managers.
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      6,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      100                        -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp12/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp12/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp12/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,806 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 12 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:41:50 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 12 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
+      SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME(  'T', 'A', '4', ' ' );
+      SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME(  'T', 'A', '5', ' ' );
+
+      SPTEST.PRIORITY_TASK_NAME( 1 ) := 
+         RTEMS.BUILD_NAME(  'P', 'R', 'I', '1' );
+      SPTEST.PRIORITY_TASK_NAME( 2 ) := 
+         RTEMS.BUILD_NAME(  'P', 'R', 'I', '2' );
+      SPTEST.PRIORITY_TASK_NAME( 3 ) := 
+         RTEMS.BUILD_NAME(  'P', 'R', 'I', '3' );
+      SPTEST.PRIORITY_TASK_NAME( 4 ) := 
+         RTEMS.BUILD_NAME(  'P', 'R', 'I', '4' );
+      SPTEST.PRIORITY_TASK_NAME( 5 ) := 
+         RTEMS.BUILD_NAME(  'P', 'R', 'I', '5' );
+
+      SPTEST.SEMAPHORE_NAME( 1 ) := RTEMS.BUILD_NAME(  'S', 'M', '1', ' ' );
+      SPTEST.SEMAPHORE_NAME( 2 ) := RTEMS.BUILD_NAME(  'S', 'M', '2', ' ' );
+      SPTEST.SEMAPHORE_NAME( 3 ) := RTEMS.BUILD_NAME(  'S', 'M', '3', ' ' );
+
+      RTEMS.SEMAPHORE_CREATE( 
+         SPTEST.SEMAPHORE_NAME( 1 ), 
+         1,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.SEMAPHORE_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM1" );
+
+      RTEMS.SEMAPHORE_CREATE( 
+         SPTEST.SEMAPHORE_NAME( 2 ), 
+         0,
+         RTEMS.PRIORITY,
+         SPTEST.SEMAPHORE_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
+
+      RTEMS.SEMAPHORE_CREATE( 
+         SPTEST.SEMAPHORE_NAME( 3 ), 
+         1,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.SEMAPHORE_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM3" );
+
+      TEXT_IO.PUT_LINE( "INIT - Forward priority queue test" );
+      SPTEST.PRIORITY_TEST_DRIVER( 0 );
+
+      TEXT_IO.PUT_LINE( "INIT - Backward priority queue test" );
+      SPTEST.PRIORITY_TEST_DRIVER( 32 );
+
+TEST_SUPPORT.PAUSE;
+
+      TEXT_IO.PUT_LINE( 
+        "INIT - Binary Semaphore and Priority Inheritance Test" 
+      );
+
+      RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM2" );
+
+      TEXT_IO.PUT_LINE( 
+        "INIT - semaphore_create - allocated binary semaphore"
+      );
+      RTEMS.SEMAPHORE_CREATE( 
+         SPTEST.SEMAPHORE_NAME( 2 ), 
+         0,
+         RTEMS.BINARY_SEMAPHORE + RTEMS.PRIORITY + RTEMS.INHERIT_PRIORITY,
+         SPTEST.SEMAPHORE_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
+
+      TEXT_IO.PUT_LINE( 
+        "INIT - semaphore_release - allocated binary semaphore"
+      );
+      RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE OF SM2" );
+
+      TEXT_IO.PUT_LINE( 
+        "INIT - semaphore_delete - allocated binary semaphore"
+      );
+      RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM2" );
+
+      RTEMS.SEMAPHORE_CREATE( 
+         SPTEST.SEMAPHORE_NAME( 2 ), 
+         1,
+         RTEMS.BINARY_SEMAPHORE + RTEMS.PRIORITY + RTEMS.INHERIT_PRIORITY,
+         SPTEST.SEMAPHORE_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
+
+      SPTEST.PRIORITY_TEST_DRIVER( 64 );
+
+TEST_SUPPORT.PAUSE;
+
+      RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM2" );
+
+      RTEMS.SEMAPHORE_CREATE( 
+         SPTEST.SEMAPHORE_NAME( 2 ), 
+         0,
+         RTEMS.PRIORITY,
+         SPTEST.SEMAPHORE_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_CREATE OF SM2" );
+
+      RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE OF SM2" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         4, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         4, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 3 ), 
+         4, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_2'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 3 ),
+         SPTEST.TASK_3'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  PRIORITY_TEST_DRIVER
+--
+
+   procedure PRIORITY_TEST_DRIVER (
+      PRIORITY_BASE : in     RTEMS.UNSIGNED32
+   ) is 
+      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+      STATUS            : RTEMS.STATUS_CODES;
+   begin
+
+      for INDEX in 1 .. 5
+      loop
+
+         case INDEX is
+            when 1 | 2 | 3 => 
+               SPTEST.TASK_PRIORITY( INDEX )  := 
+                  PRIORITY_BASE + RTEMS.TASK_PRIORITY( INDEX );
+            when others    => 
+               SPTEST.TASK_PRIORITY( INDEX )  := PRIORITY_BASE + 3;
+         end case;
+
+         RTEMS.TASK_CREATE( 
+            SPTEST.PRIORITY_TASK_NAME( INDEX ), 
+            SPTEST.TASK_PRIORITY( INDEX ), 
+            2048, 
+            RTEMS.DEFAULT_MODES,
+            RTEMS.DEFAULT_ATTRIBUTES,
+            SPTEST.PRIORITY_TASK_ID( INDEX ),
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+      end loop;
+
+      if PRIORITY_BASE = 0 then
+
+         for INDEX in 1 .. 5
+         loop
+
+            RTEMS.TASK_START( 
+               SPTEST.PRIORITY_TASK_ID( INDEX ),
+               SPTEST.PRIORITY_TASK'ACCESS,
+               RTEMS.TASK_ARGUMENT( INDEX ), 
+               STATUS
+            );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+      
+         end loop;
+
+      else
+
+         for INDEX in reverse 1 .. 5
+         loop
+
+            RTEMS.TASK_START( 
+               SPTEST.PRIORITY_TASK_ID( INDEX ),
+               SPTEST.PRIORITY_TASK'ACCESS,
+               RTEMS.TASK_ARGUMENT( INDEX ), 
+               STATUS
+            );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+      
+            RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER LOOP" );
+
+            if PRIORITY_BASE = 64 then
+               if INDEX = 4 then
+                  RTEMS.TASK_SET_PRIORITY( 
+                     SPTEST.PRIORITY_TASK_ID( 5 ),
+                     PRIORITY_BASE + 4,
+                     PREVIOUS_PRIORITY,
+                     STATUS
+                  );
+                  TEXT_IO.PUT( "PDRV - change priority of PRI5 from " );
+                  UNSIGNED32_IO.PUT( PREVIOUS_PRIORITY );
+                  TEXT_IO.PUT( " to " );
+                  UNSIGNED32_IO.PUT( PRIORITY_BASE + 4 );
+                  TEXT_IO.NEW_LINE;
+                  TEST_SUPPORT.DIRECTIVE_FAILED( 
+                     STATUS, 
+                     "PDRV TASK_SET_PRIORITY" 
+                  );
+               end if;
+
+               RTEMS.TASK_SET_PRIORITY( 
+                  SPTEST.PRIORITY_TASK_ID( 5 ),
+                  RTEMS.CURRENT_PRIORITY,
+                  PREVIOUS_PRIORITY,
+                  STATUS
+               );
+               TEXT_IO.PUT( "PDRV - priority of PRI5 is " );
+               UNSIGNED32_IO.PUT( PREVIOUS_PRIORITY );
+               TEXT_IO.NEW_LINE;
+               TEST_SUPPORT.DIRECTIVE_FAILED( 
+                  STATUS, 
+                  "PDRV TASK_SET_PRIORITY" 
+               );
+            end if;
+
+         end loop;
+
+      end if;
+
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER AFTER LOOP" );
+
+      if PRIORITY_BASE = 0 then
+         for INDEX in 1 .. 5
+         loop
+
+            RTEMS.SEMAPHORE_RELEASE( 
+               SPTEST.SEMAPHORE_ID( 2 ),
+               STATUS
+            );
+            TEST_SUPPORT.DIRECTIVE_FAILED( 
+               STATUS,
+               "SEMAPHORE_RELEASE LOOP"
+            );
+
+         end loop;
+      end if;
+
+      if PRIORITY_BASE = 64 then
+
+         TEXT_IO.PUT_LINE( "PDRV - task_resume - PRI5" );
+         RTEMS.TASK_RESUME( SPTEST.PRIORITY_TASK_ID( 5 ), STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" );
+
+         RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( 
+           STATUS, 
+           "TASK_WAKE_AFTER SO PRI5 can run" 
+         );
+
+         RTEMS.TASK_DELETE( SPTEST.PRIORITY_TASK_ID( 5 ), STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF PRI5" );
+      else
+
+         for INDEX in 1 .. 5
+         loop
+
+            RTEMS.TASK_DELETE( 
+               SPTEST.PRIORITY_TASK_ID( INDEX ),
+               STATUS
+            );
+            TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE LOOP" );
+
+         end loop;
+      end if;
+
+
+   end PRIORITY_TEST_DRIVER;
+
+--PAGE
+-- 
+--  PRIORITY_TASK
+--
+
+   procedure PRIORITY_TASK (
+      ITS_INDEX : in     RTEMS.TASK_ARGUMENT
+   ) is 
+      TIMEOUT          : RTEMS.INTERVAL;
+      ITS_PRIORITY     : RTEMS.TASK_PRIORITY;
+      CURRENT_PRIORITY : RTEMS.TASK_PRIORITY;
+      STATUS           : RTEMS.STATUS_CODES;
+   begin
+
+      ITS_PRIORITY := SPTEST.TASK_PRIORITY( INTEGER( ITS_INDEX ) );
+
+      if ITS_PRIORITY < 3 then
+         TIMEOUT := 5 * TEST_SUPPORT.TICKS_PER_SECOND;
+      else
+         TIMEOUT := RTEMS.NO_TIMEOUT;
+      end if;
+
+      TEST_SUPPORT.PUT_NAME( PRIORITY_TASK_NAME( INTEGER(ITS_INDEX) ), FALSE );
+      TEXT_IO.PUT_LINE( " - semaphore_obtain - wait forever on SM2" );
+   
+      RTEMS.SEMAPHORE_OBTAIN( 
+         SPTEST.SEMAPHORE_ID( 2 ), 
+         RTEMS.DEFAULT_OPTIONS, 
+         TIMEOUT, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN OF SM2" );
+
+      if ITS_PRIORITY < 64 then
+         TEXT_IO.PUT( "PRI" );
+         UNSIGNED32_IO.PUT( ITS_INDEX );
+         TEXT_IO.PUT( " - WHY AM I HERE? (priority = " );
+         UNSIGNED32_IO.PUT( ITS_PRIORITY );
+         TEXT_IO.PUT_LINE( " )" );
+         RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+      end if;
+
+      if ITS_INDEX = 5 then
+         TEXT_IO.PUT_LINE(
+            "PRI5 - task_suspend - until all priority tasks blocked" 
+         );
+      end if;
+
+      RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+
+      TEXT_IO.PUT_LINE( "PRI5 - task_delete - all tasks waiting on SM2" );
+      for INDEX in 1 .. 4 
+      loop
+
+         RTEMS.TASK_DELETE(  SPTEST.PRIORITY_TASK_ID( INDEX ), STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE LOOP" );
+
+      end loop;
+
+      TEXT_IO.PUT_LINE( "PRI5 - semaphore_obtain - nested" );
+      RTEMS.SEMAPHORE_OBTAIN( 
+         SPTEST.SEMAPHORE_ID( 2 ), 
+         RTEMS.DEFAULT_OPTIONS, 
+         TIMEOUT, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN NESTED" );
+
+      TEXT_IO.PUT_LINE( "PRI5 - semaphore_release - nested" );
+      RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE NESTED" );
+
+      TEXT_IO.PUT_LINE( "PRI5 - semaphore_release - restore priority" );
+      RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE" );
+
+      RTEMS.TASK_SET_PRIORITY( 
+         SPTEST.PRIORITY_TASK_ID( 5 ),
+         RTEMS.CURRENT_PRIORITY,
+         CURRENT_PRIORITY,
+         STATUS
+      );
+      TEXT_IO.PUT( "PRI5 - priority of PRI5 is " );
+      UNSIGNED32_IO.PUT( CURRENT_PRIORITY );
+      TEXT_IO.NEW_LINE;
+      TEST_SUPPORT.DIRECTIVE_FAILED( 
+         STATUS, 
+         "PRI5 TASK_SET_PRIORITY CURRENT" 
+      );
+      RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+
+   end PRIORITY_TASK;
+   
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      SMID   : RTEMS.ID;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.SEMAPHORE_IDENT( 
+         SPTEST.SEMAPHORE_NAME( 1 ), 
+         RTEMS.SEARCH_ALL_NODES, 
+         SMID, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_IDENT OF SM1" );
+      TEXT_IO.PUT( "TA1 - semaphore_ident - smid => " );
+      UNSIGNED32_IO.PUT( SMID, WIDTH => 8, BASE => 16 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - wait forever on SM2" );
+      RTEMS.SEMAPHORE_OBTAIN( 
+         SPTEST.SEMAPHORE_ID( 2 ),
+         RTEMS.DEFAULT_MODES, 
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM2" );
+     
+      TEXT_IO.PUT_LINE( "TA1 - got SM2" );
+
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - wait forever on SM3" );
+      RTEMS.SEMAPHORE_OBTAIN( 
+         SPTEST.SEMAPHORE_ID( 3 ),
+         RTEMS.DEFAULT_MODES, 
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM3" );
+     
+      TEXT_IO.PUT_LINE( "TA1 - got SM3" );
+   
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_obtain - get SM1 - NO_WAIT" );
+      RTEMS.SEMAPHORE_OBTAIN( 
+         SPTEST.SEMAPHORE_ID( 1 ),
+         RTEMS.NO_WAIT, 
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
+     
+      TEXT_IO.PUT_LINE( "TA1 - got SM1" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+TEST_SUPPORT.PAUSE;
+
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_release - release SM1" );
+      RTEMS.SEMAPHORE_RELEASE( SPTEST.SEMAPHORE_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM1" );
+     
+      TEXT_IO.PUT_LINE( 
+         "TA1 - semaphore_obtain - waiting for SM1 with 10 second timeout"
+      );
+      RTEMS.SEMAPHORE_OBTAIN( 
+         SPTEST.SEMAPHORE_ID( 1 ),
+         RTEMS.DEFAULT_MODES, 
+         10 * TEST_SUPPORT.TICKS_PER_SECOND,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM3" );
+     
+      TEXT_IO.PUT_LINE( "TA1 - got SM1" );
+   
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_release - release SM2" );
+      RTEMS.SEMAPHORE_RELEASE( 
+         SPTEST.SEMAPHORE_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM2" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+TEST_SUPPORT.PAUSE;
+
+      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA3" );
+      RTEMS.TASK_DELETE( SPTEST.TASK_ID( 3 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 4 ), 
+         4, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 4 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 5 ), 
+         4, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 5 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA5" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 4 ),
+         SPTEST.TASK_4'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 5 ),
+         SPTEST.TASK_5'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA5" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA4" );
+      RTEMS.TASK_DELETE( SPTEST.TASK_ID( 4 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA4" );
+
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_release - release SM1" );
+      RTEMS.SEMAPHORE_RELEASE( 
+         SPTEST.SEMAPHORE_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM1" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_delete - delete SM1" );
+      RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM1" );
+
+      TEXT_IO.PUT_LINE( "TA1 - semaphore_delete - delete SM3" );
+      RTEMS.SEMAPHORE_DELETE( SPTEST.SEMAPHORE_ID( 3 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_DELETE OF SM3" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete self" );
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA1" );
+
+   end TASK_1;
+
+--PAGE
+-- 
+--  TASK_2
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in    RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS            : RTEMS.STATUS_CODES;
+      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+   begin
+ 
+      TEXT_IO.PUT_LINE( "TA2 - semaphore_obtain - wait forever on SM1" );
+      RTEMS.SEMAPHORE_OBTAIN( 
+         SPTEST.SEMAPHORE_ID( 1 ),
+         RTEMS.DEFAULT_MODES, 
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
+     
+      TEXT_IO.PUT_LINE( "TA2 - got SM1" );
+   
+      TEXT_IO.PUT_LINE( "TA2 - semaphore_release - release SM1" );
+      RTEMS.SEMAPHORE_RELEASE( 
+         SPTEST.SEMAPHORE_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM1" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA2 - task_set_priority - make self highest priority task" 
+      );
+      RTEMS.TASK_SET_PRIORITY(
+         RTEMS.SELF,
+         3,
+         PREVIOUS_PRIORITY,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY ON TA2" );
+     
+      TEXT_IO.PUT_LINE( "TA2 - semaphore_obtain - wait forever on SM2" );
+      RTEMS.SEMAPHORE_OBTAIN( 
+         SPTEST.SEMAPHORE_ID( 2 ),
+         RTEMS.DEFAULT_MODES, 
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM2" );
+     
+      TEXT_IO.PUT_LINE( "TA2 - got SM2" );
+   
+      TEXT_IO.PUT_LINE( "TA2 - semaphore_release - release SM2" );
+      RTEMS.SEMAPHORE_RELEASE( 
+         SPTEST.SEMAPHORE_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM2" );
+   
+      TEXT_IO.PUT_LINE( "TA2 - task_delete - delete self" );
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
+
+   end TASK_2;
+
+--PAGE
+-- 
+--  TASK_3
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in    RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+ 
+      TEXT_IO.PUT_LINE( "TA3 - semaphore_obtain - wait forever on SM2" );
+      RTEMS.SEMAPHORE_OBTAIN( 
+         SPTEST.SEMAPHORE_ID( 2 ),
+         RTEMS.DEFAULT_MODES, 
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM2" );
+      TEXT_IO.PUT_LINE( "TA3 - got SM2" );
+   
+      TEXT_IO.PUT_LINE( "TA3 - semaphore_release - release SM2" );
+      RTEMS.SEMAPHORE_RELEASE( 
+         SPTEST.SEMAPHORE_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_RELEASE ON SM2" );
+   
+      TEXT_IO.PUT_LINE( "TA3 - semaphore_obtain - wait forever on SM3" );
+      RTEMS.SEMAPHORE_OBTAIN( 
+         SPTEST.SEMAPHORE_ID( 3 ),
+         RTEMS.DEFAULT_MODES, 
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM3" );
+     
+   end TASK_3;
+
+--PAGE
+-- 
+--  TASK_4
+--
+
+   procedure TASK_4 (
+      ARGUMENT : in    RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+ 
+      TEXT_IO.PUT_LINE( "TA4 - semaphore_obtain - wait forever on SM1" );
+      RTEMS.SEMAPHORE_OBTAIN( 
+         SPTEST.SEMAPHORE_ID( 1 ),
+         RTEMS.DEFAULT_MODES, 
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
+     
+   end TASK_4;
+
+--PAGE
+-- 
+--  TASK_5
+--
+
+   procedure TASK_5 (
+      ARGUMENT : in    RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+ 
+      TEXT_IO.PUT_LINE( "TA5 - semaphore_obtain - wait forever on SM1" );
+      RTEMS.SEMAPHORE_OBTAIN( 
+         SPTEST.SEMAPHORE_ID( 1 ),
+         RTEMS.DEFAULT_MODES, 
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SEMAPHORE_OBTAIN ON SM1" );
+     
+      TEXT_IO.PUT_LINE( "TA5 - got SM1" );
+   
+      TEXT_IO.PUT_LINE( "TA5 - semaphore_obtain - wait forever on SM1" );
+      RTEMS.SEMAPHORE_OBTAIN( 
+         SPTEST.SEMAPHORE_ID( 1 ),
+         RTEMS.DEFAULT_MODES, 
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
+         STATUS, 
+         RTEMS.OBJECT_WAS_DELETED, 
+         "SEMAPHORE_OBTAIN ON SM1" 
+      );
+      TEXT_IO.PUT_LINE( "TA5 - SM1 deleted by TA1" );
+    
+      TEXT_IO.PUT_LINE( "*** END OF TEST 12 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+   
+   end TASK_5;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp12/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp12/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp12/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,197 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 12 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:41:51 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 5 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 5 ) of RTEMS.NAME;
+
+   PRIORITY_TASK_ID   : array ( 1 .. 5 ) of RTEMS.ID;
+   PRIORITY_TASK_NAME : array ( 1 .. 5 ) of RTEMS.NAME;
+   TASK_PRIORITY      : array ( 1 .. 5 ) of RTEMS.TASK_PRIORITY;
+
+   SEMAPHORE_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   SEMAPHORE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  PRIORITY_TEST_DRIVER
+--
+--  DESCRIPTION:
+--
+--  This subprogram creates and starts RTEMS tasks of different priority
+--  so that those tasks may exercise the priority blocking algorithm.
+--
+
+   procedure PRIORITY_TEST_DRIVER (
+      PRIORITY_BASE : in     RTEMS.UNSIGNED32
+   );
+
+--
+--  PRIORITY_TASK
+--
+--  DESCRIPTION:
+--
+--  Copies of this RTEMS are executed at different priorities and each
+--  instantiation blocks on a semaphore with priority blocking.  This
+--  is done to exercise the priority blocking algorithms.
+--
+
+   procedure PRIORITY_TASK (
+      ITS_INDEX : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Semaphore Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_2
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Semaphore Manager.
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_3
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Semaphore Manager.
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_4
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Semaphore Manager.
+--
+
+   procedure TASK_4 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_5
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Semaphore Manager.
+--
+
+   procedure TASK_5 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      10,                        -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      100                        -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp13/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp13/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp13/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,673 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 13 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:41:55 joel Exp
+--
+
+with BSP;
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNCHECKED_CONVERSION;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 13 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         4, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         4, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 3 ), 
+         4, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_2'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 3 ),
+         SPTEST.TASK_3'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+      SPTEST.QUEUE_NAME( 1 ) := RTEMS.BUILD_NAME(  'Q', '1', ' ', ' ' );
+      SPTEST.QUEUE_NAME( 2 ) := RTEMS.BUILD_NAME(  'Q', '2', ' ', ' ' );
+      SPTEST.QUEUE_NAME( 3 ) := RTEMS.BUILD_NAME(  'Q', '3', ' ', ' ' );
+
+      RTEMS.MESSAGE_QUEUE_CREATE(
+         SPTEST.QUEUE_NAME( 1 ),
+         0,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.QUEUE_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q1" );
+
+      RTEMS.MESSAGE_QUEUE_CREATE(
+         SPTEST.QUEUE_NAME( 2 ),
+         10,
+         RTEMS.PRIORITY + RTEMS.LIMIT,
+         SPTEST.QUEUE_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q2" );
+
+      RTEMS.MESSAGE_QUEUE_CREATE(
+         SPTEST.QUEUE_NAME( 3 ),
+         0,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.QUEUE_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "QUEUE_CREATE OF Q3" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  FILL_BUFFER
+--
+
+--
+-- Depends on tricks to make the copy work.
+--
+
+   procedure FILL_BUFFER (
+      SOURCE : in     STRING;
+      BUFFER :    out RTEMS.BUFFER
+   ) is
+      SOURCE_BUFFER : RTEMS.BUFFER_POINTER;
+   begin
+
+      SOURCE_BUFFER := RTEMS.TO_BUFFER_POINTER( 
+                          SOURCE( SOURCE'FIRST )'ADDRESS 
+                       );
+
+      BUFFER.FIELD1 := SOURCE_BUFFER.FIELD1;
+      BUFFER.FIELD2 := SOURCE_BUFFER.FIELD2;
+      BUFFER.FIELD3 := SOURCE_BUFFER.FIELD3;
+      BUFFER.FIELD4 := SOURCE_BUFFER.FIELD4;
+      
+   end FILL_BUFFER;
+
+--PAGE
+-- 
+--  PUT_BUFFER
+--
+
+--
+-- Depends on tricks to make the output work.
+--
+
+   procedure PUT_BUFFER (
+      BUFFER : in     RTEMS.BUFFER
+   ) is
+   begin
+
+      TEST_SUPPORT.PUT_NAME( BUFFER.FIELD1, FALSE );
+      TEST_SUPPORT.PUT_NAME( BUFFER.FIELD2, FALSE );
+      TEST_SUPPORT.PUT_NAME( BUFFER.FIELD3, FALSE );
+      TEST_SUPPORT.PUT_NAME( BUFFER.FIELD4, FALSE );
+      
+   end PUT_BUFFER;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      QID            : RTEMS.ID;
+      BUFFER         : RTEMS.BUFFER;
+      BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+      TIMES          : RTEMS.UNSIGNED32;
+      COUNT          : RTEMS.UNSIGNED32;
+      STATUS         : RTEMS.STATUS_CODES;
+   begin
+
+      BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+      RTEMS.MESSAGE_QUEUE_IDENT( 
+         SPTEST.QUEUE_NAME( 1 ), 
+         RTEMS.SEARCH_ALL_NODES, 
+         QID, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_IDENT" );
+      TEXT_IO.PUT( "TA1 - message_queue_ident - qid => " );
+      UNSIGNED32_IO.PUT( QID, WIDTH => 8, BASE => 16 );
+      TEXT_IO.NEW_LINE;
+
+      SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 1 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 1" );
+      RTEMS.MESSAGE_QUEUE_SEND( 
+         SPTEST.QUEUE_ID( 1 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+   
+      SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 1 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 1" );
+      RTEMS.MESSAGE_QUEUE_SEND( 
+         SPTEST.QUEUE_ID( 1 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+          
+      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 1 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 1" );
+      RTEMS.MESSAGE_QUEUE_SEND( 
+         SPTEST.QUEUE_ID( 1 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+          
+TEST_SUPPORT.PAUSE;
+
+      SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 2 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 2" );
+      RTEMS.MESSAGE_QUEUE_SEND( 
+         SPTEST.QUEUE_ID( 2 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+      TEXT_IO.PUT( 
+         "TA1 - message_queue_receive - receive from queue 1 - "
+      );
+      TEXT_IO.PUT_LINE( "10 second timeout" );
+      RTEMS.MESSAGE_QUEUE_RECEIVE(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         RTEMS.DEFAULT_OPTIONS,
+         10 * TEST_SUPPORT.TICKS_PER_SECOND,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+      TEXT_IO.PUT( "TA1 - buffer received: " );
+      SPTEST.PUT_BUFFER( BUFFER );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA2" );
+      RTEMS.TASK_DELETE( SPTEST.TASK_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE" );
+
+      SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 3 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 3" );
+      RTEMS.MESSAGE_QUEUE_SEND( 
+         SPTEST.QUEUE_ID( 3 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 5 seconds" );
+      RTEMS.TASK_WAKE_AFTER( 5 * TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+          
+TEST_SUPPORT.PAUSE;
+
+      SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 3 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 3" );
+      RTEMS.MESSAGE_QUEUE_SEND( 
+         SPTEST.QUEUE_ID( 3 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 3 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 3" );
+      RTEMS.MESSAGE_QUEUE_SEND( 
+         SPTEST.QUEUE_ID( 3 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+      SPTEST.FILL_BUFFER( "BUFFER 4 TO Q 3 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 4 TO Q 3" );
+      RTEMS.MESSAGE_QUEUE_SEND( 
+         SPTEST.QUEUE_ID( 3 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+      SPTEST.FILL_BUFFER( "BUFFER 5 TO Q 3 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 5 TO Q 3" );
+      RTEMS.MESSAGE_QUEUE_URGENT( 
+         SPTEST.QUEUE_ID( 3 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
+
+      for TIMES in 1 .. 4 
+      loop
+         TEXT_IO.PUT( 
+            "TA1 - message_queue_receive - receive from queue 3 - "
+         );
+         TEXT_IO.PUT_LINE( "WAIT FOREVER" );
+         RTEMS.MESSAGE_QUEUE_RECEIVE(
+            SPTEST.QUEUE_ID( 3 ),
+            BUFFER_POINTER,
+            RTEMS.DEFAULT_OPTIONS,
+            RTEMS.NO_TIMEOUT,
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+         TEXT_IO.PUT( "TA1 - buffer received: " );
+         SPTEST.PUT_BUFFER( BUFFER );
+         TEXT_IO.NEW_LINE;
+      end loop;
+
+      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 2 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 3 TO Q 2" );
+      RTEMS.MESSAGE_QUEUE_URGENT( 
+         SPTEST.QUEUE_ID( 2 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
+
+      TEXT_IO.PUT( 
+        "TA1 - message_queue_receive - receive from queue 2 - " 
+      );
+      TEXT_IO.PUT_LINE( "WAIT FOREVER" );
+      RTEMS.MESSAGE_QUEUE_RECEIVE(
+         SPTEST.QUEUE_ID( 2 ),
+         BUFFER_POINTER,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+      TEXT_IO.PUT( "TA1 - buffer received: " );
+      SPTEST.PUT_BUFFER( BUFFER );
+      TEXT_IO.NEW_LINE;
+
+TEST_SUPPORT.PAUSE;
+
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_delete - delete queue 1" );
+      RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
+   
+      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 2 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_urgent - BUFFER 3 TO Q 2" );
+      RTEMS.MESSAGE_QUEUE_URGENT( 
+         SPTEST.QUEUE_ID( 2 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_URGENT" );
+
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_delete - delete queue 2" );
+      RTEMS.MESSAGE_QUEUE_DELETE( SPTEST.QUEUE_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_DELETE" );
+   
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - empty Q 3" );
+      RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
+      TEXT_IO.PUT( "TA1 - " );
+      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
+      TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
+     
+      SPTEST.FILL_BUFFER( "BUFFER 1 TO Q 3 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 1 TO Q 3" );
+      RTEMS.MESSAGE_QUEUE_SEND( 
+         SPTEST.QUEUE_ID( 3 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+      SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 3 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 2 TO Q 3" );
+      RTEMS.MESSAGE_QUEUE_SEND( 
+         SPTEST.QUEUE_ID( 3 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 3 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_send - BUFFER 3 TO Q 3" );
+      RTEMS.MESSAGE_QUEUE_SEND( 
+         SPTEST.QUEUE_ID( 3 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - Q 3" );
+      RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
+      TEXT_IO.PUT( "TA1 - " );
+      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
+      TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
+     
+      TEXT_IO.PUT_LINE( 
+         "TA1 - message_queue_send - until all message buffers consumed"
+      );
+      loop
+
+         RTEMS.MESSAGE_QUEUE_SEND( 
+            SPTEST.QUEUE_ID( 3 ), 
+            BUFFER_POINTER, 
+            STATUS 
+         );
+         
+         exit when RTEMS.ARE_STATUSES_EQUAL( STATUS, RTEMS.UNSATISFIED );
+
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+         
+      end loop;
+      TEXT_IO.PUT_LINE( 
+         "TA1 - message_queue_send - all message buffers consumed"
+      );
+      TEXT_IO.PUT_LINE( "TA1 - message_queue_flush - Q 3" );
+      RTEMS.MESSAGE_QUEUE_FLUSH( SPTEST.QUEUE_ID( 3 ), COUNT, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_FLUSH" );
+      TEXT_IO.PUT( "TA1 - " );
+      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
+      TEXT_IO.PUT_LINE( " messages were flushed from Q 3" );
+     
+      if COUNT /= BSP.CONFIGURATION.MAXIMUM_MESSAGES then
+         TEXT_IO.PUT( "TA1 - ERROR - " );
+         UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
+         TEXT_IO.PUT_LINE( " messages flushed" );
+      end if;
+
+      TEXT_IO.PUT_LINE( "*** END OF TEST 13 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+   end TASK_1;
+
+--PAGE
+-- 
+--  TASK_2
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      BUFFER            : RTEMS.BUFFER;
+      BUFFER_POINTER    : RTEMS.BUFFER_POINTER;
+      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+      STATUS            : RTEMS.STATUS_CODES;
+   begin
+
+      BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+      TEXT_IO.PUT_LINE( 
+         "TA2 - message_queue_receive - receive from queue 1 - NO_WAIT"
+      );
+      RTEMS.MESSAGE_QUEUE_RECEIVE(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         RTEMS.NO_WAIT,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+      TEXT_IO.PUT( "TA2 - buffer received: " );
+      SPTEST.PUT_BUFFER( BUFFER );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( 
+         "TA2 - message_queue_receive - receive from queue 1 - WAIT FOREVER"
+      );
+      RTEMS.MESSAGE_QUEUE_RECEIVE(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+      TEXT_IO.PUT( "TA2 - buffer received: " );
+      SPTEST.PUT_BUFFER( BUFFER );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( 
+         "TA2 - message_queue_receive - receive from queue 1 - WAIT FOREVER"
+      );
+      RTEMS.MESSAGE_QUEUE_RECEIVE(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+      TEXT_IO.PUT( "TA2 - buffer received: " );
+      SPTEST.PUT_BUFFER( BUFFER );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( 
+         "TA2 - task_set_priority - make self highest priority task"
+      );
+      RTEMS.TASK_SET_PRIORITY(
+         RTEMS.SELF,
+         3,
+         PREVIOUS_PRIORITY,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA2 - message_queue_receive - receive from queue 2 - WAIT FOREVER"
+      );
+      RTEMS.MESSAGE_QUEUE_RECEIVE(
+         SPTEST.QUEUE_ID( 2 ),
+         BUFFER_POINTER,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+      TEXT_IO.PUT( "TA2 - buffer received: " );
+      SPTEST.PUT_BUFFER( BUFFER );
+      TEXT_IO.NEW_LINE;
+
+      SPTEST.FILL_BUFFER( "BUFFER 2 TO Q 2 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA2 - message_queue_send - BUFFER 2 TO Q 2" );
+      RTEMS.MESSAGE_QUEUE_SEND( 
+         SPTEST.QUEUE_ID( 2 ), 
+         BUFFER_POINTER, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_SEND" );
+   
+      TEXT_IO.PUT_LINE( 
+    "TA2 - message_queue_receive - receive from queue 1 - 10 second timeout"
+      );
+      RTEMS.MESSAGE_QUEUE_RECEIVE(
+         SPTEST.QUEUE_ID( 1 ),
+         BUFFER_POINTER,
+         RTEMS.DEFAULT_OPTIONS,
+         10 * TEST_SUPPORT.TICKS_PER_SECOND,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+      TEXT_IO.PUT( "TA2 - buffer received: " );
+      SPTEST.PUT_BUFFER( BUFFER );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( 
+         "TA2 - message_queue_receive - receive from queue 3 - WAIT FOREVER"
+      );
+      RTEMS.MESSAGE_QUEUE_RECEIVE(
+         SPTEST.QUEUE_ID( 3 ),
+         BUFFER_POINTER,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+      TEXT_IO.PUT( "TA2 - buffer received: " );
+      SPTEST.PUT_BUFFER( BUFFER );
+      TEXT_IO.NEW_LINE;
+
+   end TASK_2;
+
+--PAGE
+-- 
+--  TASK_3
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      BUFFER         : RTEMS.BUFFER;
+      BUFFER_POINTER : RTEMS.BUFFER_POINTER;
+      COUNT          : RTEMS.UNSIGNED32;
+      STATUS         : RTEMS.STATUS_CODES;
+   begin
+
+      BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
+
+      TEXT_IO.PUT_LINE( 
+         "TA3 - message_queue_receive - receive from queue 2 - WAIT FOREVER"
+      );
+      RTEMS.MESSAGE_QUEUE_RECEIVE(
+         SPTEST.QUEUE_ID( 2 ),
+         BUFFER_POINTER,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+      TEXT_IO.PUT( "TA3 - buffer received: " );
+      SPTEST.PUT_BUFFER( BUFFER );
+      TEXT_IO.NEW_LINE;
+
+      SPTEST.FILL_BUFFER( "BUFFER 3 TO Q 1 ", BUFFER );
+      TEXT_IO.PUT_LINE( "TA3 - message_queue_broadcast - BUFFER 3 TO Q 1" );
+      RTEMS.MESSAGE_QUEUE_BROADCAST( 
+         SPTEST.QUEUE_ID( 1 ), 
+         BUFFER_POINTER, 
+         COUNT,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_BROADCAST" );
+      TEXT_IO.PUT( "TA3 - number of tasks awakened = " );
+      UNSIGNED32_IO.PUT( COUNT, WIDTH => 3, BASE => 10 );
+      TEXT_IO.NEW_LINE;
+     
+      TEXT_IO.PUT_LINE( 
+         "TA3 - message_queue_receive - receive from queue 3 - WAIT FOREVER"
+      );
+      RTEMS.MESSAGE_QUEUE_RECEIVE(
+         SPTEST.QUEUE_ID( 3 ),
+         BUFFER_POINTER,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "MESSAGE_QUEUE_RECEIVE" );
+      TEXT_IO.PUT( "TA3 - buffer received: " );
+      SPTEST.PUT_BUFFER( BUFFER );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA3 - task_delete - delete self" );
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end TASK_3;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp13/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp13/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp13/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,174 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 13 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:41:57 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS message
+--  queues created by this test.
+--
+
+   QUEUE_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   QUEUE_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  FILL_BUFFER
+--
+--  DESCRIPTION:
+--
+--  This subprogram takes the SOURCE input string and places 
+--  up to the first sixteen characters of that string into 
+--  the message BUFFER.
+--
+
+   procedure FILL_BUFFER (
+      SOURCE : in     STRING;
+      BUFFER :    out RTEMS.BUFFER
+   );
+
+--
+--  PUT_BUFFER
+--
+--  DESCRIPTION:
+--
+--  This subprogram prints the specified message BUFFER.
+--
+
+   procedure PUT_BUFFER (
+      BUFFER : in     RTEMS.BUFFER
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Message Queue Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_2
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Message Queue Manager.
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_3
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Message Queue Manager.
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      10,                        -- maximum # message queues
+      100,                       -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      100                        -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp14/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp14/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp14/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,329 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 14 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:42:00 joel Exp
+--
+
+with ADDRESS_IO;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+with INTERFACES; use INTERFACES;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 14 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_2'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
+
+      RTEMS.TIMER_CREATE( 
+         SPTEST.TIMER_NAME( 1 ), 
+         SPTEST.TIMER_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM1" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  SIGNAL_3_TO_TASK_1
+--
+
+   procedure SIGNAL_3_TO_TASK_1 (
+      ID      : in     RTEMS.ID;
+      POINTER : in     RTEMS.ADDRESS
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.SIGNAL_SEND( SPTEST.TASK_ID( 1 ), RTEMS.SIGNAL_3, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND of 3" );
+
+      SPTEST.TIMER_GOT_THIS_ID      := ID;
+      SPTEST.TIMER_GOT_THIS_POINTER := POINTER;
+
+      SPTEST.SIGNAL_SENT := TRUE;
+
+   end SIGNAL_3_TO_TASK_1;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      PREVIOUS_MODE : RTEMS.MODE;
+      STATUS        : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT_LINE( "TA1 - signal_catch - INTERRUPT_LEVEL( 3 )" );
+      RTEMS.SIGNAL_CATCH( 
+         SPTEST.PROCESS_ASR'ACCESS, 
+         RTEMS.INTERRUPT_LEVEL( 3 ), 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH INTERRUPT(3)" );
+   
+      TEXT_IO.PUT_LINE( "TA1 - signal_send - SIGNAL_16 to self" );
+      RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_16, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( 
+         STATUS, 
+         "SIGNAL_SEND - SIGNAL_16 to SELF"
+      );
+
+      TEXT_IO.PUT_LINE( "TA1 - signal_send - SIGNAL_0 to self" );
+      RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_0, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( 
+         STATUS, 
+         "SIGNAL_SEND - SIGNAL_0 to SELF"
+      );
+
+      TEXT_IO.PUT_LINE( "TA1 - signal_catch - NO_ASR" );
+      RTEMS.SIGNAL_CATCH(SPTEST.PROCESS_ASR'ACCESS, RTEMS.NO_ASR, STATUS);
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH - NO_ASR" );
+
+      TEST_SUPPORT.PAUSE;
+
+      TEXT_IO.PUT_LINE( "TA1 - signal_send - SIGNAL_1 to self" );
+      RTEMS.SIGNAL_SEND( RTEMS.SELF, RTEMS.SIGNAL_1, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( 
+         STATUS, 
+         "SIGNAL_SEND - SIGNAL_1 to SELF"
+      );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_mode - disable ASRs" );
+      RTEMS.TASK_MODE( 
+         RTEMS.NO_ASR, 
+         RTEMS.ASR_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+
+      SPTEST.TIMER_GOT_THIS_ID := 0;
+      SPTEST.TIMER_GOT_THIS_POINTER := RTEMS.NULL_ADDRESS;
+
+      TEXT_IO.PUT_LINE( "TA1 - sending signal to SELF from timer" );
+      RTEMS.TIMER_FIRE_AFTER( 
+         SPTEST.TIMER_ID( 1 ),
+         TEST_SUPPORT.TICKS_PER_SECOND / 2,
+         SPTEST.SIGNAL_3_TO_TASK_1'ACCESS,
+         SPTEST.TASK_1'ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+      TEXT_IO.PUT_LINE( "TA1 - waiting for signal to arrive" );
+
+      SPTEST.SIGNAL_SENT := FALSE;
+      SPTEST.ASR_FIRED   := FALSE;
+
+      loop
+         exit when SPTEST.SIGNAL_SENT = TRUE;
+      end loop;
+
+      if SPTEST.TIMER_GOT_THIS_ID = SPTEST.TIMER_ID( 1 ) and then
+         SPTEST.TIMER_GOT_THIS_POINTER = SPTEST.TASK_1'ADDRESS then
+ 
+         TEXT_IO.PUT_LINE( "TA1 - timer routine got the correct arguments" );
+
+      else
+
+         TEXT_IO.PUT( "TA1 - timer got (" );
+         UNSIGNED32_IO.PUT( SPTEST.TIMER_GOT_THIS_ID  );
+         TEXT_IO.PUT( "," );
+         ADDRESS_IO.PUT( SPTEST.TIMER_GOT_THIS_POINTER  );
+         TEXT_IO.PUT( ") instead of (" );
+         UNSIGNED32_IO.PUT( SPTEST.TIMER_ID( 1 ) );
+         TEXT_IO.PUT( "," );
+         ADDRESS_IO.PUT( SPTEST.TASK_1'ADDRESS  );
+         TEXT_IO.PUT_LINE( ")!!!!" );
+
+      end if;
+
+      TEXT_IO.PUT_LINE( "TA1 - task_mode - enable ASRs" );
+      RTEMS.TASK_MODE( 
+         RTEMS.ASR, 
+         RTEMS.ASR_MASK, 
+         PREVIOUS_MODE, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE" );
+
+      TEXT_IO.PUT_LINE( "TA1 - signal_catch - ASR ADDRESS of NULL" );
+      RTEMS.SIGNAL_CATCH( NULL, RTEMS.DEFAULT_MODES, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( 
+         STATUS, 
+         "SIGNAL_CATCH - NULL ADDRESS"
+      );
+   
+      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete self" );
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end TASK_1;
+
+--PAGE
+-- 
+--  TASK_2
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT_LINE( "TA2 - signal_send - SIGNAL_17 to TA1" );
+      RTEMS.SIGNAL_SEND( SPTEST.TASK_ID( 1 ), RTEMS.SIGNAL_17, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( 
+         STATUS, 
+         "SIGNAL_SEND - SIGNAL_17 to TA1"
+      );
+
+      TEXT_IO.PUT_LINE( "TA2 - task_wake_after - yield processor" );
+      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER YIELD" );
+
+      TEXT_IO.PUT_LINE( 
+         "TA2 - signal_send - SIGNAL_18 and SIGNAL_19 to TA1"
+      );
+      RTEMS.SIGNAL_SEND( 
+         SPTEST.TASK_ID( 1 ), 
+         RTEMS.SIGNAL_18 + RTEMS.SIGNAL_19,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( 
+         STATUS, 
+         "SIGNAL_SEND - SIGNAL_18 and SIGNAL_19 to TA1"
+      );
+
+      TEXT_IO.PUT_LINE( "TA2 - task_wake_after - yield processor" );
+      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER YIELD" );
+
+      TEXT_IO.PUT_LINE( "*** END OF TEST 14 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+   end TASK_2;
+
+--PAGE
+-- 
+--  PROCESS_ASR
+--
+
+   procedure PROCESS_ASR (
+      THE_SIGNAL_SET : in     RTEMS.SIGNAL_SET
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT( "ASR - ENTRY - signal => " );
+      UNSIGNED32_IO.PUT( THE_SIGNAL_SET, BASE => 16, WIDTH => 8 );
+      TEXT_IO.NEW_LINE;
+
+      if THE_SIGNAL_SET = RTEMS.SIGNAL_16 or else 
+             THE_SIGNAL_SET = RTEMS.SIGNAL_17 or else 
+             THE_SIGNAL_SET = RTEMS.SIGNAL_18 + RTEMS.SIGNAL_19 then
+         NULL;
+
+      elsif THE_SIGNAL_SET = RTEMS.SIGNAL_0 or else 
+              THE_SIGNAL_SET = RTEMS.SIGNAL_1 then
+         TEXT_IO.PUT_LINE( "ASR - task_wake_after - yield processor" );
+         RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( 
+            STATUS, 
+            "TASK_WAKE_AFTER YIELD"
+         );
+
+      elsif THE_SIGNAL_SET = RTEMS.SIGNAL_3 then
+
+         SPTEST.ASR_FIRED := TRUE;
+
+      end if;
+
+      TEXT_IO.PUT( "ASR - EXIT  - signal => " );
+      UNSIGNED32_IO.PUT( THE_SIGNAL_SET, BASE => 16, WIDTH => 8 );
+      TEXT_IO.NEW_LINE;
+
+   end PROCESS_ASR;
+      
+end SPTEST;
Index: c/src/ada-tests/sptests/sp14/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp14/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp14/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,186 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 14 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:42:02 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS timers created
+--  by this test.
+--
+
+   TIMER_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+   TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+--  SIGNAL_SENT is set to TRUE to indicate that a signal set has 
+--  been sent from an ISR to the executing task.
+--
+
+   SIGNAL_SENT : RTEMS.BOOLEAN;
+   pragma volatile( SIGNAL_SENT );
+
+--
+--  These hold the arguments passed to the timer service routine.
+--
+
+   TIMER_GOT_THIS_ID      : RTEMS.ID;
+   pragma volatile( TIMER_GOT_THIS_ID );
+
+   TIMER_GOT_THIS_POINTER : RTEMS.ADDRESS;
+   pragma volatile( TIMER_GOT_THIS_POINTER );
+
+--
+--  ASR_FIRED is set to TRUE to indicate that the ASR has executed
+--  and was passed the correct signal set.
+--
+
+   ASR_FIRED   : RTEMS.BOOLEAN;
+   pragma volatile( ASR_FIRED );
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  SIGNAL_3_TO_TASK_1
+--
+--  DESCRIPTION:
+--
+--  This subprogram sends signal 3 to TASK_1.
+--
+
+   procedure SIGNAL_3_TO_TASK_1 (
+      ID      : in     RTEMS.ID;
+      POINTER : in     RTEMS.ADDRESS
+   );
+
+--
+--  PROCESS_ASR
+--
+--  DESCRIPTION:
+--
+--  This subprogram is an ASR for TASK_1.
+--
+
+   procedure PROCESS_ASR (
+      THE_SIGNAL_SET : in     RTEMS.SIGNAL_SET
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Signal Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_2
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Signal Manager.
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      1,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      100                        -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp15/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp15/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp15/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,284 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 15 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:42:05 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 15 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+
+      SPTEST.PARTITION_NAME( 1 ) := RTEMS.BUILD_NAME(  'P', 'T', '1', ' ' );
+      SPTEST.PARTITION_NAME( 2 ) := RTEMS.BUILD_NAME(  'P', 'T', '2', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         4, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      TEXT_IO.PUT_LINE( "INIT - partition_create - partition 1" );
+      RTEMS.PARTITION_CREATE(
+         SPTEST.PARTITION_NAME( 1 ),
+         AREA_1'ADDRESS,
+         4096,
+         512,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.PARTITION_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE OF PT1" );
+
+      TEXT_IO.PUT_LINE( "INIT - partition_create - partition 2" );
+      RTEMS.PARTITION_CREATE(
+         SPTEST.PARTITION_NAME( 2 ),
+         AREA_2'ADDRESS,
+         274,
+         128,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.PARTITION_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_CREATE OF PT2" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  PUT_ADDRESS_FROM_AREA_1
+--
+
+   procedure PUT_ADDRESS_FROM_AREA_1 (
+      TO_BE_PRINTED : in     RTEMS.ADDRESS
+   ) is
+
+   begin
+
+      UNSIGNED32_IO.PUT(
+         RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_1'ADDRESS ),
+         WIDTH => 8,
+         BASE => 16
+      );
+
+   end PUT_ADDRESS_FROM_AREA_1;
+
+--PAGE
+-- 
+--  PUT_ADDRESS_FROM_AREA_2
+--
+
+   procedure PUT_ADDRESS_FROM_AREA_2 (
+      TO_BE_PRINTED : in     RTEMS.ADDRESS
+   ) is
+   begin
+
+      UNSIGNED32_IO.PUT(
+         RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_2'ADDRESS ),
+         WIDTH => 8,
+         BASE => 16
+      );
+
+   end PUT_ADDRESS_FROM_AREA_2;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      PTID_1           : RTEMS.ID;
+      PTID_2           : RTEMS.ID;
+      BUFFER_ADDRESS_1 : RTEMS.ADDRESS;
+      BUFFER_ADDRESS_2 : RTEMS.ADDRESS;
+      BUFFER_ADDRESS_3 : RTEMS.ADDRESS;
+      BUFFER_ADDRESS_4 : RTEMS.ADDRESS;
+      STATUS           : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT( "TA1 - partition_ident - partition 1 id = " );
+      RTEMS.PARTITION_IDENT( 
+         SPTEST.PARTITION_NAME( 1 ), 
+         RTEMS.SEARCH_ALL_NODES, 
+         PTID_1, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_IDENT OF PT1" );
+      UNSIGNED32_IO.PUT( PTID_1, WIDTH => 8, BASE => 16 );
+      TEXT_IO.NEW_LINE;
+   
+      TEXT_IO.PUT( "TA1 - partition_ident - partition 2 id = " );
+      RTEMS.PARTITION_IDENT( 
+         SPTEST.PARTITION_NAME( 2 ), 
+         RTEMS.SEARCH_ALL_NODES, 
+         PTID_2, 
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_IDENT OF PT2" );
+      UNSIGNED32_IO.PUT( PTID_2, WIDTH => 8, BASE => 16 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT(
+         "TA1 - partition_get_buffer - get buffer 1 from partition 1 - "
+      );
+      RTEMS.PARTITION_GET_BUFFER( 
+         SPTEST.PARTITION_ID( 1 ), 
+         BUFFER_ADDRESS_1,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( BUFFER_ADDRESS_1 );
+      TEXT_IO.NEW_LINE;
+      
+      TEXT_IO.PUT(
+         "TA1 - partition_get_buffer - get buffer 2 from partition 1 - "
+      );
+      RTEMS.PARTITION_GET_BUFFER( 
+         SPTEST.PARTITION_ID( 1 ), 
+         BUFFER_ADDRESS_2,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( BUFFER_ADDRESS_2 );
+      TEXT_IO.NEW_LINE;
+      
+      TEXT_IO.PUT(
+         "TA1 - partition_get_buffer - get buffer 1 from partition 2 - "
+      );
+      RTEMS.PARTITION_GET_BUFFER( 
+         SPTEST.PARTITION_ID( 2 ), 
+         BUFFER_ADDRESS_3,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
+      SPTEST.PUT_ADDRESS_FROM_AREA_2( BUFFER_ADDRESS_3 );
+      TEXT_IO.NEW_LINE;
+      
+      TEXT_IO.PUT(
+         "TA1 - partition_get_buffer - get buffer 2 from partition 2 - "
+      );
+      RTEMS.PARTITION_GET_BUFFER( 
+         SPTEST.PARTITION_ID( 2 ), 
+         BUFFER_ADDRESS_4,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_GET_BUFFER" );
+      SPTEST.PUT_ADDRESS_FROM_AREA_2( BUFFER_ADDRESS_4 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT(
+         "TA1 - partition_return_buffer - return buffer 1 to partition 1 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( BUFFER_ADDRESS_1 );
+      TEXT_IO.NEW_LINE;
+      RTEMS.PARTITION_RETURN_BUFFER( 
+         SPTEST.PARTITION_ID( 1 ), 
+         BUFFER_ADDRESS_1,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
+ 
+      TEXT_IO.PUT(
+         "TA1 - partition_return_buffer - return buffer 2 to partition 1 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( BUFFER_ADDRESS_2 );
+      TEXT_IO.NEW_LINE;
+      RTEMS.PARTITION_RETURN_BUFFER( 
+         SPTEST.PARTITION_ID( 1 ), 
+         BUFFER_ADDRESS_2,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
+ 
+      TEXT_IO.PUT(
+         "TA1 - partition_return_buffer - return buffer 1 to partition 2 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_2( BUFFER_ADDRESS_3 );
+      TEXT_IO.NEW_LINE;
+      RTEMS.PARTITION_RETURN_BUFFER( 
+         SPTEST.PARTITION_ID( 2 ), 
+         BUFFER_ADDRESS_3,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
+ 
+      TEXT_IO.PUT(
+         "TA1 - partition_return_buffer - return buffer 2 to partition 2 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_2( BUFFER_ADDRESS_4 );
+      TEXT_IO.NEW_LINE;
+      RTEMS.PARTITION_RETURN_BUFFER( 
+         SPTEST.PARTITION_ID( 2 ), 
+         BUFFER_ADDRESS_4,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_RETURN_BUFFER" );
+ 
+      TEXT_IO.PUT_LINE( "TA1 - partition_delete - delete partition 1" );
+      RTEMS.PARTITION_DELETE( SPTEST.PARTITION_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_DELETE OF SELF" );
+
+      TEXT_IO.PUT_LINE( "TA1 - partition_delete - delete partition 2" );
+      RTEMS.PARTITION_DELETE( SPTEST.PARTITION_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PARTITION_DELETE OF SELF" );
+
+      TEXT_IO.PUT_LINE( "*** END OF TEST 15 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+   
+   end TASK_1;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp15/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp15/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp15/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,173 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 15 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:42:06 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS partitions created
+--  by this test.
+--
+
+   PARTITION_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   PARTITION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  These arrays define the memory areas used for the partitions in
+--  this test.
+--
+
+   AREA_1 : array ( RTEMS.UNSIGNED32 range 0 .. 4095 ) of RTEMS.UNSIGNED8;
+   for AREA_1'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+   AREA_2 : array ( RTEMS.UNSIGNED32 range 0 ..  273 ) of RTEMS.UNSIGNED8;
+   for AREA_2'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  PUT_ADDRESS_FROM_AREA_1
+--
+--  DESCRIPTION:
+--
+--  This subpgram prints the offset of the address TO_BE_PRINTED 
+--  from the first byte of AREA_1.
+--
+--  NOTE:
+--
+--  This subprogram is used because the actual address of AREA_1
+--  varies based upon the size of the executable, the target board,
+--  and the target processor.
+--
+
+   procedure PUT_ADDRESS_FROM_AREA_1 (
+      TO_BE_PRINTED : in     RTEMS.ADDRESS
+   );
+
+--
+--  PUT_ADDRESS_FROM_AREA_2
+--
+--  DESCRIPTION:
+--
+--  This subprogram prints the offset of the address TO_BE_PRINTED 
+--  from the first byte of AREA_2.
+--
+--  NOTE:
+--
+--  This subprogram is used because the actual address of AREA_1
+--  varies based upon the size of the executable, the target board,
+--  and the target processor.
+--
+
+   procedure PUT_ADDRESS_FROM_AREA_2 (
+      TO_BE_PRINTED : in     RTEMS.ADDRESS
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Partition Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      2,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      100                        -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp16/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp16/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp16/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,686 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 16 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:42:10 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 16 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
+      SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME(  'T', 'A', '4', ' ' );
+      SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME(  'T', 'A', '5', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         SPTEST.BASE_PRIORITY, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         SPTEST.BASE_PRIORITY, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 3 ), 
+         SPTEST.BASE_PRIORITY, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA3" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_2'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 3 ),
+         SPTEST.TASK_3'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA3" );
+
+      SPTEST.REGION_NAME( 1 ) := RTEMS.BUILD_NAME(  'R', 'N', '1', ' ' );
+      SPTEST.REGION_NAME( 2 ) := RTEMS.BUILD_NAME(  'R', 'N', '1', ' ' );
+      SPTEST.REGION_NAME( 3 ) := RTEMS.BUILD_NAME(  'R', 'N', '1', ' ' );
+
+      RTEMS.REGION_CREATE(
+         SPTEST.REGION_NAME( 1 ), 
+         SPTEST.AREA_1'ADDRESS,
+         4096, 
+         128,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.REGION_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE OF RN1" );
+
+      RTEMS.REGION_CREATE(
+         SPTEST.REGION_NAME( 2 ), 
+         SPTEST.AREA_2'ADDRESS,
+         4096, 
+         128,
+         RTEMS.PRIORITY,
+         SPTEST.REGION_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE OF RN2" );
+
+      RTEMS.REGION_CREATE(
+         SPTEST.REGION_NAME( 3 ), 
+         SPTEST.AREA_3'ADDRESS,
+         4096, 
+         128,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.REGION_ID( 3 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE OF RN3" );
+
+ 
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  PUT_ADDRESS_FROM_AREA_1
+--
+
+   procedure PUT_ADDRESS_FROM_AREA_1 (
+      TO_BE_PRINTED : in     RTEMS.ADDRESS
+   ) is
+
+   begin
+
+      UNSIGNED32_IO.PUT(
+         RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_1'ADDRESS ),
+         WIDTH => 8,
+         BASE => 16
+      );
+
+   end PUT_ADDRESS_FROM_AREA_1;
+
+--PAGE
+-- 
+--  PUT_ADDRESS_FROM_AREA_2
+--
+
+   procedure PUT_ADDRESS_FROM_AREA_2 (
+      TO_BE_PRINTED : in     RTEMS.ADDRESS
+   ) is
+   begin
+
+      UNSIGNED32_IO.PUT(
+         RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_2'ADDRESS ),
+         WIDTH => 8,
+         BASE => 16
+      );
+
+   end PUT_ADDRESS_FROM_AREA_2;
+
+--PAGE
+-- 
+--  PUT_ADDRESS_FROM_AREA_3
+--
+
+   procedure PUT_ADDRESS_FROM_AREA_3 (
+      TO_BE_PRINTED : in     RTEMS.ADDRESS
+   ) is
+   begin
+
+      UNSIGNED32_IO.PUT(
+         RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_3'ADDRESS ),
+         WIDTH => 8,
+         BASE => 16
+      );
+
+   end PUT_ADDRESS_FROM_AREA_3;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      RNID              : RTEMS.ID;
+      SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_3 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_4 : RTEMS.ADDRESS;
+      STATUS            : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.REGION_IDENT( SPTEST.REGION_NAME( 1 ), RNID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_IDENT OF RN1" );
+      TEXT_IO.PUT( "TA1 - region_ident - rnid => " );
+      UNSIGNED32_IO.PUT( RNID, WIDTH => 8, BASE => 16 );
+      TEXT_IO.NEW_LINE;
+       
+      TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+      TEXT_IO.PUT_LINE( "100 byte segment from region 2" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 2 ),
+         100,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA1 - got segment from region 2 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_1 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+      TEXT_IO.PUT_LINE( "3K segment from region 3" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 3 ),
+         3072,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_2,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA1 - got segment from region 3 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_3( SEGMENT_ADDRESS_2 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( "TA1 - region_get_segment - get 3080 byte segment " );
+      TEXT_IO.PUT_LINE( "from region 1 - NO_WAIT" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         3080,
+         RTEMS.NO_WAIT,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_3,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_3 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
+      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+   
+TEST_SUPPORT.PAUSE;
+
+      TEXT_IO.PUT( 
+         "TA1 - region_return_segment - return segment to region 1 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_3 );
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_3,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( "TA1 - region_get_segment - wait 10 seconds for 3K " );
+      TEXT_IO.PUT_LINE( "segment from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         3072,
+         RTEMS.DEFAULT_OPTIONS,
+         10 * TEST_SUPPORT.TICKS_PER_SECOND,
+         SEGMENT_ADDRESS_4,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( 
+         "TA1 - region_return_segment - return segment to region 2 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_1 );
+      TEXT_IO.NEW_LINE;
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 2 ),
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
+      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+   
+      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA3" );
+      RTEMS.TASK_DELETE( SPTEST.TASK_ID( 3 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA3" );
+
+TEST_SUPPORT.PAUSE;
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 4 ), 
+         SPTEST.BASE_PRIORITY, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 4 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA4" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 5 ), 
+         SPTEST.BASE_PRIORITY, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 5 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA5" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 4 ),
+         SPTEST.TASK_4'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA4" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 5 ),
+         SPTEST.TASK_5'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA5" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+          
+      TEXT_IO.PUT( 
+         "TA1 - region_return_segment - return segment to region 1 - " 
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_4,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+   
+      TEXT_IO.PUT( "TA1 - region_get_segment - wait 10 seconds for 3K " );
+      TEXT_IO.PUT_LINE( "segment from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         3072,
+         RTEMS.DEFAULT_OPTIONS,
+         10 * TEST_SUPPORT.TICKS_PER_SECOND,
+         SEGMENT_ADDRESS_4,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - sleep 1 second" );
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+   
+      TEXT_IO.PUT_LINE( "TA1 - task_delete - delete TA4" );
+      RTEMS.TASK_DELETE( SPTEST.TASK_ID( 4 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA4" );
+
+      TEXT_IO.PUT( 
+         "TA1 - region_return_segment - return segment to region 1 - " 
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_4,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - yield processor" );
+      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+   
+      TEXT_IO.PUT_LINE( "TA1 - region_delete - delete region 1" );
+      RTEMS.REGION_DELETE( SPTEST.REGION_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_DELETE OF RN1" );
+
+      TEXT_IO.PUT_LINE( "*** END OF TEST 16 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+   end TASK_1;
+
+--PAGE
+-- 
+--  TASK_2
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      PREVIOUS_PRIORITY : RTEMS.TASK_PRIORITY;
+      SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
+      STATUS            : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT( "TA2 - region_get_segment - wait on 2K segment " );
+      TEXT_IO.PUT_LINE( "from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         2048,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA2 - got segment from region 1 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( 
+         "TA2 - region_return_segment - return segment to region 1 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( "TA2 - task_set_priority - make self " );
+      TEXT_IO.PUT_LINE( "highest priority task" );
+      RTEMS.TASK_SET_PRIORITY(
+         RTEMS.SELF,
+         SPTEST.BASE_PRIORITY - 1,
+         PREVIOUS_PRIORITY,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SET_PRIORITY" );
+
+      TEXT_IO.PUT( 
+         "TA2 - region_get_segment - wait on 3968 byte segment "
+      );
+      TEXT_IO.PUT_LINE( "from region 2" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 2 ),
+         3968,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_2,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA2 - got segment from region 2 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_2 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( 
+         "TA2 - region_return_segment - return segment to region 2 - " 
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_2 );
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 2 ),
+         SEGMENT_ADDRESS_2,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA2 - task_delete - delete self" );
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA2" );
+
+   end TASK_2;
+
+--PAGE
+-- 
+--  TASK_3
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
+      STATUS            : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT( "TA3 - region_get_segment - wait on 3968 byte segment " );
+      TEXT_IO.PUT_LINE( "from region 2" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 2 ),
+         3968,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA3 - got segment from region 2 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_2( SEGMENT_ADDRESS_1 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( "TA3 - region_get_segment - wait on 2K segment " );
+      TEXT_IO.PUT_LINE( "from region 3" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 3 ),
+         2048,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_2,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+
+   end TASK_3;
+
+--PAGE
+-- 
+--  TASK_4
+--
+
+   procedure TASK_4 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
+      STATUS            : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT( "TA4 - region_get_segment - wait on 1.5K segment " );
+      TEXT_IO.PUT_LINE( "from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         1536,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.PUT( "TA4 - got and returned " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
+      TEXT_IO.NEW_LINE;
+
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+      TEXT_IO.PUT( "TA4 - region_get_segment - wait on 3K segment " );
+      TEXT_IO.PUT_LINE( "from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         3072,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_2,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+
+   end TASK_4;
+
+--PAGE
+-- 
+--  TASK_5
+--
+
+   procedure TASK_5 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
+      STATUS            : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT( "TA5 - region_get_segment - wait on 1.5K segment " );
+      TEXT_IO.PUT_LINE( "from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         1536,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.PUT( "TA5 - got and returned " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
+      TEXT_IO.NEW_LINE;
+
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+
+      TEXT_IO.PUT( "TA5 - region_get_segment - wait on 3K segment " );
+      TEXT_IO.PUT_LINE( "from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         3072,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_2,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA5 - got segment from region 1 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_2 );
+      TEXT_IO.NEW_LINE;
+
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_2,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.PUT( 
+         "TA5 - region_return_segment - return segment to region 1 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_2 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "TA5 - task_delete - delete self" );
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF TA5" );
+
+   end TASK_5;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp16/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp16/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp16/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,250 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 16 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:42:11 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 5 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 5 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS regions created
+--  by this test.
+--
+
+   REGION_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   REGION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  The following constant defines the priority of most of the 
+--  RTEMS tasks in this test.  This allows one of the tasks to
+--  easily set itself to a higher priority than the rest.
+--
+
+   BASE_PRIORITY : constant RTEMS.TASK_PRIORITY := 140;
+
+--
+--  These arrays define the memory areas used for the regions in
+--  this test.
+--
+
+   AREA_1 : array ( RTEMS.UNSIGNED32 range 0 .. 4095 ) of RTEMS.UNSIGNED8;
+   for AREA_1'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+   AREA_2 : array ( RTEMS.UNSIGNED32 range 0 .. 4095 ) of RTEMS.UNSIGNED8;
+   for AREA_2'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+   AREA_3 : array ( RTEMS.UNSIGNED32 range 0 .. 4095 ) of RTEMS.UNSIGNED8;
+   for AREA_3'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  PUT_ADDRESS_FROM_AREA_1
+--
+--  DESCRIPTION:
+--
+--  This subprogram prints the offset of the address TO_BE_PRINTED 
+--  from the first byte of AREA_1.
+--
+--  NOTE:
+--
+--  This subprogram is used because the actual address of AREA_1
+--  varies based upon the size of the executable, the target board,
+--  and the target processor.
+--
+
+   procedure PUT_ADDRESS_FROM_AREA_1 (
+      TO_BE_PRINTED : in     RTEMS.ADDRESS
+   );
+
+--
+--  PUT_ADDRESS_FROM_AREA_2
+--
+--  DESCRIPTION:
+--
+--  This subprogram prints the offset of the address TO_BE_PRINTED 
+--  from the first byte of AREA_2.
+--
+--  NOTE:
+--
+--  This subprogram is used because the actual address of AREA_2
+--  varies based upon the size of the executable, the target board,
+--  and the target processor.
+--
+
+   procedure PUT_ADDRESS_FROM_AREA_2 (
+      TO_BE_PRINTED : in     RTEMS.ADDRESS
+   );
+
+--
+--  PUT_ADDRESS_FROM_AREA_3
+--
+--  DESCRIPTION:
+--
+--  This subprogram prints the offset of the address TO_BE_PRINTED 
+--  from the first byte of AREA_3.
+--
+--  NOTE:
+--
+--  This subprogram is used because the actual address of AREA_3
+--  varies based upon the size of the executable, the target board,
+--  and the target processor.
+--
+
+   procedure PUT_ADDRESS_FROM_AREA_3 (
+      TO_BE_PRINTED : in     RTEMS.ADDRESS
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Region Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_2
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Region Manager.
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_3
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Region Manager.
+--
+
+   procedure TASK_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_4
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Region Manager.
+--
+
+   procedure TASK_4 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_5
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Region Manager.
+--
+
+   procedure TASK_5 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      3,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      100                        -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp17/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp17/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp17/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,173 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 17 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:42:14 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 17 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+
+      SPTEST.TASK_2_PREEMPTED := FALSE;
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         2, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 2 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 2 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA2" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 2 ),
+         SPTEST.TASK_2'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA2" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  PROCESS_ASR
+--
+
+   procedure PROCESS_ASR (
+      SIGNALS : in     RTEMS.SIGNAL_SET
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.TASK_RESUME( SPTEST.TASK_ID( 2 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "ASR - TASK_RESUME OF TA2" );
+
+   end PROCESS_ASR;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT_LINE( "TA1 - signal_catch: initializing signal catcher" );
+      RTEMS.SIGNAL_CATCH( 
+         SPTEST.PROCESS_ASR'ACCESS, 
+         RTEMS.NO_ASR + RTEMS.NO_PREEMPT,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_CATCH" );
+
+      TEXT_IO.PUT_LINE( "TA1 - Sending signal to self" );
+      RTEMS.SIGNAL_SEND( 
+         SPTEST.TASK_ID( 1 ),
+         RTEMS.SIGNAL_16,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "SIGNAL_SEND" );
+
+      if SPTEST.TASK_2_PREEMPTED = TRUE then
+         TEXT_IO.PUT_LINE( "TA1 - TA2 correctly preempted me" );
+      end if;
+
+      TEXT_IO.PUT_LINE( "TA1 - Got Back!!!" );
+     
+      TEXT_IO.PUT_LINE( "*** END OF TEST 17 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+   
+   end TASK_1;
+
+--PAGE
+-- 
+--  TASK_2
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      SPTEST.TASK_2_PREEMPTED := FALSE;
+
+      TEXT_IO.PUT_LINE( "TA2 - Suspending self" );
+      RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+
+      TEXT_IO.PUT_LINE( "TA2 - signal_return preempted correctly" );
+
+      SPTEST.TASK_2_PREEMPTED := TRUE;
+
+      RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND OF TA2" );
+
+   end TASK_2;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp17/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp17/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp17/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,148 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 17 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:42:15 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  The following is set to TRUE by TASK_2 when it preempts TASK_1.
+--
+
+   TASK_2_PREEMPTED : RTEMS.BOOLEAN;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  PROCESS_ASR
+--
+--  DESCRIPTION:
+--
+--  This subprogram is the ASR for TASK_1.
+--
+
+   procedure PROCESS_ASR (
+      SIGNALS : in     RTEMS.SIGNAL_SET
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests that when the transfer from the task
+--  to the ASR (and vice-versa) is performed, that the new mode 
+--  is taken into account.  If this occurs, then TASK_2 will be 
+--  able to preempt upon completion of the ASR of TASK_1.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_2
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task is designed to preempt TASK_1.
+--
+
+   procedure TASK_2 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(25), -- # us in a tick
+      1000                       -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp19/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp19/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp19/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,157 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 19 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:42:21 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 6 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 6 ) of RTEMS.NAME;
+
+--
+--  This array contains the floating point factors used by the
+--  floating point tasks in this test.
+--
+
+   FP_FACTORS : array ( RTEMS.UNSIGNED32 range 0 .. 9 ) of FLOAT;
+
+--
+--  This array contains the integer factors used by the
+--  integer tasks in this test.
+--
+
+   INTEGER_FACTORS : array ( RTEMS.UNSIGNED32 range 0 .. 9 ) of 
+      RTEMS.UNSIGNED32;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  FIRST_FP_TASK
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the restart and deletion of floating point tasks.
+--
+
+   procedure FIRST_FP_TASK (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  FP_TASK
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the basic capabilities of a floating point
+--  task.
+--
+
+   procedure FP_TASK (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task provides a non-floating point task to test
+--  that an application can utilize a mixture of floating point
+--  and non-floating point tasks.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      50                         -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp20/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp20/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp20/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,282 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 20 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:42:24 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      INDEX  : RTEMS.UNSIGNED32;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 20 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
+      SPTEST.TASK_NAME( 4 ) := RTEMS.BUILD_NAME(  'T', 'A', '4', ' ' );
+      SPTEST.TASK_NAME( 5 ) := RTEMS.BUILD_NAME(  'T', 'A', '5', ' ' );
+
+      for INDEX in 1 .. 5
+      loop
+
+         SPTEST.COUNT( INDEX ) := 0;
+
+         RTEMS.TASK_CREATE( 
+            SPTEST.TASK_NAME( INDEX ), 
+            SPTEST.PRIORITIES( INDEX ), 
+            4096, 
+            RTEMS.DEFAULT_MODES,
+            RTEMS.DEFAULT_ATTRIBUTES,
+            SPTEST.TASK_ID( INDEX ),
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+      end loop;
+
+      for INDEX in 1 .. 5
+      loop
+
+         RTEMS.TASK_START(
+            SPTEST.TASK_ID( INDEX ),
+            SPTEST.TASK_1_THROUGH_5'ACCESS,
+            RTEMS.TASK_ARGUMENT( INDEX ),
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+ 
+      end loop;
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  TASK_1_THROUGH_5
+--
+
+   procedure TASK_1_THROUGH_5 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      RMID      : RTEMS.ID;
+      TEST_RMID : RTEMS.ID;
+      INDEX     : RTEMS.UNSIGNED32;
+      PASS      : RTEMS.UNSIGNED32;
+      FAILED    : RTEMS.UNSIGNED32;
+      STATUS    : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.RATE_MONOTONIC_CREATE( ARGUMENT, RMID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_CREATE" );
+      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
+      TEXT_IO.PUT( "- rate_monotonic_create id = " );
+      UNSIGNED32_IO.PUT( RMID, WIDTH => 8, BASE => 16 );
+      TEXT_IO.NEW_LINE;
+ 
+      RTEMS.RATE_MONOTONIC_IDENT( ARGUMENT, TEST_RMID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "RATE_MONOTONIC_IDENT" );
+      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
+      TEXT_IO.PUT( "- rate_monotonic_ident id = " );
+      UNSIGNED32_IO.PUT( RMID, WIDTH => 8, BASE => 16 );
+      TEXT_IO.NEW_LINE;
+      if TEST_RMID /= RMID then
+         TEXT_IO.PUT_LINE( "RMID's DO NOT MATCH!!!" );
+         RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+      end if; 
+
+      TEST_SUPPORT.PUT_NAME( SPTEST.TASK_NAME( INTEGER( ARGUMENT ) ), FALSE );
+      TEXT_IO.PUT( " - (" );
+      UNSIGNED32_IO.PUT( RMID, WIDTH => 1, BASE => 16 );
+      TEXT_IO.PUT( ") period " );
+      UNSIGNED32_IO.PUT( 
+         SPTEST.PERIODS( INTEGER( ARGUMENT ) ), 
+         WIDTH => 1, 
+         BASE => 10 
+      );
+      TEXT_IO.NEW_LINE;
+       
+      RTEMS.TASK_WAKE_AFTER( 2, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+   
+      case ARGUMENT is
+         when 1 .. 4 =>
+            loop
+               RTEMS.RATE_MONOTONIC_PERIOD( 
+                  RMID, 
+                  SPTEST.PERIODS( INTEGER( ARGUMENT ) ), 
+                  STATUS
+               );
+
+               TEST_SUPPORT.DIRECTIVE_FAILED( 
+                  STATUS, 
+                  "RATE_MONOTONIC_PERIOD" 
+               );
+
+               SPTEST.COUNT( INTEGER( ARGUMENT ) ) := 
+                  SPTEST.COUNT( INTEGER( ARGUMENT ) ) + 1;
+
+            end loop;
+
+         when 5 =>
+
+            PASS   := 0;
+            FAILED := 0;
+
+            RTEMS.RATE_MONOTONIC_PERIOD( 
+               RMID, 
+               SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
+               STATUS
+            );
+
+            TEST_SUPPORT.DIRECTIVE_FAILED( 
+               STATUS, 
+               "RATE_MONOTONIC_PERIOD 1 OF TA5" 
+            );
+
+            SPTEST.GET_ALL_COUNTERS;
+
+            loop
+
+               RTEMS.RATE_MONOTONIC_PERIOD( 
+                  RMID, 
+                  SPTEST.PERIODS( INTEGER( ARGUMENT ) ),
+                  STATUS
+               );
+
+               TEST_SUPPORT.DIRECTIVE_FAILED( 
+                  STATUS, 
+                  "RATE_MONOTONIC_PERIOD 2 OF TA5" 
+               );
+
+               SPTEST.GET_ALL_COUNTERS;
+
+               for INDEX in 1 .. 4 
+               loop
+
+                  if SPTEST.TEMPORARY_COUNT( INDEX ) /= 
+                        SPTEST.ITERATIONS( INDEX ) then
+
+                     TEXT_IO.PUT( "FAIL -- " );
+                     TEST_SUPPORT.PUT_NAME( 
+                        SPTEST.TASK_NAME( INDEX ),
+                        FALSE
+                     );
+                     TEXT_IO.PUT( "ACTUAL=" );
+                     UNSIGNED32_IO.PUT( 
+                        SPTEST.TEMPORARY_COUNT( INDEX ), 
+                        WIDTH => 3, 
+                        BASE => 10 
+                     );
+                     TEXT_IO.PUT( " EXPECTED=" );
+                     UNSIGNED32_IO.PUT( 
+                        SPTEST.ITERATIONS( INDEX ), 
+                        WIDTH => 3, 
+                        BASE => 10 
+                     );
+                     TEXT_IO.NEW_LINE;
+
+                     FAILED := FAILED + 1;
+
+                  end if;
+
+               end loop;
+
+               if FAILED = 5 then
+                  RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+               end if;
+
+               PASS := PASS + 1;
+               TEXT_IO.PUT( "TA5 - PERIODS CHECK OK (" );
+               UNSIGNED32_IO.PUT( PASS, WIDTH => 1, BASE => 10 );
+               TEXT_IO.PUT_LINE( ")" );
+ 
+               if PASS = 10 then
+                  TEXT_IO.PUT_LINE( "*** END OF TEST 20 ***" );
+                  RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+               end if;
+
+            end loop;
+ 
+         when others =>
+            NULL;
+            
+      end case;
+
+   end TASK_1_THROUGH_5;
+
+--PAGE
+-- 
+--  GET_ALL_COUNTERS
+--
+
+   procedure GET_ALL_COUNTERS
+   is
+      PREVIOUS_MODE : RTEMS.MODE;
+      STATUS        : RTEMS.STATUS_CODES;
+      INDEX         : RTEMS.UNSIGNED32;
+   begin
+
+      RTEMS.TASK_MODE(
+         RTEMS.NO_PREEMPT,
+         RTEMS.PREEMPT_MASK,
+         PREVIOUS_MODE,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE TO NO_PREEMPT" );
+
+      SPTEST.TEMPORARY_COUNT := SPTEST.COUNT;
+
+      for INDEX in 1 .. 5
+      loop
+
+         SPTEST.COUNT( INDEX ) := 0;
+
+      end loop;
+      
+      RTEMS.TASK_MODE(
+         RTEMS.PREEMPT,
+         RTEMS.PREEMPT_MASK,
+         PREVIOUS_MODE,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_MODE TO PREEMPT" );
+
+   end GET_ALL_COUNTERS;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp20/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp20/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp20/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,160 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 20 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:42:25 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( 1 .. 5 ) of RTEMS.ID;
+   TASK_NAME : array ( 1 .. 5 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the parameters which define the execution
+--  characteristics and periods of each instantiation of the 
+--  copies of the RTEMS task TASKS_1_THROUGH_5.
+--
+
+   PERIODS : constant array ( 1 .. 5 ) 
+     of RTEMS.UNSIGNED32 := ( 2, 2, 2, 2, 100 );
+
+   ITERATIONS : constant array ( 1 .. 5 ) 
+     of RTEMS.UNSIGNED32 := ( 50, 50, 50, 50, 1 );
+
+   PRIORITIES : constant array ( 1 .. 5 ) 
+     of RTEMS.UNSIGNED32 := ( 1, 1, 3, 4, 5 );
+
+--
+--  The following type defines the array used to manage the 
+--  execution counts of each task's period.
+--
+
+   type COUNT_ARRAY is array ( 1 .. 5 ) of RTEMS.UNSIGNED32;
+
+--
+--  These arrays contains the number of periods successfully completed
+--  by each of the tasks.  At each of its periods, the fifth task
+--  will copy the contents of the COUNT array to TEMPORARY_COUNT,
+--  and clear the COUNT array.  The copy is performed to insure
+--  that no periods fire while it is verifying the correctness
+--  of the test's execution.
+--
+
+   COUNT           : SPTEST.COUNT_ARRAY;
+   TEMPORARY_COUNT : SPTEST.COUNT_ARRAY;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_1_THROUGH_5
+--
+--  DESCRIPTION:
+--
+--  These RTEMS tasks test the Rate Monotonic Manager.
+--
+
+   procedure TASK_1_THROUGH_5 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  GET_ALL_COUNTERS
+--
+--  DESCRIPTION:
+--
+--  This subprogram atomically copies the contents of COUNTER to
+--  TEMPORARY_COUNTER.
+--
+
+   procedure GET_ALL_COUNTERS;
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       10,                                            -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      10,                        -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      50                         -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp21/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp21/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp21/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,270 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 21 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:42:28 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 21 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      RETURN_VALUE : RTEMS.UNSIGNED32;
+      STATUS       : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.PUT_LINE( "----- TESTING THE NULL DRIVER CHECKS -----" );
+
+      RTEMS.IO_INITIALIZE( 
+         SPTEST.NO_DRIVER_MAJOR,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RETURN_VALUE,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_INITIALIZE" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_initialize - NULL DRIVER SUCCESSFUL"
+      );
+   
+      RTEMS.IO_OPEN( 
+         SPTEST.NO_DRIVER_MAJOR,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RETURN_VALUE,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_OPEN" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_open       - NULL DRIVER SUCCESSFUL"
+      );
+   
+      RTEMS.IO_CLOSE( 
+         SPTEST.NO_DRIVER_MAJOR,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RETURN_VALUE,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_CLOSE" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_close      - NULL DRIVER SUCCESSFUL"
+      );
+   
+      RTEMS.IO_READ( 
+         SPTEST.NO_DRIVER_MAJOR,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RETURN_VALUE,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_READ" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_read       - NULL DRIVER SUCCESSFUL"
+      );
+   
+      RTEMS.IO_WRITE( 
+         SPTEST.NO_DRIVER_MAJOR,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RETURN_VALUE,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_WRITE" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_write      - NULL DRIVER SUCCESSFUL"
+      );
+   
+      RTEMS.IO_CONTROL( 
+         SPTEST.NO_DRIVER_MAJOR,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RETURN_VALUE,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_CONTROL" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_control    - NULL DRIVER SUCCESSFUL"
+      );
+   
+      TEXT_IO.PUT_LINE( "----- TESTING THE I/O MANAGER DIRECTIVES -----" );
+
+      RTEMS.IO_INITIALIZE( 
+         SPTEST.STUB_DRIVER_MAJOR,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RETURN_VALUE,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_INITIALIZE" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_initialize - STUB DRIVER SUCCESSFUL"
+      );
+   
+      RTEMS.IO_OPEN( 
+         SPTEST.STUB_DRIVER_MAJOR,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RETURN_VALUE,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_OPEN" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_open       - STUB DRIVER SUCCESSFUL"
+      );
+   
+      RTEMS.IO_CLOSE( 
+         SPTEST.STUB_DRIVER_MAJOR,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RETURN_VALUE,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_CLOSE" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_close      - STUB DRIVER SUCCESSFUL"
+      );
+   
+      RTEMS.IO_READ( 
+         SPTEST.STUB_DRIVER_MAJOR,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RETURN_VALUE,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_READ" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_read       - STUB DRIVER SUCCESSFUL"
+      );
+   
+      RTEMS.IO_WRITE( 
+         SPTEST.STUB_DRIVER_MAJOR,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RETURN_VALUE,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_WRITE" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_write      - STUB DRIVER SUCCESSFUL"
+      );
+   
+      RTEMS.IO_CONTROL( 
+         SPTEST.STUB_DRIVER_MAJOR,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RETURN_VALUE,
+         STATUS 
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "IO_CONTROL" );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_control    - STUB DRIVER SUCCESSFUL"
+      );
+
+      TEXT_IO.PUT_LINE( "----- RETURNING INVALID MAJOR NUMBER -----" );
+
+      RTEMS.IO_INITIALIZE( 
+         SPTEST.INVALID_DRIVER_MAJOR,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RETURN_VALUE,
+         STATUS 
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
+         STATUS,
+         RTEMS.INVALID_NUMBER, 
+         "IO_INITIALIZE" 
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_initialize - INVALID_NUMBER"
+      );
+   
+      RTEMS.IO_OPEN( 
+         SPTEST.INVALID_DRIVER_MAJOR,
+         0,
+         RTEMS.NULL_ADDRESS,
+         RETURN_VALUE,
+         STATUS 
+      );
+      TEST_SUPPORT.FATAL_DIRECTIVE_STATUS( 
+         STATUS,
+         RTEMS.INVALID_NUMBER, 
+         "IO_OPEN" 
+      );
+      TEXT_IO.PUT_LINE(
+         "TA1 - io_open       - INVALID_NUMBER"
+      );
+   
+      TEXT_IO.PUT_LINE( "*** END OF TEST 21 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+   
+   end TASK_1;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp21/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp21/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp21/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,141 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 21 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:42:29 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+with STUB_DRIVER;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  The following constants define the device major numbers
+--  utilized by this test.
+--
+
+   NO_DRIVER_MAJOR      : constant RTEMS.DEVICE_MAJOR_NUMBER := 3; 
+   INVALID_DRIVER_MAJOR : constant RTEMS.DEVICE_MAJOR_NUMBER := 5;
+   STUB_DRIVER_MAJOR    : constant RTEMS.DEVICE_MAJOR_NUMBER := 2;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Input Output Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 3 ) :=
+   (
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      ),
+      (
+        STUB_DRIVER.INITIALIZE'ACCESS,               -- Initialization
+        STUB_DRIVER.OPEN'ACCESS,                     -- Open
+        STUB_DRIVER.CLOSE'ACCESS,                    -- Close
+        STUB_DRIVER.READ'ACCESS,                     -- Read
+        STUB_DRIVER.WRITE'ACCESS,                    -- Write
+        STUB_DRIVER.CONTROL'ACCESS                   -- Control
+      ),
+      (
+        RTEMS.NO_DRIVER_ENTRY,                       -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      50                         -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp22/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp22/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp22/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,299 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 22 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:42:34 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 22 ***" );
+
+      TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
+
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+      SPTEST.TASK_NAME( 1 )  := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      TEXT_IO.PUT_LINE( "INIT - timer_create - creating timer 1" );
+      RTEMS.TIMER_CREATE(
+         SPTEST.TIMER_NAME( 1 ), 
+         SPTEST.TIMER_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE OF TM1" );
+      TEXT_IO.PUT( "INIT - timer 1 has id (" );
+      UNSIGNED32_IO.PUT( SPTEST.TIMER_ID( 1 ), WIDTH => 8, BASE => 16 );
+      TEXT_IO.PUT_LINE( ")" );
+      
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  DELAYED_RESUME
+--
+
+   procedure DELAYED_RESUME (
+      IGNORED_ID      : in     RTEMS.ID;
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.TASK_RESUME( SPTEST.TASK_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME OF SELF" );
+
+   end DELAYED_RESUME;
+
+--PAGE
+-- 
+--  PRINT_TIME
+--
+
+   procedure PRINT_TIME 
+   is
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+      TEST_SUPPORT.PUT_NAME( 
+         SPTEST.TASK_NAME( 1 ),
+         FALSE
+      );
+
+      TEST_SUPPORT.PRINT_TIME( "- clock_get - ", TIME, "" );
+      TEXT_IO.NEW_LINE;
+
+   end PRINT_TIME;
+   
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      TMID   : RTEMS.ID;
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+-- GET ID
+
+      TEXT_IO.PUT_LINE( "TA1 - timer_ident - identing timer 1" );
+      RTEMS.TIMER_IDENT( SPTEST.TIMER_NAME( 1 ), TMID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_IDENT OF TM1" );
+      TEXT_IO.PUT( "TA1 - timer 1 has id (" );
+      UNSIGNED32_IO.PUT( SPTEST.TIMER_ID( 1 ), WIDTH => 8, BASE => 16 );
+      TEXT_IO.PUT_LINE( ")" );
+   
+-- AFTER WHICH IS ALLOWED TO FIRE
+
+      SPTEST.PRINT_TIME;
+
+      TEXT_IO.PUT_LINE( "TA1 - timer_after - timer 1 in 3 seconds" );
+      RTEMS.TIMER_FIRE_AFTER( 
+         TMID, 
+         3 * TEST_SUPPORT.TICKS_PER_SECOND,
+         SPTEST.DELAYED_RESUME'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_suspend( SELF )" );
+      RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+          
+      SPTEST.PRINT_TIME;
+
+-- AFTER WHICH IS RESET AND ALLOWED TO FIRE
+
+      TEXT_IO.PUT_LINE( "TA1 - timer_after - timer 1 in 3 seconds" );
+      RTEMS.TIMER_FIRE_AFTER( 
+         TMID, 
+         3 * TEST_SUPPORT.TICKS_PER_SECOND,
+         SPTEST.DELAYED_RESUME'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - 1 second" );
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+          
+      SPTEST.PRINT_TIME;
+
+      TEXT_IO.PUT_LINE( "TA1 - timer_reset - timer 1" );
+      RTEMS.TIMER_RESET( TMID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_RESET" );
+          
+      TEXT_IO.PUT_LINE( "TA1 - task_suspend( SELF )" );
+      RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+
+      SPTEST.PRINT_TIME;
+
+TEST_SUPPORT.PAUSE;
+
+-- 
+-- Reset the time since we do not know how long the user waited
+-- before pressing <cr> at the pause.  This insures that the
+-- actual output matches the screen.
+--
+
+      TIME := ( 1988, 12, 31, 9, 0, 7, 0 );
+
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+-- after which is canceled
+
+      TEXT_IO.PUT_LINE( "TA1 - timer_after - timer 1 in 3 seconds" );
+      RTEMS.TIMER_FIRE_AFTER( 
+         TMID, 
+         3 * TEST_SUPPORT.TICKS_PER_SECOND,
+         SPTEST.DELAYED_RESUME'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+      TEXT_IO.PUT_LINE( "TA1 - timer_cancel - timer 1" );
+      RTEMS.TIMER_CANCEL( TMID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+          
+-- when which is allowed to fire
+
+      SPTEST.PRINT_TIME;
+
+      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+      TIME.SECOND := TIME.SECOND + 3;
+
+      TEXT_IO.PUT_LINE( "TA1 - timer_when - timer 1 in 3 seconds" );
+      RTEMS.TIMER_FIRE_WHEN( 
+         TMID, 
+         TIME,
+         SPTEST.DELAYED_RESUME'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_suspend( SELF )" );
+      RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+
+      SPTEST.PRINT_TIME;
+
+-- when which is canceled
+
+      RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+      TIME.SECOND := TIME.SECOND + 3;
+
+      TEXT_IO.PUT_LINE( "TA1 - timer_when - timer 1 in 3 seconds" );
+      RTEMS.TIMER_FIRE_WHEN( 
+         TMID, 
+         TIME,
+         SPTEST.DELAYED_RESUME'ACCESS,
+         RTEMS.NULL_ADDRESS,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_WHEN" );
+
+      TEXT_IO.PUT_LINE( "TA1 - task_wake_after - 1 second" );
+      RTEMS.TASK_WAKE_AFTER( TEST_SUPPORT.TICKS_PER_SECOND, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER" );
+          
+      SPTEST.PRINT_TIME;
+
+      TEXT_IO.PUT_LINE( "TA1 - timer_cancel - timer 1" );
+      RTEMS.TIMER_CANCEL( TMID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CANCEL" );
+          
+-- delete
+          
+      TEXT_IO.PUT_LINE(
+         "TA1 - task_wake_after - YIELD (only task at priority)"
+      );
+      RTEMS.TASK_WAKE_AFTER( RTEMS.YIELD_PROCESSOR, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_WAKE_AFTER YIELD" );
+          
+      TEXT_IO.PUT_LINE( "TA1 - timer_delete - timer 1" );
+      RTEMS.TIMER_DELETE( TMID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_DELETE" );
+          
+      TEXT_IO.PUT_LINE( "*** END OF TEST 22 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+   
+   end TASK_1;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp22/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp22/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp22/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,147 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 22 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:42:35 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS timers created
+--  by this test.
+--
+
+   TIMER_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+   TIMER_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  DELAYED_RESUME
+--
+--  DESCRIPTION:
+--
+--  This subprogram is scheduled to be fired as a timer service
+--  routine.  When fired this subprogram resumes TASK_1.
+--
+
+   procedure DELAYED_RESUME (
+      IGNORED_ID      : in     RTEMS.ID;  
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS 
+   );
+
+--
+--  PRINT_TIME
+--
+--  DESCRIPTION:
+--
+--  This subprogram prints the name of TASK_1 and the current TIME of day.
+--
+
+   procedure PRINT_TIME;
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Timer Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      1,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      50                         -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp23/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp23/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp23/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,179 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 23 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:42:38 joel Exp
+--
+
+with ADDRESS_IO;
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      INTERNAL_AREA : RTEMS.ADDRESS;
+      EXTERNAL_AREA : RTEMS.ADDRESS;
+      STATUS        : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 23 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         1, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      SPTEST.PORT_NAME( 1 ) := RTEMS.BUILD_NAME(  'D', 'P', '1', ' ' );
+
+      INTERNAL_AREA := SPTEST.INTERNAL_PORT_AREA( 0 )'ADDRESS;
+      EXTERNAL_AREA := SPTEST.EXTERNAL_PORT_AREA( 0 )'ADDRESS;
+      RTEMS.PORT_CREATE(
+         SPTEST.PORT_NAME( 1 ), 
+         INTERNAL_AREA,
+         EXTERNAL_AREA,
+         SPTEST.INTERNAL_PORT_AREA'LENGTH,
+         SPTEST.PORT_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_CREATE OF DP1" );
+      TEXT_IO.PUT( "INIT - port_create - DP1 - internal = " );
+      ADDRESS_IO.PUT( INTERNAL_AREA, WIDTH => 8, BASE => 16 );
+      TEXT_IO.PUT( " external =  " );
+      ADDRESS_IO.PUT( EXTERNAL_AREA, WIDTH => 8, BASE => 16 );
+      TEXT_IO.NEW_LINE;
+   
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      DPID            : RTEMS.ID;
+      TO_BE_CONVERTED : RTEMS.ADDRESS; 
+      CONVERTED       : RTEMS.ADDRESS; 
+      STATUS          : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.PORT_IDENT( SPTEST.PORT_NAME( 1 ), DPID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_IDENT" );
+      TEXT_IO.PUT( "TA1 - port_ident - " );
+      UNSIGNED32_IO.PUT( DPID, WIDTH => 8, BASE => 16 );
+      TEXT_IO.NEW_LINE;
+
+      TO_BE_CONVERTED :=  SPTEST.EXTERNAL_PORT_AREA( 16#E# )'ADDRESS;
+      RTEMS.PORT_EXTERNAL_TO_INTERNAL(
+         SPTEST.PORT_ID( 1 ),
+         TO_BE_CONVERTED,
+         CONVERTED,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_EXTERNAL_TO_INTERNAL" );
+      TEXT_IO.PUT( "TA1 - port_external_to_internal - external: " );
+      ADDRESS_IO.PUT( TO_BE_CONVERTED, WIDTH => 8, BASE => 16 );
+      TEXT_IO.PUT( " => internal: " );
+      ADDRESS_IO.PUT( CONVERTED, WIDTH => 8, BASE => 16 );
+      TEXT_IO.NEW_LINE;
+   
+      TO_BE_CONVERTED :=  SPTEST.INTERNAL_PORT_AREA( 16#E# )'ADDRESS;
+      RTEMS.PORT_INTERNAL_TO_EXTERNAL(
+         SPTEST.PORT_ID( 1 ),
+         TO_BE_CONVERTED,
+         CONVERTED,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_INTERNAL_TO_EXTERNAL" );
+      TEXT_IO.PUT( "TA1 - port_internal_to_external - internal: " );
+      ADDRESS_IO.PUT( TO_BE_CONVERTED, WIDTH => 8, BASE => 16 );
+      TEXT_IO.PUT( " => external: " );
+      ADDRESS_IO.PUT( CONVERTED, WIDTH => 8, BASE => 16 );
+      TEXT_IO.NEW_LINE;
+   
+      TO_BE_CONVERTED :=  SPTEST.ABOVE_PORT_AREA( 16#E# )'ADDRESS;
+      RTEMS.PORT_EXTERNAL_TO_INTERNAL(
+         SPTEST.PORT_ID( 1 ),
+         TO_BE_CONVERTED,
+         CONVERTED,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_EXTERNAL_TO_INTERNAL" );
+      TEXT_IO.PUT( "TA1 - port_external_to_internal - external: " );
+      ADDRESS_IO.PUT( TO_BE_CONVERTED, WIDTH => 8, BASE => 16 );
+      TEXT_IO.PUT( " => internal: " );
+      ADDRESS_IO.PUT( CONVERTED, WIDTH => 8, BASE => 16 );
+      TEXT_IO.NEW_LINE;
+   
+      TO_BE_CONVERTED :=  SPTEST.BELOW_PORT_AREA( 16#E# )'ADDRESS;
+      RTEMS.PORT_INTERNAL_TO_EXTERNAL(
+         SPTEST.PORT_ID( 1 ),
+         TO_BE_CONVERTED,
+         CONVERTED,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_INTERNAL_TO_EXTERNAL" );
+      TEXT_IO.PUT( "TA1 - port_internal_to_external - internal: " );
+      ADDRESS_IO.PUT( TO_BE_CONVERTED, WIDTH => 8, BASE => 16 );
+      TEXT_IO.PUT( " => external: " );
+      ADDRESS_IO.PUT( CONVERTED, WIDTH => 8, BASE => 16 );
+      TEXT_IO.NEW_LINE;
+   
+      TEXT_IO.PUT_LINE( "TA1 - port_delete - DP1" );
+      RTEMS.PORT_DELETE( SPTEST.PORT_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "PORT_DELETE" );
+
+      TEXT_IO.PUT_LINE( "*** END OF TEST 23 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+   end TASK_1;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp23/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp23/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp23/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,173 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 23 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:42:39 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+with SYSTEM;
+with System.Storage_Elements;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS ports created
+--  by this test.
+--
+
+   PORT_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.ID;
+   PORT_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 1 ) of RTEMS.NAME;
+
+--
+--  The following area defines a memory area to be used as the
+--  internal address space of the port.
+-- 
+
+   INTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
+       System.Storage_Elements.To_Address(16#00001000#);
+
+   INTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+      of RTEMS.UNSIGNED8;
+   for INTERNAL_PORT_AREA use at INTERNAL_PORT_AREA_ADDRESS;
+
+--
+--  The following area defines a memory area to be used as the
+--  external address space of the port.
+-- 
+
+   EXTERNAL_PORT_AREA_ADDRESS : constant System.Address :=
+       System.Storage_Elements.To_Address(16#00002000#);
+
+   EXTERNAL_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+      of RTEMS.UNSIGNED8;
+   for EXTERNAL_PORT_AREA use at EXTERNAL_PORT_AREA_ADDRESS;
+
+--
+--  The following area defines a memory area to be used for 
+--  addresses which are below the address space of the port.
+-- 
+
+   BELOW_PORT_AREA_ADDRESS : constant System.Address :=
+       System.Storage_Elements.To_Address(16#00000500#);
+
+   BELOW_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+      of RTEMS.UNSIGNED8;
+   for BELOW_PORT_AREA use at BELOW_PORT_AREA_ADDRESS;
+
+--
+--  The following area defines a memory area to be used for 
+--  addresses which are above the address space of the port.
+-- 
+
+   ABOVE_PORT_AREA_ADDRESS : constant System.Address :=
+       System.Storage_Elements.To_Address(16#00003000#);
+
+   ABOVE_PORT_AREA : array ( RTEMS.UNSIGNED32 range 0 .. 255 )
+      of RTEMS.UNSIGNED8;
+   for ABOVE_PORT_AREA use at ABOVE_PORT_AREA_ADDRESS;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Dual Ported Memory Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      2,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      1,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      50                         -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp24/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp24/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp24/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,171 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 24 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:42:43 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with TEST_SUPPORT;
+with TEXT_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      TIME   : RTEMS.TIME_OF_DAY;
+      INDEX  : RTEMS.UNSIGNED32;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 24 ***" );
+
+      TIME := ( 1988, 12, 31, 9, 0, 0, 0 );
+
+      RTEMS.CLOCK_SET( TIME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_SET" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+      SPTEST.TASK_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'A', '2', ' ' );
+      SPTEST.TASK_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'A', '3', ' ' );
+
+      SPTEST.TIMER_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'M', '1', ' ' );
+      SPTEST.TIMER_NAME( 2 ) := RTEMS.BUILD_NAME(  'T', 'M', '2', ' ' );
+      SPTEST.TIMER_NAME( 3 ) := RTEMS.BUILD_NAME(  'T', 'M', '3', ' ' );
+
+      for INDEX in 1 .. 3
+      loop
+
+         RTEMS.TASK_CREATE( 
+            SPTEST.TASK_NAME( INDEX ), 
+            1, 
+            2048, 
+            RTEMS.DEFAULT_MODES,
+            RTEMS.DEFAULT_ATTRIBUTES,
+            SPTEST.TASK_ID( INDEX ),
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE LOOP" );
+
+         RTEMS.TIMER_CREATE(
+            SPTEST.TIMER_NAME( INDEX ), 
+            SPTEST.TIMER_ID( INDEX ),
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_CREATE LOOP" );
+
+      end loop;
+
+      for INDEX in 1 .. 3
+      loop
+
+         RTEMS.TASK_START(
+            SPTEST.TASK_ID( INDEX ),
+            SPTEST.TASK_1_THROUGH_3'ACCESS,
+            RTEMS.TASK_ARGUMENT( INDEX ),
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START LOOP" );
+
+      end loop;
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  RESUME_TASK
+--
+
+   procedure RESUME_TASK (
+      TIMER_ID        : in     RTEMS.ID;
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS
+   ) is
+      TASK_TO_RESUME : RTEMS.ID;
+      STATUS         : RTEMS.STATUS_CODES;
+   begin
+
+      TASK_TO_RESUME := SPTEST.TASK_ID(INTEGER( RTEMS.GET_INDEX( TIMER_ID ) ));
+      RTEMS.TASK_RESUME( TASK_TO_RESUME, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_RESUME" );
+
+   end RESUME_TASK;
+
+--PAGE
+-- 
+--  TASK_1_THROUGH_3
+--
+
+   procedure TASK_1_THROUGH_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      TID    : RTEMS.ID;
+      TIME   : RTEMS.TIME_OF_DAY;
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.TASK_IDENT( RTEMS.SELF, RTEMS.SEARCH_ALL_NODES, TID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_IDENT OF SELF" );
+   
+      loop
+
+         RTEMS.TIMER_FIRE_AFTER( 
+            SPTEST.TIMER_ID( INTEGER( ARGUMENT ) ), 
+            TEST_SUPPORT.TASK_NUMBER( TID ) * 5 * 
+              TEST_SUPPORT.TICKS_PER_SECOND, 
+            SPTEST.RESUME_TASK'ACCESS,
+            RTEMS.NULL_ADDRESS,
+            STATUS
+         );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TIMER_FIRE_AFTER" );
+
+         RTEMS.CLOCK_GET( RTEMS.CLOCK_GET_TOD, TIME'ADDRESS, STATUS );
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "CLOCK_GET" );
+
+         if TIME.SECOND >= 35 then
+            TEXT_IO.PUT_LINE( "*** END OF TEST 24 ***" );
+            RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+         end if;
+
+         TEST_SUPPORT.PUT_NAME( 
+            SPTEST.TASK_NAME( INTEGER( TEST_SUPPORT.TASK_NUMBER( TID ) ) ),
+            FALSE
+         );
+
+         TEST_SUPPORT.PRINT_TIME( " - clock_get - ", TIME, "" );
+         TEXT_IO.NEW_LINE;
+
+         RTEMS.TASK_SUSPEND( RTEMS.SELF, STATUS ); 
+         TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_SUSPEND" );
+          
+      end loop;
+   
+   end TASK_1_THROUGH_3;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp24/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp24/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp24/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,137 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 24 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:42:44 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( 1 .. 3 ) of RTEMS.ID;
+   TASK_NAME : array ( 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS timers created
+--  by this test.
+--
+
+   TIMER_ID   : array ( 1 .. 3 ) of RTEMS.ID;
+   TIMER_NAME : array ( 1 .. 3 ) of RTEMS.NAME;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  RESUME_TASK
+--
+--  DESCRIPTION:
+--
+--  This subprogram is scheduled as a timer service routine.  When
+--  it fires it resumes the task which is mapped to this timer.
+--
+
+   procedure RESUME_TASK (
+      TIMER_ID        : in     RTEMS.ID;
+      IGNORED_ADDRESS : in     RTEMS.ADDRESS 
+   );
+
+--
+--  TASK_1_THROUGH_3
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Timer Manager.
+--
+
+   procedure TASK_1_THROUGH_3 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      3,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      50                         -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp25/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/sp25/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp25/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,368 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 25 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.3 1995/07/12 19:42:47 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_TEST_SUPPORT;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST 25 ***" );
+
+      SPTEST.TASK_NAME( 1 ) := RTEMS.BUILD_NAME(  'T', 'A', '1', ' ' );
+
+      RTEMS.TASK_CREATE( 
+         SPTEST.TASK_NAME( 1 ), 
+         SPTEST.BASE_PRIORITY, 
+         2048, 
+         RTEMS.DEFAULT_MODES,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.TASK_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE OF TA1" );
+
+      RTEMS.TASK_START(
+         SPTEST.TASK_ID( 1 ),
+         SPTEST.TASK_1'ACCESS,
+         0,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START OF TA1" );
+
+      SPTEST.REGION_NAME( 1 ) := RTEMS.BUILD_NAME(  'R', 'N', '1', ' ' );
+
+      RTEMS.REGION_CREATE(
+         SPTEST.REGION_NAME( 1 ), 
+         SPTEST.AREA_1'ADDRESS,
+         64000, 
+         32,
+         RTEMS.DEFAULT_ATTRIBUTES,
+         SPTEST.REGION_ID( 1 ),
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_CREATE OF RN1" );
+
+      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
+
+   end INIT;
+
+--PAGE
+-- 
+--  PUT_ADDRESS_FROM_AREA_1
+--
+
+   procedure PUT_ADDRESS_FROM_AREA_1 (
+      TO_BE_PRINTED : in     RTEMS.ADDRESS
+   ) is
+
+   begin
+
+      UNSIGNED32_IO.PUT(
+         RTEMS.SUBTRACT( TO_BE_PRINTED, SPTEST.AREA_1'ADDRESS ),
+         WIDTH => 8,
+         BASE => 16
+      );
+
+   end PUT_ADDRESS_FROM_AREA_1;
+
+--PAGE
+-- 
+--  TASK_1
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      RNID              : RTEMS.ID;
+      SEGMENT_ADDRESS_1 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_2 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_3 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_4 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_5 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_6 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_7 : RTEMS.ADDRESS;
+      SEGMENT_ADDRESS_8 : RTEMS.ADDRESS;
+      STATUS            : RTEMS.STATUS_CODES;
+   begin
+
+      RTEMS.REGION_IDENT( SPTEST.REGION_NAME( 1 ), RNID, STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_IDENT OF RN1" );
+      TEXT_IO.PUT( "TA1 - region_ident - rnid => " );
+      UNSIGNED32_IO.PUT( RNID, WIDTH => 8, BASE => 16 );
+      TEXT_IO.NEW_LINE;
+       
+      TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+      TEXT_IO.PUT_LINE( "64 byte segment from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         64,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+      TEXT_IO.PUT_LINE( "128 byte segment from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         128,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_2,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_2 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+      TEXT_IO.PUT_LINE( "256 byte segment from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         256,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_3,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_3 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+      TEXT_IO.PUT_LINE( "512 byte segment from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         512,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_4,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+      TEXT_IO.PUT_LINE( "1024 byte segment from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         1024,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_5,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_5 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+      TEXT_IO.PUT_LINE( "2048 byte segment from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         2048,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_6,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_6 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+      TEXT_IO.PUT_LINE( "4096 byte segment from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         4096,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_7,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_7 );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT( "TA1 - region_get_segment - wait on " );
+      TEXT_IO.PUT_LINE( "8192 byte segment from region 1" );
+      RTEMS.REGION_GET_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         8192,
+         RTEMS.DEFAULT_OPTIONS,
+         RTEMS.NO_TIMEOUT,
+         SEGMENT_ADDRESS_8,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_GET_SEGMENT" );
+      TEXT_IO.PUT( "TA1 - got segment from region 1 - " );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_8 );
+      TEXT_IO.NEW_LINE;
+
+TEST_SUPPORT.PAUSE;
+
+      TEXT_IO.PUT( 
+         "TA1 - region_return_segment - return segment to region 1 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_3 );
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_3,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.NEW_LINE;
+      SEGMENT_ADDRESS_3 := RTEMS.NULL_ADDRESS;
+
+      TEXT_IO.PUT( 
+         "TA1 - region_return_segment - return segment to region 1 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_4 );
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_4,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.NEW_LINE;
+      SEGMENT_ADDRESS_4 := RTEMS.NULL_ADDRESS;
+
+      TEXT_IO.PUT( 
+         "TA1 - region_return_segment - return segment to region 1 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_1 );
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_1,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.NEW_LINE;
+      SEGMENT_ADDRESS_1 := RTEMS.NULL_ADDRESS;
+
+      TEXT_IO.PUT( 
+         "TA1 - region_return_segment - return segment to region 1 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_2 );
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_2,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.NEW_LINE;
+      SEGMENT_ADDRESS_2 := RTEMS.NULL_ADDRESS;
+
+      TEXT_IO.PUT( 
+         "TA1 - region_return_segment - return segment to region 1 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_7 );
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_7,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.NEW_LINE;
+      SEGMENT_ADDRESS_7 := RTEMS.NULL_ADDRESS;
+
+      TEXT_IO.PUT( 
+         "TA1 - region_return_segment - return segment to region 1 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_6 );
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_6,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.NEW_LINE;
+      SEGMENT_ADDRESS_6 := RTEMS.NULL_ADDRESS;
+
+      TEXT_IO.PUT( 
+         "TA1 - region_return_segment - return segment to region 1 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_8 );
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_8,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.NEW_LINE;
+      SEGMENT_ADDRESS_8 := RTEMS.NULL_ADDRESS;
+
+      TEXT_IO.PUT( 
+         "TA1 - region_return_segment - return segment to region 1 - "
+      );
+      SPTEST.PUT_ADDRESS_FROM_AREA_1( SEGMENT_ADDRESS_5 );
+      RTEMS.REGION_RETURN_SEGMENT(
+         SPTEST.REGION_ID( 1 ),
+         SEGMENT_ADDRESS_5,
+         STATUS
+      );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_RETURN_SEGMENT" );
+      TEXT_IO.NEW_LINE;
+      SEGMENT_ADDRESS_5 := RTEMS.NULL_ADDRESS;
+
+      TEXT_IO.PUT_LINE(
+         "TA1 - region_delete - walks heap if debug enabled"
+      );
+      RTEMS.REGION_DELETE( SPTEST.REGION_ID( 1 ), STATUS );
+      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "REGION_DELETE OF RN1" );
+
+      TEXT_IO.PUT_LINE( "*** END OF TEST 25 ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+   end TASK_1;
+
+end SPTEST;
Index: c/src/ada-tests/sptests/sp25/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/sp25/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/sp25/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,158 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 25 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:42:48 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS tasks created
+--  by this test.
+--
+
+   TASK_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+   TASK_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+--  These arrays contain the IDs and NAMEs of all RTEMS regions created
+--  by this test.
+--
+
+   REGION_ID   : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.ID;
+   REGION_NAME : array ( RTEMS.UNSIGNED32 range 1 .. 2 ) of RTEMS.NAME;
+
+--
+--  The following constant defines the priority of most of the 
+--  RTEMS tasks in this test.  This allows one of the tasks to
+--  easily set itself to a higher priority than the rest.
+--
+
+   BASE_PRIORITY : constant RTEMS.TASK_PRIORITY := 140;
+
+--
+--  These arrays define the memory areas used for the regions in
+--  this test.
+--
+
+   AREA_1 : array ( RTEMS.UNSIGNED32 range 0 .. 64000 ) of RTEMS.UNSIGNED8;
+   for AREA_1'ALIGNMENT use RTEMS.STRUCTURE_ALIGNMENT;
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  PUT_ADDRESS_FROM_AREA_1
+--
+--  DESCRIPTION:
+--
+--  This subprogram prints the offset of the address TO_BE_PRINTED 
+--  from the first byte of AREA_1.
+--
+--  NOTE:
+--
+--  This subprogram is used because the actual address of AREA_1
+--  varies based upon the size of the executable, the target board,
+--  and the target processor.
+--
+
+   procedure PUT_ADDRESS_FROM_AREA_1 (
+      TO_BE_PRINTED : in     RTEMS.ADDRESS
+   );
+
+--
+--  TASK_1
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task tests the Region Manager.
+--
+
+   procedure TASK_1 (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      1,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      100                        -- # ticks in a timeslice
+  );
+
+end SPTEST;
Index: c/src/ada-tests/sptests/spsize/sptest.adb
===================================================================
--- c/src/ada-tests/sptests/spsize/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/spsize/sptest.adb	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,199 @@
+--
+--  SPTEST / BODY
+--
+--  DESCRIPTION:
+--
+--  This package is the implementation of Test 1 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.adb,v 1.2 1995/05/31 16:39:50 joel Exp
+--
+
+with INTERFACES; use INTERFACES;
+with RTEMS;
+with RTEMS_TEST_SUPPORT;
+with TEST_SUPPORT;
+with TEXT_IO;
+with UNSIGNED32_IO;
+
+package body SPTEST is
+
+
+--PAGE
+-- 
+--  INIT
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   ) is
+      STATUS : RTEMS.STATUS_CODES;
+   begin
+
+      TEXT_IO.NEW_LINE( 2 );
+      TEXT_IO.PUT_LINE( "*** TEST SIZE ***" );
+
+      SPTEST.PUT_SIZE(
+         "Tasks",
+         TRUE,
+         "maximum_tasks",
+         RTEMS_TEST_SUPPORT.PER_TASK
+      );
+
+      SPTEST.PUT_SIZE(
+         "Timers",
+         TRUE,
+         "maximum_timers",
+         RTEMS_TEST_SUPPORT.PER_TIMER
+      );
+
+      SPTEST.PUT_SIZE(
+         "Semaphores",
+         TRUE,
+         "maximum_semaphores",
+         RTEMS_TEST_SUPPORT.PER_SEMAPHORE
+      );
+
+      SPTEST.PUT_SIZE(
+         "Message Queues",
+         TRUE,
+         "maximum_message_queues",
+         RTEMS_TEST_SUPPORT.PER_MESSAGE_QUEUE
+      );
+
+      SPTEST.PUT_SIZE(
+         "Messages",
+         TRUE,
+         "maximum_messages",
+         RTEMS_TEST_SUPPORT.PER_MESSAGE
+      );
+
+      SPTEST.PUT_SIZE(
+         "Regions",
+         TRUE,
+         "maximum_regions",
+         RTEMS_TEST_SUPPORT.PER_REGION
+      );
+
+      SPTEST.PUT_SIZE(
+         "Partitions",
+         TRUE,
+         "maximum_paritions",
+         RTEMS_TEST_SUPPORT.PER_PARTITION
+      );
+
+      SPTEST.PUT_SIZE(
+         "Ports",
+         TRUE,
+         "maximum_ports",
+         RTEMS_TEST_SUPPORT.PER_PORT
+      );
+
+      SPTEST.PUT_SIZE(
+         "Periods",
+         TRUE,
+         "maximum_periods",
+         RTEMS_TEST_SUPPORT.PER_PERIOD
+      );
+
+      SPTEST.PUT_SIZE(
+         "Extensions",
+         TRUE,
+         "maximum_extensions",
+         RTEMS_TEST_SUPPORT.PER_EXTENSION
+      );
+
+      SPTEST.PUT_SIZE(
+         "Device Drivers",
+         TRUE,
+         "number_of_device_drivers",
+         RTEMS_TEST_SUPPORT.PER_DRIVER
+      );
+
+      SPTEST.PUT_SIZE(
+         "System Requirements",
+         FALSE,
+         REQUIREMENT => RTEMS_TEST_SUPPORT.SYSTEM_REQUIREMENTS
+      );
+
+      SPTEST.PUT_SIZE(
+         "Floating Point Tasks",
+         TRUE,
+         "FP attributes",
+         RTEMS_TEST_SUPPORT.PER_FP_TASK
+      );
+
+      TEXT_IO.PUT_LINE( "User's Tasks' Stacks - " );
+      TEXT_IO.NEW_LINE;
+
+      TEXT_IO.PUT_LINE( "Interrupt Stacks - " );
+      TEXT_IO.NEW_LINE;
+
+      SPTEST.PUT_SIZE(
+         "Global object tables",
+         TRUE,
+         "maximum_nodes",
+         RTEMS_TEST_SUPPORT.PER_NODE
+      );
+
+      SPTEST.PUT_SIZE(
+         "Global objects",
+         TRUE,
+         "maximum_global_objects",
+         RTEMS_TEST_SUPPORT.PER_GLOBAL_OBJECT
+      );
+
+      SPTEST.PUT_SIZE(
+         "Proxies",
+         TRUE,
+         "maximum_proxies",
+         RTEMS_TEST_SUPPORT.PER_PROXY
+      );
+
+      TEXT_IO.PUT_LINE( "*** END OF TEST SIZE ***" );
+      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
+
+   end INIT;
+
+--PAGE
+--
+--  PUT_SIZE
+--
+
+   procedure PUT_SIZE (
+      DESCRIPTION    : in     STRING;
+      HAS_FIELD_NAME : in     BOOLEAN;
+      FIELD_NAME     : in     STRING             := "";
+      REQUIREMENT    : in     RTEMS.UNSIGNED32   := 0
+   ) is
+      SPACES : constant STRING := "                              ";
+   begin
+
+      -- 21 is length of longest description (task's stacks)
+
+      TEXT_IO.PUT( DESCRIPTION );
+      TEXT_IO.PUT( SPACES( 1 .. 21 - DESCRIPTION'LENGTH ) );
+      TEXT_IO.PUT( " - " );
+      if HAS_FIELD_NAME = TRUE then
+         TEXT_IO.PUT( FIELD_NAME );
+         TEXT_IO.PUT( " * " );
+      end if;
+      UNSIGNED32_IO.PUT( REQUIREMENT );
+      TEXT_IO.NEW_LINE;
+
+  end PUT_SIZE;
+    
+
+end SPTEST;
Index: c/src/ada-tests/sptests/spsize/sptest.ads
===================================================================
--- c/src/ada-tests/sptests/spsize/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
+++ c/src/ada-tests/sptests/spsize/sptest.ads	(revision 6d4e604be8b43c0555cd1c9531fe78ae199a1189)
@@ -0,0 +1,111 @@
+--
+--  SPTEST / SPECIFICATION
+--
+--  DESCRIPTION:
+--
+--  This package is the specification for Test 1 of the RTEMS
+--  Single Processor Test Suite.
+--
+--  DEPENDENCIES: 
+--
+--  
+--
+--  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
+--  On-Line Applications Research Corporation (OAR).
+--  All rights assigned to U.S. Government, 1994.
+--
+--  This material may be reproduced by or for the U.S. Government pursuant
+--  to the copyright license under the clause at DFARS 252.227-7013.  This
+--  notice must appear in all copies of this file and its derivatives.
+--
+--  sptest.ads,v 1.3 1995/07/12 19:42:55 joel Exp
+--
+
+with CLOCK_DRIVER;
+with RTEMS;
+
+package SPTEST is
+
+--
+--  INIT
+--
+--  DESCRIPTION:
+--
+--  This RTEMS task initializes the application.
+--
+
+   procedure INIT (
+      ARGUMENT : in     RTEMS.TASK_ARGUMENT
+   );
+
+--
+--  PUT_SIZE
+--
+--  DESCRIPTION:
+--
+--  This procedure outputs the size information about the specified
+--  object in a standard format.
+--
+
+   procedure PUT_SIZE (
+      DESCRIPTION    : in     STRING;
+      HAS_FIELD_NAME : in     BOOLEAN;
+      FIELD_NAME     : in     STRING             := "";
+      REQUIREMENT    : in     RTEMS.UNSIGNED32   := 0
+   );
+
+--
+--  This is the Driver Address Table for this test.
+--
+
+   DEVICE_DRIVERS : aliased RTEMS.DRIVER_ADDRESS_TABLE( 1 .. 1 ) :=
+   (1=>
+      (
+        CLOCK_DRIVER.INITIALIZE'ACCESS,              -- Initialization
+        RTEMS.NO_DRIVER_ENTRY,                       -- Open
+        RTEMS.NO_DRIVER_ENTRY,                       -- Close
+        RTEMS.NO_DRIVER_ENTRY,                       -- Read
+        RTEMS.NO_DRIVER_ENTRY,                       -- Write
+        RTEMS.NO_DRIVER_ENTRY                        -- Control
+      )
+   );
+
+--
+--  This is the Initialization Tasks Table for this test.
+--
+
+   INITIALIZATION_TASKS : aliased RTEMS.INITIALIZATION_TASKS_TABLE( 1 .. 1 ) := 
+   (1=>
+     (
+       RTEMS.BUILD_NAME( 'U', 'I', '1', ' ' ),        -- task name
+       2048,                                          -- stack size
+       1,                                             -- priority
+       RTEMS.DEFAULT_ATTRIBUTES,                      -- attributes
+       SPTEST.INIT'ACCESS,                            -- entry point
+       RTEMS.NO_PREEMPT,                              -- initial mode
+       0                                              -- argument list
+     )
+   );
+
+--
+--  This is the Configuration Table for this test.
+--
+
+   CONFIGURATION : aliased RTEMS.CONFIGURATION_TABLE := (
+      RTEMS.NULL_ADDRESS,        -- will be replaced by BSP
+      64 * 1024,                 -- executive RAM size
+      10,                        -- maximum # tasks
+      0,                         -- maximum # timers
+      0,                         -- maximum # semaphores
+      0,                         -- maximum # message queues
+      0,                         -- maximum # messages
+      0,                         -- maximum # partitions
+      0,                         -- maximum # regions
+      0,                         -- maximum # dp memory areas
+      0,                         -- maximum # periods
+      0,                         -- maximum # user extensions
+      RTEMS.MILLISECONDS_TO_MICROSECONDS(10), -- # us in a tick
+      50                         -- # ticks in a timeslice
+  );
+
+end SPTEST;
