
int BAUD  = 0x102b;
int SCCR1 = 0x102c;
int SCCR2 = 0x102d;
int SCSR  = 0x102e;
int SCDR  = 0x102f;

int mon_proc;

int i;
int serin;
void main() {
  i = 1;
  disable_pcode_serial();
  poke(SCCR2, 44);
  motor(3, 100);
  set_baud(600);
  while (1) {
    serin = get_sci();
    if (serin > 0) {
      serial_putchar(serin);
      printf("\nsent: %d", serin);
    }
  }
}

int data;
void monitor_sci() {
  while (1) {
    data = get_sci();
    if (data > 0)
      printf("\nsci: %d", data);
  }
}

int get_sci() {
  if (sci_new_data > 0) {
    sci_new_data--;
    return sci_data;
  }
  else
    return -1;
}

void go() {
  while (1) {
    start_press();
    disable_pcode_serial();
    bit_set(0x102d, 0b00100000);
    mon_proc = start_process(monitor_sci());
  }
}

void stop() {
  while (1) {
    stop_press();
    enable_pcode_serial();
    bit_clear(0x102d, 0b00100000);
    kill_process(mon_proc);
  }
}


void serial_putchar(int c)
{
   while (!(peek(0x102e) & 0x80));  /* wait until serial transmit empty */
   poke(0x102f, c);  /* send character */
}



/* necessary to receive characters using serial_getchar */
void disable_pcode_serial()   
{
   poke(0x3c, 1);
}

/* necessary for IC to interact with board again */
void enable_pcode_serial()  
{
   poke(0x3c, 0);
}


int serial_getchar(int c)
{
   while (!(peek(0x102e) & 0x20)); /* wait for received character */
   return peek(0x102f);
}

void set_baud(int baudrate) {
  if (baudrate == 300) 
    poke(BAUD, 53);
  else if (baudrate == 600)
    poke(BAUD, 52);
  else if (baudrate == 1200)
    poke(BAUD, 51);
  else if (baudrate == 2400)
    poke(BAUD, 50);
  else if (baudrate == 9600)
    poke(BAUD, 48);
}






