comp.lang.ada
 help / color / mirror / Atom feed
From: brians@hpcljms.HP.COM (Brian Sullivan)
Subject: Re: Memory Access Question
Date: 29 Jul 89 00:00:49 GMT	[thread overview]
Message-ID: <920013@hpcljms.HP.COM> (raw)
In-Reply-To: 18800002@ucf-cs.ucf.edu


  It is possible to use UNCHECKED_CONVERSION to provide access
memory locations.  The following Ada package will allows you
to read and write to memory locations.

  The file depends on the existence of a predefined integer type
that is the same size as SYSTEM.ADDRESS, and the SYSTEM.ADDRESS
is of the same size as a pointer or access object.

------------------------------------------------------------------------
with SYSTEM;
package MEMORY is

   --
   -- The predefined integer type used for the type ADDR_INT
   -- must be the same size in bits as the type SYSTEM.ADDRESS
   -- because unchecked conversion is used to convert ADDR_INT
   -- into SYSTEM.ADDRESS
   --
   -- Also the size of an access type must be the same as the
   -- size of SYSTEM.ADDRESS
   --
   -- These two requirements are automatically check in the
   -- elaboration code for the body of this package.
   --

   type ADDR_INT is new INTEGER;      

   type DATUM is range 0 .. (2**SYSTEM.STORAGE_UNIT)-1;

   function  READ ( FROM : ADDR_INT ) return DATUM;
   
   procedure WRITE( TO : ADDR_INT; VALUE : DATUM);
   
   function  CONVERT_TO_ADDR_INT( LOC : SYSTEM.ADDRESS) return ADDR_INT; 
   
private

   pragma INLINE(READ);
   pragma INLINE(WRITE);
   pragma INLINE(CONVERT_TO_ADDR_INT);

   for DATUM'SIZE use SYSTEM.STORAGE_UNIT;
   
end MEMORY;   

with UNCHECKED_CONVERSION;
package body MEMORY is

   type DATUM_PTR is access DATUM;
   
   function CONVERT_TO_DATUM_PTR is 
      new UNCHECKED_CONVERSION( SOURCE => ADDR_INT,
                                TARGET => DATUM_PTR);
   pragma INLINE(CONVERT_TO_DATUM_PTR);

   function LOCAL_CONVERT_TO_ADDR_INT is 
      new UNCHECKED_CONVERSION( SOURCE => SYSTEM.ADDRESS,
                                TARGET => ADDR_INT);
   pragma INLINE(LOCAL_CONVERT_TO_ADDR_INT);

   function  READ ( FROM : ADDR_INT ) return DATUM is
   begin
      return CONVERT_TO_DATUM_PTR(FROM).all;
   end;
   
   procedure WRITE( TO : ADDR_INT; VALUE : DATUM) is
   begin
      CONVERT_TO_DATUM_PTR(TO).all := VALUE;
   end;
   
   function  CONVERT_TO_ADDR_INT( LOC : SYSTEM.ADDRESS) return ADDR_INT is
   begin
      return LOCAL_CONVERT_TO_ADDR_INT(LOC);
   end;
   
begin
   if ADDR_INT'SIZE /= SYSTEM.ADDRESS'SIZE then
      raise PROGRAM_ERROR;
   end if;    
   if DATUM_PTR'SIZE /= SYSTEM.ADDRESS'SIZE then
      raise PROGRAM_ERROR;
   end if;    
end MEMORY;   
   
   
 

  parent reply	other threads:[~1989-07-29  0:00 UTC|newest]

Thread overview: 70+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1989-07-26 20:34 Memory Access Question tony
1989-07-27 13:06 ` richard a hammond
1989-07-27 18:53   ` Ray Trent
1989-07-28  0:48     ` Mike Murphy
1989-08-02 13:23       ` Mike Walsh
1989-08-02 20:20         ` Mike Murphy
1989-07-29  0:00 ` Brian Sullivan [this message]
  -- strict thread matches above, loose matches on Subject: below --
