]> rtime.felk.cvut.cz Git - fpga/virtex2/plasma.git/blob - software/test.c
Added software Makefile.
[fpga/virtex2/plasma.git] / software / test.c
1 /*-------------------------------------------------------------------\r
2 -- TITLE: Plasma CPU test code\r
3 -- AUTHOR: Steve Rhoads (rhoadss@yahoo.com)\r
4 -- DATE CREATED: 4/21/01\r
5 -- FILENAME: test.c\r
6 -- PROJECT: Plasma CPU core\r
7 -- COPYRIGHT: Software placed into the public domain by the author.\r
8 --    Software 'as is' without warranty.  Author liable for nothing.\r
9 -- DESCRIPTION:\r
10 --   The executable image of this file is used as input to the VHDL.\r
11 --\r
12 --   This file must not contain any global or static data since\r
13 --   there isn't a loader to relocate the .data segment and since\r
14 --   having static data causes the opcodes to begin at a different\r
15 --   location in the resulting executable file.\r
16 --\r
17 --   Save the opcodes in "code.txt".\r
18 --\r
19 --   Testing subversion.\r
20 --------------------------------------------------------------------*/\r
21 #ifndef WIN32\r
22 #undef putchar\r
23 #define putchar(C) *(volatile unsigned char*)0x20000000=(unsigned char)(C)\r
24 #endif\r
25 \r
26 void print_hex(unsigned long num);\r
27 \r
28 char text[]="Testing the Plasma core.\n";\r
29 char buf[20];\r
30 int xyz=0xbadbeef;\r
31 int abc;\r
32 \r
33 char *strcpy2(char *s, const char *t)\r
34 {\r
35    char *tmp=s;\r
36    while((int)(*s++=*t++)) ;\r
37    return(tmp);\r
38 }\r
39 \r
40 static void itoa2(long n, char *s, int base, long *digits)\r
41 {\r
42    long i,j,sign;\r
43    unsigned long n2;\r
44    char number[20];\r
45    for(i=0;i<15;++i) {\r
46       number[i]=' ';\r
47    }\r
48    number[15]=0;\r
49    if(n>=0||base!=10) {\r
50       sign=1;\r
51    } else {\r
52       sign=-1;\r
53    }\r
54    n2=n*sign;\r
55    for(j=14;j>=0;--j) {\r
56       i=n2%base;\r
57       n2/=base;\r
58       number[j]=i<10?'0'+i:'a'+i-10;\r
59       if(n2==0&&15-j>=*digits) break;\r
60    } \r
61    if(sign==-1) {\r
62       number[--j]='-';\r
63    }\r
64    if(*digits==0||*digits<15-j) {\r
65       strcpy2(s,&number[j]);\r
66       *digits=15-j;\r
67    } else {\r
68       strcpy2(s,&number[15-*digits]);\r
69    }\r
70 }\r
71 \r
72 void print(long num,long base,long digits)\r
73 {\r
74    char *ptr,buffer[128];\r
75    itoa2(num,buffer,base,&digits);\r
76    ptr=buffer;\r
77    while(*ptr) {\r
78       putchar(*ptr++);          /* Put the character out */\r
79       if(ptr[-1]=='\n') *--ptr='\r';\r
80    }\r
81 }              \r
82 \r
83 void print_string(char *p)\r
84 {\r
85    int i;\r
86    for(i=0;p[i];++i) {\r
87       putchar(p[i]);\r
88    }\r
89 }\r
90 \r
91 int prime()\r
92 {\r
93    int i,j;\r
94    //show all prime numbers less than 1000\r
95    for(i=3;i<1000;i+=2) {\r
96       for(j=3;j<i;j+=2) {\r
97          if(i%j==0) {\r
98             j=0;\r
99             break;\r
100          }\r
101       }\r
102       if(j) {\r
103          print(i,10,0);\r
104          putchar(' ');\r
105       }\r
106    }\r
107    putchar('\n');\r
108    return 0;\r
109 }\r
110 \r
111 int main(void)\r
112 {\r
113    long i,j;\r
114    char char_buf[16];\r
115    short short_buf[16];\r
116    long long_buf[16];\r
117 \r
118 #if 1 \r
119    //test shift\r
120    j=0x12345678;\r
121    for(i=0;i<32;++i) {\r
122       print_hex(j>>i);\r
123       putchar(' ');\r
124    }\r
125    putchar('\n');\r
126    j=0x92345678;\r
127    for(i=0;i<32;++i) {\r
128       print_hex(j>>i);\r
129       putchar(' ');\r
130    }\r
131    putchar('\n');\r
132    j=0x12345678;\r
133    for(i=0;i<32;++i) {\r
134       print_hex(j<<i);\r
135       putchar(' ');\r
136    }\r
137    putchar('\n');\r
138    putchar('\n');\r
139 #endif\r
140   \r
141 #if 1 \r
142    //test multiply and divide\r
143    j=7;\r
144    for(i=0;i<=10;++i) {\r
145       print(j*i,10,0);\r
146       putchar(' ');\r
147    }\r
148    putchar('\n');\r
149    j=0x321;\r
150    for(i=0;i<=5;++i) {\r
151       print_hex(j*(i+0x12345));\r
152       putchar(' ');\r
153    }\r
154    putchar('\n');\r
155    j=0x54321;\r
156    for(i=0;i<=5;++i) {\r
157       print_hex(j*(i+0x123));\r
158       putchar(' ');\r
159    }\r
160    putchar('\n');\r
161    j=0x12345;\r
162    for(i=1;i<10;++i) {\r
163       print_hex(j/i);\r
164       putchar(' ');\r
165    }\r
166    putchar('\n');\r
167    for(i=1;i<10;++i) {\r
168       print_hex(j%i);\r
169       putchar(' ');\r
170    }\r
171    putchar('\n');\r
172    putchar('\n');\r
173 #endif\r
174 \r
175 #if 1\r
176    //test addition and subtraction\r
177    j=0x1234;\r
178    for(i=0;i<10;++i) {\r
179       print_hex(j+i);\r
180       putchar(' ');\r
181    }\r
182    putchar('\n');\r
183    for(i=0;i<10;++i) {\r
184       print_hex(j-i);\r
185       putchar(' ');\r
186    }\r
187    putchar('\n');\r
188    putchar('\n');\r
189 #endif\r
190   \r
191 #if 1 \r
192    //test bit operations\r
193    i=0x1234;\r
194    j=0x4321;\r
195    print_hex(i&j);\r
196    putchar(' ');\r
197    print_hex(i|j);\r
198    putchar(' ');\r
199    print_hex(i^j);\r
200    putchar(' ');\r
201    print_hex(~i);\r
202    putchar(' ');\r
203    print_hex(i+0x12);\r
204    putchar(' ');\r
205    print_hex(i-0x12);\r
206    putchar('\n');\r
207    putchar('\n');\r
208 #endif\r
209   \r
210 #if 1 \r
211    //test memory access\r
212    for(i=0;i<10;++i) {\r
213       char_buf[i]=i;\r
214       short_buf[i]=i;\r
215       long_buf[i]=i;\r
216    }\r
217    for(i=0;i<10;++i) {\r
218       j=char_buf[i];\r
219       print(j,10,0);\r
220       putchar(' ');\r
221       j=short_buf[i];\r
222       print(j,10,0);\r
223       putchar(' ');\r
224       j=long_buf[i];\r
225       print(j,10,0);\r
226       putchar('\n');\r
227    }\r
228    putchar('\n');\r
229 #endif\r
230    \r
231    prime();\r
232    \r
233    putchar('d'); putchar('o'); putchar('n'); putchar('e'); putchar('\n');\r
234 \r
235    for(;;) ;\r
236 }\r
237 \r