| 1 |
106 |
markom |
/*
|
| 2 |
|
|
* Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved.
|
| 3 |
|
|
*
|
| 4 |
|
|
* This software may be freely used, copied, modified, and distributed
|
| 5 |
|
|
* provided that the above copyright notice is preserved in all copies of the
|
| 6 |
|
|
* software.
|
| 7 |
|
|
*/
|
| 8 |
|
|
|
| 9 |
|
|
/*> angel.h <*/
|
| 10 |
|
|
/*---------------------------------------------------------------------------*/
|
| 11 |
|
|
/* This header file is the main holder for the declarations and
|
| 12 |
|
|
* prototypes for the core Angel system. Some Angel concepts are
|
| 13 |
|
|
* described at the start of this file to ensure that a complete view
|
| 14 |
|
|
* of the Angel world can be derived purely from the source.
|
| 15 |
|
|
*
|
| 16 |
|
|
* $Revision: 1.1.1.1 $
|
| 17 |
|
|
* $Date: 2001-05-18 11:16:30 $
|
| 18 |
|
|
*
|
| 19 |
|
|
*
|
| 20 |
|
|
* NOTE: Currently the Angel source is designed to be simple,
|
| 21 |
|
|
* understandable and easy to port to new hardware platforms. However,
|
| 22 |
|
|
* this does not always yield the highest performing system. The
|
| 23 |
|
|
* current layered approach introduces an overhead to the performance
|
| 24 |
|
|
* of the system. In a true commercial target, this code should be
|
| 25 |
|
|
* re-designed to build a system where the Angel logical message
|
| 26 |
|
|
* system, device driver and hardware accesses are merged to provide
|
| 27 |
|
|
* the best performance.
|
| 28 |
|
|
*/
|
| 29 |
|
|
/*---------------------------------------------------------------------------*/
|
| 30 |
|
|
/* Angel overview:
|
| 31 |
|
|
|
| 32 |
|
|
... some comments describing Angel ...
|
| 33 |
|
|
|
| 34 |
|
|
* Angel is designed as a kit-of-parts that can be used to provide
|
| 35 |
|
|
* run-time support for the development of ARM applications. The main
|
| 36 |
|
|
* core of Angel is in providing support for the "debug" message
|
| 37 |
|
|
* communication with a host system. These messages do not just cover
|
| 38 |
|
|
* debugging ARM processes, but also the process of downloading ARM
|
| 39 |
|
|
* programs or attaching to executing processes on the target.
|
| 40 |
|
|
*
|
| 41 |
|
|
* A stand-alone ROM based Angel world is the basic starting point for
|
| 42 |
|
|
* a system, since it will allow programs to be downloaded to the
|
| 43 |
|
|
* target. The ROM version of Angel will provide the generic debug
|
| 44 |
|
|
* support, but no system specific routines. The preferred method of
|
| 45 |
|
|
* using Angel is as a link library. This ensures that applications
|
| 46 |
|
|
* carry with them the Angel routines necessary to support debugging
|
| 47 |
|
|
* (and also ensure that the Angel version is up-to-date, independant
|
| 48 |
|
|
* of the version in the target ROM). Eventually, once a program has
|
| 49 |
|
|
* been fully debugged, a ROMmed version of the program can be
|
| 50 |
|
|
* generated with the Angel code being provided in the application.
|
| 51 |
|
|
|
| 52 |
|
|
.. more comments ..
|
| 53 |
|
|
|
| 54 |
|
|
* The standard Angel routines do *NOT* perform any dynamic memory
|
| 55 |
|
|
* allocation. To simplify the source, and aid the porting to a non C
|
| 56 |
|
|
* library world, memory is either pre-allocated (as build-time
|
| 57 |
|
|
* globals) or actually given to the particular Angel routine by the
|
| 58 |
|
|
* active run-time. This ensures that the interaction between Angel
|
| 59 |
|
|
* and the target O/S is minimised.
|
| 60 |
|
|
*
|
| 61 |
|
|
* Notes: We sub-include more header files to keep the source
|
| 62 |
|
|
* modular. Since Angel is a kit-of-parts alternative systems may need
|
| 63 |
|
|
* to change the prototypes of particular functions, whilst
|
| 64 |
|
|
* maintaining a fixed external interface. e.g. using the standard
|
| 65 |
|
|
* DEBUG messages, but with a different communications world.
|
| 66 |
|
|
*/
|
| 67 |
|
|
/*---------------------------------------------------------------------------*/
|
| 68 |
|
|
|
| 69 |
|
|
#ifndef __angel_h
|
| 70 |
|
|
#define __angel_h
|
| 71 |
|
|
|
| 72 |
|
|
/*---------------------------------------------------------------------------*/
|
| 73 |
|
|
/*-- Global Angel definitions and manifests ---------------------------------*/
|
| 74 |
|
|
/*---------------------------------------------------------------------------*/
|
| 75 |
|
|
/* When building Angel we may not include the standard library
|
| 76 |
|
|
* headers. However, it is useful coding using standard macro names
|
| 77 |
|
|
* since it makes the code easier to understand.
|
| 78 |
|
|
*/
|
| 79 |
|
|
|
| 80 |
|
|
typedef unsigned int word ;
|
| 81 |
|
|
typedef unsigned char byte ;
|
| 82 |
|
|
|
| 83 |
|
|
/* The following typedefs can be used to access I/O registers: */
|
| 84 |
|
|
typedef volatile unsigned int vuword ;
|
| 85 |
|
|
typedef volatile unsigned char vubyte ;
|
| 86 |
|
|
|
| 87 |
|
|
/*
|
| 88 |
|
|
* The following typedefs are used when defining objects that may also
|
| 89 |
|
|
* be created on a host system, where the word size is not
|
| 90 |
|
|
* 32bits. This ensures that the same data values are manipulated.
|
| 91 |
|
|
*/
|
| 92 |
|
|
#ifdef TARGET
|
| 93 |
|
|
typedef unsigned int unsigned32;
|
| 94 |
|
|
typedef signed int signed32;
|
| 95 |
|
|
typedef int int32;
|
| 96 |
|
|
|
| 97 |
|
|
typedef unsigned short int unsigned16;
|
| 98 |
|
|
typedef signed short int signed16;
|
| 99 |
|
|
|
| 100 |
|
|
/*
|
| 101 |
|
|
* yet another solution for the bool/boolean problem, this one is
|
| 102 |
|
|
* copied from Scott's modifications to clx/host.h
|
| 103 |
|
|
*/
|
| 104 |
|
|
# ifdef IMPLEMENT_BOOL_AS_ENUM
|
| 105 |
|
|
enum _bool { _false, _true };
|
| 106 |
|
|
# define _bool enum _bool
|
| 107 |
|
|
# elif defined(IMPLEMENT_BOOL_AS_INT) || !defined(__cplusplus)
|
| 108 |
|
|
# define _bool int
|
| 109 |
|
|
# define _false 0
|
| 110 |
|
|
# define _true 1
|
| 111 |
|
|
# endif
|
| 112 |
|
|
|
| 113 |
|
|
# ifdef _bool
|
| 114 |
|
|
# define bool _bool
|
| 115 |
|
|
# endif
|
| 116 |
|
|
|
| 117 |
|
|
# ifndef true
|
| 118 |
|
|
# define true _true
|
| 119 |
|
|
# define false _false
|
| 120 |
|
|
# endif
|
| 121 |
|
|
|
| 122 |
|
|
# ifndef YES
|
| 123 |
|
|
# define YES true
|
| 124 |
|
|
# define NO false
|
| 125 |
|
|
# endif
|
| 126 |
|
|
|
| 127 |
|
|
# undef TRUE /* some OSF headers define as 1 */
|
| 128 |
|
|
# define TRUE true
|
| 129 |
|
|
|
| 130 |
|
|
# undef FALSE /* some OSF headers define as 1 */
|
| 131 |
|
|
# define FALSE false
|
| 132 |
|
|
|
| 133 |
|
|
# ifndef NULL
|
| 134 |
|
|
# define NULL 0
|
| 135 |
|
|
# endif
|
| 136 |
|
|
|
| 137 |
|
|
#else
|
| 138 |
|
|
|
| 139 |
|
|
# include "host.h"
|
| 140 |
|
|
|
| 141 |
|
|
#endif
|
| 142 |
|
|
|
| 143 |
|
|
#ifndef IGNORE
|
| 144 |
|
|
# define IGNORE(x) ((x)=(x))
|
| 145 |
|
|
#endif
|
| 146 |
|
|
|
| 147 |
|
|
/* The following typedef allows us to cast between integral and
|
| 148 |
|
|
* function pointers. This isn't allowed by direct casting when
|
| 149 |
|
|
* conforming to the ANSI spec.
|
| 150 |
|
|
*/
|
| 151 |
|
|
typedef union ansibodge
|
| 152 |
|
|
{
|
| 153 |
|
|
word w ;
|
| 154 |
|
|
word *wp ;
|
| 155 |
|
|
void *vp ;
|
| 156 |
|
|
byte *bp ;
|
| 157 |
|
|
void (*vfn)(void) ;
|
| 158 |
|
|
word (*wfn)(void) ;
|
| 159 |
|
|
int (*ifn)(void) ;
|
| 160 |
|
|
byte (*bfn)(void) ;
|
| 161 |
|
|
} ansibodge ;
|
| 162 |
|
|
|
| 163 |
|
|
/*---------------------------------------------------------------------------*/
|
| 164 |
|
|
|
| 165 |
|
|
/* The amount setup aside by the run-time system for stack overflow
|
| 166 |
|
|
* handlers to execute in. This must be at least 256bytes, since that
|
| 167 |
|
|
* value is assumed by the current ARM Ltd compiler.
|
| 168 |
|
|
* This space is _only_ kept for the USR stack, not any of the privileged
|
| 169 |
|
|
* mode stacks, as stack overflow on these is always fatal - there is
|
| 170 |
|
|
* no point attemptingto recover. In addition is is important that
|
| 171 |
|
|
* Angel should keep privileged stack space requirements to a minimum.
|
| 172 |
|
|
*/
|
| 173 |
|
|
#define APCS_STACKGUARD 256
|
| 174 |
|
|
|
| 175 |
|
|
#endif /* __angel_h */
|
| 176 |
|
|
|
| 177 |
|
|
/* EOF angel.h */
|