summaryrefslogtreecommitdiff
path: root/digital/zigbit/bitcloud/stack/Components/HAL/avr/atmega1281/common/include/macros.m90
blob: 57ce6f9277db2d81e80d51731bd8773746ea8a45 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
;----------------------------------------------------------------------------
;               			
;		    MACROS.M90					
;
;	This module contains the A90/AVR C macros				
;	used by cstartup.s90 and other assemble source.
;
;   File version:   $Revision: 1.8 $
;								 	
;								 	
;----------------------------------------------------------------------------

#if (((__TID__ >> 8) & 0x7F) != 90)
#error This file should only be assembled by aa90 or aavr
#endif

#define A90_PROC_OPTION		((__TID__ >> 4) & 0x0F)

/* Long or relative jumps and calls */
#if (A90_PROC_OPTION == 0) || (A90_PROC_OPTION == 1)
#define XCALL	RCALL
#define XJMP	RJMP
#else
#define XCALL	CALL
#define XJMP	JMP
#endif

/* Length of pointer registers (X/Y/Z) */
#if (A90_PROC_OPTION == 0) || (A90_PROC_OPTION == 2)
#define A90_POINTER_REG_SIZE	1
#define A90_TINY_INDEX
#else /*!(A90_PROC_OPTION == 0) || (A90_PROC_OPTION == 2)*/
#if (A90_PROC_OPTION == 1) || (A90_PROC_OPTION == 3) || (A90_PROC_OPTION ==5)
#define A90_POINTER_REG_SIZE	2
#else /*!(A90_PROC_OPTION == 1) || (A90_PROC_OPTION == 3) || (A90_PROC_OPTION ==5)*/
#if (A90_PROC_OPTION == 4) || (A90_PROC_OPTION == 6)
#define A90_POINTER_REG_SIZE	3
#define A90_EXTENDED_DATA
#else /*!(A90_PROC_OPTION == 4) || (A90_PROC_OPTION == 6)*/
#error Unknown processor option!!
#endif /*!(A90_PROC_OPTION == 4) || (A90_PROC_OPTION == 6)*/
#endif /*!(A90_PROC_OPTION == 1) || (A90_PROC_OPTION == 3) || (A90_PROC_OPTION ==5)*/
#endif /*!(A90_PROC_OPTION == 0) || (A90_PROC_OPTION == 2)*/

#if (A90_PROC_OPTION > 4)
#define A90_LARGE_CODE
#endif

#if (A90_PROC_OPTION > 1)
#define A90_HAS_POSSIBLE_ELPM
#endif

#ifdef A90_HAS_POSSIBLE_ELPM
#ifdef __HAS_ELPM__
#define A90_HAS_ELPM
#else
#ifndef SMALL_FLASH
#define A90_HAS_ELPM
#endif
#endif
#endif

#if A90_PROC_OPTION > 1
#define A90_24BIT_GENERIC
#endif

#if A90_PROC_OPTION < 2
#define A90_16BIT_GENERIC
#endif

#ifdef __MEMORY_MODEL__

#define TINY_MEMORY_MODEL 0
#define SMALL_MEMORY_MODEL 1
#define LARGE_MEMORY_MODEL 2

#if __MEMORY_MODEL__ == 1
#undef MEMORY_MODEL
#define MEMORY_MODEL TINY_MEMORY_MODEL
#endif

#if __MEMORY_MODEL__ == 2
#undef MEMORY_MODEL
#define MEMORY_MODEL SMALL_MEMORY_MODEL
#endif

#if __MEMORY_MODEL__ == 3
#undef MEMORY_MODEL
#define MEMORY_MODEL LARGE_MEMORY_MODEL
#endif

#else

#ifdef MEMORY_MODEL
#define t 0
#define s 1
#define l 2

#define TINY_MEMORY_MODEL 0
#define SMALL_MEMORY_MODEL 1
#define LARGE_MEMORY_MODEL 2

#if MEMORY_MODEL == t
#undef MEMORY_MODEL
#define MEMORY_MODEL TINY_MEMORY_MODEL
#endif

#if MEMORY_MODEL == s
#undef MEMORY_MODEL
#define MEMORY_MODEL SMALL_MEMORY_MODEL
#endif

#if MEMORY_MODEL == l
#undef MEMORY_MODEL
#define MEMORY_MODEL LARGE_MEMORY_MODEL
#endif

#undef t
#undef s
#undef l
#endif
#endif

/* Register nicknames */
#define T0 R0
#define T1 R1
#define T2 R2
#define T3 R3
#define P0 R16
#define P1 R17
#define P2 R18
#define P3 R19
#define Q0 R20
#define Q1 R21
#define Q2 R22
#define Q3 R23
#define X0 R26
#define X1 R27
#define X2 R25
#define Y0 R28
#define Y1 R29
#define Z0 R30
#define Z1 R31
#define Z2 R19

/* I/O-Space Register nicknames */
#define RAMPD 0x38
#define RAMPX 0x39
#define RAMPY 0x3A
#define RAMPZ 0x3B
#define EIND  0x3C
#define SREG  0x3F