//Apr.1.2005 for ram16k
|
//Apr.1.2005 for ram16k
|
//count_tak.c
|
//count_tak.c
|
|
|
|
|
|
|
|
|
#define print_port 0x3ff0
|
#define print_port 0x3ff0
|
#define print_char_port 0x3ff1
|
#define print_char_port 0x3ff1
|
#define print_int_port 0x3ff2
|
#define print_int_port 0x3ff2
|
#define print_long_port 0x3ff4
|
#define print_long_port 0x3ff4
|
|
|
|
|
|
|
|
|
|
|
#define uart_port 0x03ffc //for 16KRAM
|
#define uart_port 0x03ffc //for 16KRAM
|
#define uart_wport uart_port
|
#define uart_wport uart_port
|
#define uart_rport uart_port
|
#define uart_rport uart_port
|
#define int_set_address 0x03ff8 //for 16KRAM
|
#define int_set_address 0x03ff8 //for 16KRAM
|
|
|
|
|
|
|
char *name[]={
|
char *name[]={
|
"","one","two","three","four","five","six","seven","eight","nine",
|
"","one","two","three","four","five","six","seven","eight","nine",
|
"ten","eleven","twelve","thirteen","fourteen","fifteen",
|
"ten","eleven","twelve","thirteen","fourteen","fifteen",
|
"sixteen","seventeen","eighteen","nineteen",
|
"sixteen","seventeen","eighteen","nineteen",
|
"","ten","twenty","thirty","forty","fifty","sixty","seventy",
|
"","ten","twenty","thirty","forty","fifty","sixty","seventy",
|
"eighty","ninety"
|
"eighty","ninety"
|
};
|
};
|
void print_uart(unsigned char* ptr)//
|
void print_uart(unsigned char* ptr)//
|
{
|
{
|
unsigned int uport;
|
unsigned int uport;
|
#define WRITE_BUSY 0x0100
|
#define WRITE_BUSY 0x0100
|
|
|
|
|
while (*ptr) {
|
while (*ptr) {
|
|
|
do {
|
do {
|
uport=*(volatile unsigned*) uart_port;
|
uport=*(volatile unsigned*) uart_port;
|
} while (uport & WRITE_BUSY);
|
} while (uport & WRITE_BUSY);
|
*(volatile unsigned char*)uart_wport=*(ptr++);
|
*(volatile unsigned char*)uart_wport=*(ptr++);
|
}
|
}
|
//*(volatile unsigned char*)uart_wport=0x00;//Write Done
|
//*(volatile unsigned char*)uart_wport=0x00;//Write Done
|
}
|
}
|
|
|
|
|
void putc_uart(unsigned char c)//
|
void putc_uart(unsigned char c)//
|
{
|
{
|
unsigned int uport;
|
unsigned int uport;
|
|
|
|
|
do {
|
do {
|
uport=*(volatile unsigned*) uart_port;
|
uport=*(volatile unsigned*) uart_port;
|
} while (uport & WRITE_BUSY);
|
} while (uport & WRITE_BUSY);
|
*(volatile unsigned char*)uart_wport=c;
|
*(volatile unsigned char*)uart_wport=c;
|
|
|
}
|
}
|
|
|
unsigned char read_uart()//Verilog Test Bench Use
|
unsigned char read_uart()//Verilog Test Bench Use
|
{
|
{
|
unsigned uport;
|
unsigned uport;
|
uport= *(volatile unsigned *)uart_rport;
|
uport= *(volatile unsigned *)uart_rport;
|
return uport;
|
return uport;
|
}
|
}
|
|
|
void print(unsigned char* ptr)//Verilog Test Bench Use
|
void print(unsigned char* ptr)//Verilog Test Bench Use
|
{
|
{
|
|
|
while (*ptr) {
|
while (*ptr) {
|
|
|
*(volatile unsigned char*)print_port=*(ptr++);
|
*(volatile unsigned char*)print_port=*(ptr++);
|
}
|
}
|
|
|
*(volatile unsigned char*)print_port=0x00;//Write Done
|
*(volatile unsigned char*)print_port=0x00;//Write Done
|
|
|
}
|
}
|
void print_char(unsigned char val)//Little Endian write out 16bit number
|
void print_char(unsigned char val)//Little Endian write out 16bit number
|
{
|
{
|
*(volatile unsigned char*)print_port=(unsigned char)val ;
|
*(volatile unsigned char*)print_port=(unsigned char)val ;
|
|
|
}
|
}
|
|
|
|
|
|
|
|
|
|
|
char *itoa(unsigned long num)
|
char *itoa(unsigned long num)
|
{
|
{
|
static char buf[12];
|
static char buf[12];
|
int i;
|
int i;
|
buf[10]=0;
|
buf[10]=0;
|
for(i=9;i>=0;--i) {
|
for(i=9;i>=0;--i) {
|
buf[i]=(char)((num%10)+'0');
|
buf[i]=(char)((num%10)+'0');
|
num/=10;
|
num/=10;
|
}
|
}
|
return buf;
|
return buf;
|
}
|
}
|
|
|
void number_text(unsigned long number)
|
void number_text(unsigned long number)
|
{
|
{
|
int digit;
|
int digit;
|
print(itoa(number));
|
print(itoa(number));
|
print(": ");
|
print(": ");
|
if(number>=1000000000) {
|
if(number>=1000000000) {
|
digit=number/1000000000;
|
digit=number/1000000000;
|
print(name[digit]);
|
print(name[digit]);
|
print(" billion ");
|
print(" billion ");
|
number%=1000000000;
|
number%=1000000000;
|
}
|
}
|
if(number>=100000000) {
|
if(number>=100000000) {
|
digit=number/100000000;
|
digit=number/100000000;
|
print(name[digit]);
|
print(name[digit]);
|
print(" hundred ");
|
print(" hundred ");
|
number%=100000000;
|
number%=100000000;
|
if(number<1000000) {
|
if(number<1000000) {
|
print("million ");
|
print("million ");
|
}
|
}
|
}
|
}
|
if(number>=20000000) {
|
if(number>=20000000) {
|
digit=number/10000000;
|
digit=number/10000000;
|
print(name[digit+20]);
|
print(name[digit+20]);
|
print_char(' ');
|
print_char(' ');
|
number%=10000000;
|
number%=10000000;
|
if(number<1000000) {
|
if(number<1000000) {
|
print("million ");
|
print("million ");
|
}
|
}
|
}
|
}
|
if(number>=1000000) {
|
if(number>=1000000) {
|
digit=number/1000000;
|
digit=number/1000000;
|
print(name[digit]);
|
print(name[digit]);
|
print(" million ");
|
print(" million ");
|
number%=1000000;
|
number%=1000000;
|
}
|
}
|
if(number>=100000) {
|
if(number>=100000) {
|
digit=number/100000;
|
digit=number/100000;
|
print(name[digit]);
|
print(name[digit]);
|
print(" hundred ");
|
print(" hundred ");
|
number%=100000;
|
number%=100000;
|
if(number<1000) {
|
if(number<1000) {
|
print("thousand ");
|
print("thousand ");
|
}
|
}
|
}
|
}
|
if(number>=20000) {
|
if(number>=20000) {
|
digit=number/10000;
|
digit=number/10000;
|
print(name[digit+20]);
|
print(name[digit+20]);
|
print_char(' ');
|
print_char(' ');
|
number%=10000;
|
number%=10000;
|
if(number<1000) {
|
if(number<1000) {
|
print("thousand ");
|
print("thousand ");
|
}
|
}
|
}
|
}
|
if(number>=1000) {
|
if(number>=1000) {
|
digit=number/1000;
|
digit=number/1000;
|
print(name[digit]);
|
print(name[digit]);
|
print(" thousand ");
|
print(" thousand ");
|
number%=1000;
|
number%=1000;
|
}
|
}
|
if(number>=100) {
|
if(number>=100) {
|
digit=number/100;
|
digit=number/100;
|
print(name[digit]);
|
print(name[digit]);
|
print(" hundred ");
|
print(" hundred ");
|
number%=100;
|
number%=100;
|
}
|
}
|
if(number>=20) {
|
if(number>=20) {
|
digit=number/10;
|
digit=number/10;
|
print(name[digit+20]);
|
print(name[digit+20]);
|
print_char(' ');
|
print_char(' ');
|
number%=10;
|
number%=10;
|
}
|
}
|
print(name[number]);
|
print(name[number]);
|
print_char('\r');
|
print_char('\r');
|
print_char('\n');
|
print_char('\n');
|
}
|
}
|
|
|
void main()
|
void main()
|
{
|
{
|
unsigned mem [1000];
|
unsigned mem [1000];
|
unsigned long number,i;
|
unsigned long number,i;
|
for (i=0;i<10000;i++) {
|
for (i=0;i<10000;i++) {
|
read_uart();
|
read_uart();
|
//print_uart(itoa(i));
|
//print_uart(itoa(i));
|
}
|
}
|
}
|
}
|
|
|
|
|