~ubuntu-branches/ubuntu/raring/avr-libc/raring-proposed

« back to all changes in this revision

Viewing changes to tests/simulate/avr/sfrasm-2.S

  • Committer: Bazaar Package Importer
  • Author(s): Hakan Ardo
  • Date: 2008-08-10 09:59:16 UTC
  • mfrom: (1.1.7 upstream) (4.1.1 lenny)
  • Revision ID: james.westby@ubuntu.com-20080810095916-wwyigh3vt0e9s7ud
Tags: 1:1.6.2.cvs20080610-2
Added build-depends on texlive-extra-utils (closes: #493454)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Test of _SFR's macroses.  Old style ASM program, where the ports are
 
2
   values, suitable to use with LDS/STS instruction.
 
3
   $Id: sfrasm-2.S,v 1.1.2.2 2008/05/02 08:47:38 dmix Exp $     */
 
4
 
 
5
/* XXX: Seems, the _SFR_MEM_ADDR() is worse.  In this case it works only
 
6
   with ports, which have the address higher then SREG.  There is no
 
7
   method to obtain the address suitable for LDS/STS instruction.  Now
 
8
   this test cases are commented.  Second, the _SFR_ADDR() is not defined.
 
9
   This is mismatch to C behavior (_SFR_ASM_COMPAT, __SFR_OFFSET = 0).  */
 
10
 
 
11
#define __SFR_OFFSET    0
 
12
#include <avr/io.h>
 
13
 
 
14
#if     defined (__AVR_AT90S8515__)
 
15
 
 
16
# if     SREG != 0x3F                   \
 
17
     /*||  _SFR_ADDR (SREG) != 0x5F*/   \
 
18
     /*||  _SFR_MEM_ADDR (SREG) != 0x5F*/       \
 
19
     ||  _SFR_IO_ADDR (SREG) != 0x3F    \
 
20
     ||  !_SFR_IO_REG_P (SREG)
 
21
#  error
 
22
# endif
 
23
 
 
24
# if     WDTCR != 0x21                  \
 
25
     /*||  _SFR_ADDR (WDTCR) != 0x41*/  \
 
26
     /*||  _SFR_MEM_ADDR (WDTCR) != 0x41*/      \
 
27
     ||  _SFR_IO_ADDR (WDTCR) != 0x21   \
 
28
     ||  !_SFR_IO_REG_P (WDTCR)
 
29
#  error
 
30
# endif
 
31
 
 
32
# if     EEARH != 0x1F                  \
 
33
     /*||  _SFR_ADDR (EEARH) != 0x3F*/  \
 
34
     /*||  _SFR_MEM_ADDR (EEARH) != 0x3F*/      \
 
35
     ||  _SFR_IO_ADDR (EEARH) != 0x1F   \
 
36
     ||  !_SFR_IO_REG_P (EEARH)
 
37
#  error
 
38
# endif
 
39
 
 
40
# if     ACSR != 0x08                   \
 
41
     /*||  _SFR_ADDR (ACSR) != 0x28*/   \
 
42
     /*||  _SFR_MEM_ADDR (ACSR) != 0x28*/       \
 
43
     ||  _SFR_IO_ADDR (ACSR) != 0x08    \
 
44
     ||  !_SFR_IO_REG_P (ACSR)
 
45
#  error
 
46
# endif
 
47
 
 
48
#elif   defined (__AVR_ATmega8__)
 
49
 
 
50
# if     SREG != 0x3F                   \
 
51
     /*||  _SFR_ADDR (SREG) != 0x5F*/   \
 
52
     /*||  _SFR_MEM_ADDR (SREG) != 0x5F*/       \
 
53
     ||  _SFR_IO_ADDR (SREG) != 0x3F    \
 
54
     ||  !_SFR_IO_REG_P (SREG)
 
55
#  error
 
56
# endif
 
57
 
 
58
# if     UCSRC != 0x20                  \
 
59
     /*||  _SFR_ADDR (UCSRC) != 0x40*/  \
 
60
     /*||  _SFR_MEM_ADDR (UCSRC) != 0x40*/      \
 
61
     ||  _SFR_IO_ADDR (UCSRC) != 0x20   \
 
62
     ||  !_SFR_IO_REG_P (UCSRC)
 
63
#  error
 
64
# endif
 
65
 
 
66
# if     EEARH != 0x1F                  \
 
67
     /*||  _SFR_ADDR (EEARH) != 0x3F*/  \
 
68
     /*||  _SFR_MEM_ADDR (EEARH) != 0x3F*/      \
 
69
     ||  _SFR_IO_ADDR (EEARH) != 0x1F   \
 
70
     ||  !_SFR_IO_REG_P (EEARH)
 
71
#  error
 
72
# endif
 
73
 
 
74
# if     TWBR != 0x00                   \
 
75
     /*||  _SFR_ADDR (TWBR) != 0x20*/   \
 
76
     /*||  _SFR_MEM_ADDR (TWBR) != 0x20*/       \
 
77
     ||  _SFR_IO_ADDR (TWBR) != 0x00    \
 
78
     ||  !_SFR_IO_REG_P (TWBR)
 
79
#  error
 
80
# endif
 
81
 
 
82
#elif   defined (__AVR_ATmega128__)
 
83
 
 
84
# if     UCSR1C != 0x9D                 \
 
85
     /*||  _SFR_ADDR (UCSR1C) != 0x9D*/ \
 
86
     ||  _SFR_MEM_ADDR (UCSR1C) != 0x9D \
 
87
     ||  _SFR_IO_REG_P (UCSR1C)
 
88
#  error
 
89
# endif
 
90
 
 
91
# if     DDRF != 0x61                   \
 
92
     /*||  _SFR_ADDR (DDRF) != 0x61*/   \
 
93
     ||  _SFR_MEM_ADDR (DDRF) != 0x61   \
 
94
     ||  _SFR_IO_REG_P (DDRF)
 
95
#  error
 
96
# endif
 
97
 
 
98
# if     SREG != 0x3F                   \
 
99
     /*||  _SFR_ADDR (SREG) != 0x5F*/   \
 
100
     /*||  _SFR_MEM_ADDR (SREG) != 0x5F*/       \
 
101
     ||  _SFR_IO_ADDR (SREG) != 0x3F    \
 
102
     ||  !_SFR_IO_REG_P (SREG)
 
103
#  error
 
104
# endif
 
105
 
 
106
# if     SFIOR != 0x20                  \
 
107
     /*||  _SFR_ADDR (SFIOR) != 0x40*/  \
 
108
     /*||  _SFR_MEM_ADDR (SFIOR) != 0x40*/      \
 
109
     ||  _SFR_IO_ADDR (SFIOR) != 0x20   \
 
110
     ||  !_SFR_IO_REG_P (SFIOR)
 
111
#  error
 
112
# endif
 
113
 
 
114
# if     EEARH != 0x1F                  \
 
115
     /*||  _SFR_ADDR (EEARH) != 0x3F*/  \
 
116
     /*||  _SFR_MEM_ADDR (EEARH) != 0x3F*/      \
 
117
     ||  _SFR_IO_ADDR (EEARH) != 0x1F   \
 
118
     ||  !_SFR_IO_REG_P (EEARH)
 
119
#  error
 
120
# endif
 
121
 
 
122
# if     PINF != 0x00                   \
 
123
     /*||  _SFR_ADDR (PINF) != 0x20*/   \
 
124
     /*||  _SFR_MEM_ADDR (PINF) != 0x20*/       \
 
125
     ||  _SFR_IO_ADDR (PINF) != 0x00    \
 
126
     ||  !_SFR_IO_REG_P (PINF)
 
127
#  error
 
128
# endif
 
129
 
 
130
#endif
 
131
 
 
132
 
 
133
.macro  EXIT    result
 
134
        ldi     r24, lo8 (\result)
 
135
        ldi     r25, hi8 (\result)
 
136
        rjmp    exit
 
137
.endm
 
138
 
 
139
        .text
 
140
        .global main
 
141
main:
 
142
        sei
 
143
        in      r16, SREG
 
144
        sbrc    r16, SREG_I
 
145
        rjmp    0f
 
146
        EXIT    __LINE__
 
147
 
 
148
0:      cli
 
149
        in      r16, SREG
 
150
        sbrs    r16, SREG_I
 
151
        rjmp    0f
 
152
        EXIT    __LINE__
 
153
 
 
154
0:      sei
 
155
;;;     lds     r16, _SFR_ADDR (SREG)
 
156
;;;     sbrc    r16, SREG_I
 
157
        rjmp    0f
 
158
        EXIT    __LINE__
 
159
 
 
160
0:      cli
 
161
;;;     lds     r16, _SFR_ADDR (SREG)
 
162
;;;     sbrs    r16, SREG_I
 
163
        rjmp    0f
 
164
        EXIT    __LINE__
 
165
 
 
166
0:      sei
 
167
;;;     lds     r16, _SFR_MEM_ADDR (SREG)
 
168
;;;     sbrc    r16, SREG_I
 
169
        rjmp    0f
 
170
        EXIT    __LINE__
 
171
 
 
172
0:      cli
 
173
;;;     lds     r16, _SFR_MEM_ADDR (SREG)
 
174
;;;     sbrs    r16, SREG_I
 
175
        rjmp    0f
 
176
        EXIT    __LINE__
 
177
 
 
178
0:      sei
 
179
        in      r16, _SFR_IO_ADDR (SREG)
 
180
        sbrc    r16, SREG_I
 
181
        rjmp    0f
 
182
        EXIT    __LINE__
 
183
 
 
184
0:      cli
 
185
        in      r16, _SFR_IO_ADDR (SREG)
 
186
        sbrs    r16, SREG_I
 
187
        rjmp    0f
 
188
        EXIT    __LINE__
 
189
 
 
190
0:      EXIT    0
 
191
        .end