char* getsNoWait() {
	static char inBuffer[122];
	static int inBufferIndex = 0;

	while(1) { // terminated with returns

		char c= getcharNoWait();
		if(c < 0) return 0;

		if(c == '\n') { // end of string -> return
			inBuffer[inBufferIndex] = 0;
			inBufferIndex = 0;
			return inBuffer;
		}

		inBuffer[inBufferIndex] = c;
		if(inBufferIndex < 120) inBufferIndex++;
	}

}
Example #2
0
int dbg_parse_line()
{
    char ch;
    unsigned int ad;
    unsigned int ln;
    unsigned int regno;
    unsigned int ui;
    int nn;
    int n2;

    while (linendx < 84) {
        ch = dbg_getchar();
        switch (ch) {
        case -1: return;
        case ' ': break;
        case '?': dbg_DisplayHelp(); break;
        case 'q': return 1;
        case 'a': dbg_arm(dbg_dbctrl); break;
        case 'i':
             ch = dbg_getchar();
             switch(ch) {
             case '?':  // query instruction breakpoints
                  if (((dbg_dbctrl & 0x030000)==0) && (dbg_dbctrl & 1) == 1)
                      printf("i0=%08X\r\n", dbg_GetDBAD(0));
                  if (((dbg_dbctrl & 0x300000)==0) && (dbg_dbctrl & 2) == 2)
                      printf("i1=%08X\r\n", dbg_GetDBAD(1));
                  if (((dbg_dbctrl & 0x3000000)==0) && (dbg_dbctrl & 4) == 4)
                      printf("i2=%08X\r\n", dbg_GetDBAD(2));
                  if (((dbg_dbctrl & 0x30000000)==0) && (dbg_dbctrl & 8) == 8)
                      printf("i2=%08X\r\n", dbg_GetDBAD(3));
                  break;
             case '0':  dbg_ReadSetIB(0); break;
             case '1':  dbg_ReadSetIB(1); break;
             case '2':  dbg_ReadSetIB(2); break;
             case '3':  dbg_ReadSetIB(3); break;
             }
             break;
        case 'd':
             ch = dbg_getchar();
             switch(ch) {
             case 'i':
                  dbg_nextSpace();
                  nn = dbg_getHexNumber(&ad);
                  if (nn > 0) {
                      n2 = dbg_getDecNumber(&ln);
                      if (n2 > 0) {
                          for (; n2 > 0; n2--)
                              disassem(&ad,0);
                      }
                      else
                          disassem20(ad,0);
                  }
                  break;
             case '?':  // query instruction breakpoints
                  printf("\r\n");
                  if (((dbg_dbctrl & 0x030000)==0x30000) && (dbg_dbctrl & 1) == 1)
                      printf("d0=%08X\r\n", dbg_GetDBAD(0));
                  if (((dbg_dbctrl & 0x300000)==0x300000) && (dbg_dbctrl & 2) == 2)
                      printf("d1=%08X\r\n", dbg_GetDBAD(1));
                  if (((dbg_dbctrl & 0x3000000)==0x3000000) && (dbg_dbctrl & 4) == 4)
                      printf("d2=%08X\r\n", dbg_GetDBAD(2));
                  if (((dbg_dbctrl & 0x30000000)==0x30000000) && (dbg_dbctrl & 8) == 8)
                      printf("d2=%08X\r\n", dbg_GetDBAD(3));
                  break;
              case '0':  dbg_ReadSetDB(0); break;
              case '1':  dbg_ReadSetDB(1); break;
              case '2':  dbg_ReadSetDB(2); break;
              case '3':  dbg_ReadSetDB(3); break;
              case 's':
                  ch = dbg_getchar();
                  switch(ch) {
                  case '?':
                      if (((dbg_dbctrl & 0x030000)==0x10000) && (dbg_dbctrl & 1) == 1)
                          printf("ds0=%08X\r\n", dbg_GetDBAD(0));
                      if (((dbg_dbctrl & 0x300000)==0x100000) && (dbg_dbctrl & 2) == 2)
                          printf("ds1=%08X\r\n", dbg_GetDBAD(1));
                      if (((dbg_dbctrl & 0x3000000)==0x1000000) && (dbg_dbctrl & 4) == 4)
                          printf("ds2=%08X\r\n", dbg_GetDBAD(2));
                      if (((dbg_dbctrl & 0x30000000)==0x10000000) && (dbg_dbctrl & 8) == 8)
                          printf("ds2=%08X\r\n", dbg_GetDBAD(3));
                      break;
                  case '0':  dbg_ReadSetDSB(0); break;
                  case '1':  dbg_ReadSetDSB(1); break;
                  case '2':  dbg_ReadSetDSB(2); break;
                  case '3':  dbg_ReadSetDSB(3); break;
                  }
                  break;
              default:
                  dbg_nextSpace();
                  dbg_SetDBAD(0,0);
                  dbg_SetDBAD(1,0);
                  dbg_SetDBAD(2,0);
                  dbg_SetDBAD(3,0);
                  dbg_arm(0);
                  break;
             }
             break;
        case 'r': dbg_processReg(); break;
        case 's':
             ch = dbg_getchar();
             if (ch=='s') {
                  ch = dbg_getchar();
                  if (ch=='-') {
                      dbg_dbctrl &= 0x3FFFFFFFFFFFFFFFL;
                      dbg_arm(dbg_dbctrl);
                      ssm = 0;
                  }
                  else if (ch=='+' || ch=='m') {
                      dbg_dbctrl |= 0x4000000000000000L;                 
                      dbg_arm(dbg_dbctrl);
                      ssm = 1;
                      return 1;
                  }
             }
             break;
        case 'f':
             ch = dbg_getchar();
             if (ch=='/')
                 dbg_getDumpFormat();
             ch = dbg_getchar();
             if (ch==',') {
                 if (curfmt=='x')
                     nn = dbg_getHexNumber(&ui);
                 else
                     nn = dbg_getDecNumber(&ui);
                 if (nn > 0)
                     curfill = ui;
             }
             switch(curfmt) {
             case 'x':
                  switch(cursz) {
                  case 'b':
                       for (nn = 0; nn < currep; nn++)
                           bmem[ad+nn] = curfill;
                       break;
                  case 'c':
                       for (nn = 0; nn < currep; nn++)
                           cmem[ad/2+nn] = curfill;
                       break;
                  case 'h':
                       for (nn = 0; nn < currep; nn++)
                           hmem[ad/4+nn] = curfill;
                       break;
                  case 'w':
                       for (nn = 0; nn < currep; nn++)
                           wmem[ad/8+nn] = curfill;
                       break;
                  }
             }
             break;
        case 'x':
             ch = dbg_getchar();
             if (ch=='/') {
                 dbg_getDumpFormat();
             }
             switch(curfmt) {
             case 'i':
                  printf("\r\n");
                  for (nn = 0; nn < currep; nn++) {
                      if (getcharNoWait()==3)
                         break;
                      disassem(&curaddr,0);
                  }
                  break;
             case 's':
                  for (nn = 0; nn < currep; nn++) {
                      if (getcharNoWait()==3)
                         break;
                      curaddr += putstr(&cmem[curaddr/2],84) * 2;
                      printf("\r\n");
                  }
                  break;
             case 'x':
                  for (nn = 0; nn < currep; nn++) {
                      if (getcharNoWait()==3)
                         break;
                      if ((nn % muol)==0) {
                          switch(cursz) {
                          case 'b': printf("\r\n%06X ", curaddr+nn); break;
                          case 'c': printf("\r\n%06X ", curaddr+nn*2); break;
                          case 'h': printf("\r\n%06X ", curaddr+nn*4); break;
                          case 'w': printf("\r\n%06X ", curaddr+nn*8); break;
                          }
                      }
                      asm {; right here ; };
                      switch(cursz) {
                      case 'b': printf("%02X ", bmem[curaddr+nn]); break;
                      case 'c': printf("%04X ", cmem[curaddr/2+nn]); break;
                      case 'h': printf("%08X ", hmem[curaddr/4+nn]); break;
                      case 'w': printf("%016X ", wmem[curaddr/8+nn]); break;
                      }
                  }
                  switch(cursz) {
                  case 'b': curaddr += nn; break;
                  case 'c': curaddr += nn * 2; break;
                  case 'h': curaddr += nn * 4; break;
                  case 'w': curaddr += nn * 8; break;
                  }
                  printf("\r\n");
                  break;
             }
        }
    }
    return 0;
}