1988-11-28 22:19 Collective response to := messages Geoff Mendal
1988-11-29 14:39 ` Dennis Doubleday
1988-11-29 21:08 ` Ray Trent
1988-11-30 14:37   ` Stephe Leake
1988-12-01 14:54     ` David S. Rosenblum
1988-12-02 20:21       ` William Thomas Wolfe,2847,
1988-12-04 21:15         ` David S. Rosenblum
1988-12-04 23:27           ` William Thomas Wolfe,2847,
1988-12-05 14:46             ` David S. Rosenblum
1988-12-05 21:23               ` William Thomas Wolfe,2847,
1988-12-07 17:33                 ` Stephe Leake
1988-12-07 16:03               ` Definition of pass by reference Robert Eachus
1988-12-07 17:15             ` Collective response to := messages Stephe Leake
1988-12-07 16:07       ` Stephe Leake
1988-12-09  3:15         ` David S. Rosenblum
1988-12-01 21:31     ` Ray Trent
1988-12-07 16:21       ` Stephe Leake
1988-11-30 16:29   ` David S. Rosenblum
1988-11-30 18:29     ` William Thomas Wolfe,2847,
1988-11-30 22:28       ` David S. Rosenblum
1988-12-01  3:09         ` William Thomas Wolfe,2847,
1988-12-01 15:16           ` David S. Rosenblum
1988-12-02 19:31             ` William Thomas Wolfe,2847,
1988-12-04 21:03               ` David S. Rosenblum
1988-12-05  2:34                 ` William Thomas Wolfe,2847,
1988-12-05 14:07                   ` David S. Rosenblum
1988-12-07 17:26                     ` Stephe Leake
1988-12-06 19:16                 ` Collective response to := messa stt
1988-12-09  3:39                   ` David S. Rosenblum
1988-11-30 19:13     ` CORRECTION Re: Collective response to := messages David S. Rosenblum
1988-12-01 18:31     ` Ray Trent
1988-12-02 14:49       ` David S. Rosenblum
1988-12-05 17:33         ` Collective response to := messa stt
1988-11-30 18:24   ` Collective response to := messages Robert Eachus
1988-12-02 14:58     ` David S. Rosenblum
1988-12-02 19:34   ` Mark C. Adolph
1988-12-05 17:15     ` Collective response to := messa stt
1988-11-29 21:44 ` Collective response to := messages William Thomas Wolfe,2847,
1988-11-14 13:20 Ada language revision Stanley Roger Allen, AdaDude
1988-11-15 23:28 ` Wilmer Rivers
1988-11-16 19:06   ` William Thomas Wolfe,2847,
1988-11-17 15:34     ` Stephe Leake
1988-11-18 16:39       ` Steve Tynor
1988-11-18 19:22       ` Ron Guilmette
1988-11-23 22:22       ` William Thomas Wolfe,2847,
1988-11-29 15:35         ` Stephe Leake
1988-11-18  0:32     ` Ron Guilmette
1988-11-22 14:37       ` Stephe Leake
1988-11-23 13:37         ` Dennis Doubleday
1988-11-23 19:41           ` Steve Tynor
1988-11-23 21:14             ` Richard Pattis
1988-11-25 20:36             ` Robert Firth
1988-11-29 15:12           ` limited private types Stephe Leake
1988-12-01 23:06             ` Ron Guilmette
1988-12-05  1:48               ` Paul Stachour
1988-12-05 12:31                 ` Reference Semantics William Thomas Wolfe,2847,
1988-12-06  0:29                   ` Paul Stachour
1988-12-07  1:07                     ` Reference Semantics, assignment overloading, etc Ray Trent
1988-12-08 17:36                       ` Reference Semantics, assignment ryer
1988-12-06 16:56               ` limited private types ryer
1988-12-06 20:09               ` stt
1988-12-07 15:51               ` Stephe Leake
1988-11-21 15:40   ` Ada language revision stt
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox