OpenCores
URL https://opencores.org/ocsvn/yacc/yacc/trunk

Subversion Repositories yacc

[/] [yacc/] [trunk/] [bench/] [c_src/] [count/] [count_tak.c] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 tak.sugawa
//Apr.1.2005 for ram16k
2
//count_tak.c
3
 
4
 
5
 
6
 
7
#define print_port 0x3ff0
8
#define print_char_port 0x3ff1
9
#define print_int_port 0x3ff2
10
#define print_long_port 0x3ff4
11
 
12
 
13
 
14
 
15
 
16
#define uart_port               0x03ffc //for 16KRAM
17
#define uart_wport uart_port
18
#define uart_rport uart_port
19
#define int_set_address 0x03ff8 //for 16KRAM
20
 
21
 
22
 
23
char *name[]={
24
   "","one","two","three","four","five","six","seven","eight","nine",
25
   "ten","eleven","twelve","thirteen","fourteen","fifteen",
26
      "sixteen","seventeen","eighteen","nineteen",
27
   "","ten","twenty","thirty","forty","fifty","sixty","seventy",
28
      "eighty","ninety"
29
};
30
void print_uart(unsigned char* ptr)// 
31
{
32
        unsigned int uport;
33
        #define WRITE_BUSY 0x0100
34
 
35
 
36
        while (*ptr) {
37
 
38
                do {
39
                  uport=*(volatile unsigned*)   uart_port;
40
                } while (uport & WRITE_BUSY);
41
                *(volatile unsigned char*)uart_wport=*(ptr++);
42
        }
43
        //*(volatile unsigned char*)uart_wport=0x00;//Write Done
44
}
45
 
46
 
47
void putc_uart(unsigned char c)// 
48
{
49
        unsigned int uport;
50
 
51
 
52
        do {
53
                  uport=*(volatile unsigned*)   uart_port;
54
        } while (uport & WRITE_BUSY);
55
        *(volatile unsigned char*)uart_wport=c;
56
 
57
}
58
 
59
unsigned char read_uart()//Verilog Test Bench Use 
60
{
61
                unsigned uport;
62
                uport= *(volatile unsigned *)uart_rport;
63
                return uport;
64
}
65
 
66
void print(unsigned char* ptr)//Verilog Test Bench Use 
67
{
68
 
69
        while (*ptr) {
70
 
71
                *(volatile unsigned char*)print_port=*(ptr++);
72
        }
73
 
74
        *(volatile unsigned char*)print_port=0x00;//Write Done
75
 
76
}
77
void print_char(unsigned char val)//Little Endian write out 16bit number 
78
{
79
        *(volatile unsigned char*)print_port=(unsigned char)val ;
80
 
81
}
82
 
83
 
84
 
85
 
86
 
87
char *itoa(unsigned long num)
88
{
89
   static char buf[12];
90
   int i;
91
   buf[10]=0;
92
   for(i=9;i>=0;--i) {
93
      buf[i]=(char)((num%10)+'0');
94
      num/=10;
95
   }
96
   return buf;
97
}
98
 
99
void number_text(unsigned long number)
100
{
101
   int digit;
102
   print(itoa(number));
103
   print(": ");
104
   if(number>=1000000000) {
105
      digit=number/1000000000;
106
      print(name[digit]);
107
      print(" billion ");
108
      number%=1000000000;
109
   }
110
   if(number>=100000000) {
111
      digit=number/100000000;
112
      print(name[digit]);
113
      print(" hundred ");
114
      number%=100000000;
115
      if(number<1000000) {
116
         print("million ");
117
      }
118
   }
119
   if(number>=20000000) {
120
      digit=number/10000000;
121
      print(name[digit+20]);
122
      print_char(' ');
123
      number%=10000000;
124
      if(number<1000000) {
125
         print("million ");
126
      }
127
   }
128
   if(number>=1000000) {
129
      digit=number/1000000;
130
      print(name[digit]);
131
      print(" million ");
132
      number%=1000000;
133
   }
134
   if(number>=100000) {
135
      digit=number/100000;
136
      print(name[digit]);
137
      print(" hundred ");
138
      number%=100000;
139
      if(number<1000) {
140
         print("thousand ");
141
      }
142
   }
143
   if(number>=20000) {
144
      digit=number/10000;
145
      print(name[digit+20]);
146
      print_char(' ');
147
      number%=10000;
148
      if(number<1000) {
149
         print("thousand ");
150
      }
151
   }
152
   if(number>=1000) {
153
      digit=number/1000;
154
      print(name[digit]);
155
      print(" thousand ");
156
      number%=1000;
157
   }
158
   if(number>=100) {
159
      digit=number/100;
160
      print(name[digit]);
161
      print(" hundred ");
162
      number%=100;
163
   }
164
   if(number>=20) {
165
      digit=number/10;
166
      print(name[digit+20]);
167
      print_char(' ');
168
      number%=10;
169
   }
170
   print(name[number]);
171
   print_char('\r');
172
   print_char('\n');
173
}
174
 
175
void main()
176
{
177
   unsigned long number,i;
178
#ifdef RTL_SIM
179
        print("This program is based on Steve Rhoards-san,author of plasma.\n");
180
 
181
#endif
182
   print("Mult by 3\r\n");
183
   for (i=0;i<3;i=i+1)   print_uart("uart port test\n");
184
   number=3;
185
   for(i=0;;++i) {
186
      number_text(number);
187
      number*=3;
188
      #ifdef RTL_SIM
189
        if (i==18){
190
                        print(" ");//flush      
191
                print("$finish");
192
 
193
        }
194
          #endif
195
 
196
   }
197
}
198
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.