#include "cuecat.h"

unsigned char meg;

unsigned char convert()
{
   if(meg==0x0e) return '`';
   if(meg==0x16) return '1';
   if(meg==0x1e) return '2';
   if(meg==0x26) return '3';
   if(meg==0x25) return '4';
   if(meg==0x2e) return '5';
   if(meg==0x36) return '6';
   if(meg==0x3d) return '7';
   if(meg==0x3e) return '8';
   if(meg==0x46) return '9';
   if(meg==0x45) return '0';
   if(meg==0x4e) return '-';
   if(meg==0x55) return '=';
   if(meg==0x5d) return '\\';
   if(meg==0x66) return '\b';
   if(meg==0x0d) return '\t';
   if(meg==0x15) return 'q';
   if(meg==0x1d) return 'w';
   if(meg==0x24) return 'e';
   if(meg==0x2d) return 'r';
   if(meg==0x2c) return 't';
   if(meg==0x35) return 'y';
   if(meg==0x3c) return 'u';
   if(meg==0x43) return 'i';
   if(meg==0x44) return 'o';
   if(meg==0x4d) return 'p';
   if(meg==0x54) return '[';
   if(meg==0x5b) return ']';
   if(meg==0x58) return 'C';
   if(meg==0x1c) return 'a';
   if(meg==0x1b) return 's';
   if(meg==0x23) return 'd';
   if(meg==0x2b) return 'f';
   if(meg==0x34) return 'g';
   if(meg==0x33) return 'h';
   if(meg==0x3b) return 'j';
   if(meg==0x42) return 'k';
   if(meg==0x4b) return 'l';
   if(meg==0x4c) return ';';
   if(meg==0x52) return ''';
   if(meg==0x5a) return '\n';
   if(meg==0x12) return 'S';
   if(meg==0x1a) return 'z';
   if(meg==0x22) return 'x';
   if(meg==0x21) return 'c';
   if(meg==0x2a) return 'v';
   if(meg==0x32) return 'b';
   if(meg==0x31) return 'n';
   if(meg==0x3a) return 'm';
   if(meg==0x41) return ',';
   if(meg==0x49) return '.';
   if(meg==0x4a) return '/';
   if(meg==0x59) return 'S';
   if(meg==0x29) return ' ';

}

void main()
{

   setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
   while(1){

      meg=0;
      while(!input(PIN_A0)) {} //wait for high edge
      while(input(PIN_A0)) {} //wait for low edge
      //ignore the first thing which is start

      while(!input(PIN_A0)) {} //wait for high edge
      while(input(PIN_A0)) {} //wait for low edge
      meg|=input(PIN_A1)<<0;

      while(!input(PIN_A0)) {} //wait for high edge
      while(input(PIN_A0)) {} //wait for low edge
      meg|=input(PIN_A1)<<1;

      while(!input(PIN_A0)) {} //wait for high edge
      while(input(PIN_A0)) {} //wait for low edge
      meg|=input(PIN_A1)<<2;

      while(!input(PIN_A0)) {} //wait for high edge
      while(input(PIN_A0)) {} //wait for low edge
      meg|=input(PIN_A1)<<3;

      while(!input(PIN_A0)) {} //wait for high edge
      while(input(PIN_A0)) {} //wait for low edge
      meg|=input(PIN_A1)<<4;

      while(!input(PIN_A0)) {} //wait for high edge
      while(input(PIN_A0)) {} //wait for low edge
      meg|=input(PIN_A1)<<5;

      while(!input(PIN_A0)) {} //wait for high edge
      while(input(PIN_A0)) {} //wait for low edge
      meg|=input(PIN_A1)<<6;

      while(!input(PIN_A0)) {} //wait for high edge
      while(input(PIN_A0)) {} //wait for low edge
      meg|=input(PIN_A1)<<7;

      while(!input(PIN_A0)) {} //wait for high edge
      while(input(PIN_A0)) {} //wait for low edge
      //ignore parity

      while(!input(PIN_A0)) {} //wait for high edge
      while(input(PIN_A0)) {} //wait for low edge
      //ignore the stop bit

      meg = convert();

      if ((meg!=0xF0) && (meg !=0x73)) putc(meg);
   }
}
