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;
next prev 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