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

Subversion Repositories yacc

[/] [yacc/] [trunk/] [bench/] [c_src/] [count/] [count_tak.c] - Rev 4

Compare with Previous | Blame | View Log

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

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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