diff src/gba/remote.cpp @ 22:8870086b716c

remote.cpp must include config.h
author Robert McIntyre <rlm@mit.edu>
date Sun, 04 Mar 2012 17:35:30 -0600
parents e0545ef33bb9
children
line wrap: on
line diff
     1.1 --- a/src/gba/remote.cpp	Sun Mar 04 16:56:20 2012 -0600
     1.2 +++ b/src/gba/remote.cpp	Sun Mar 04 17:35:30 2012 -0600
     1.3 @@ -1,6 +1,7 @@
     1.4  #include <cstdlib>
     1.5  #include <cstdio>
     1.6  #include <cstring>
     1.7 +#include <config.h>
     1.8  
     1.9  #ifndef WIN32
    1.10  # include <unistd.h>
    1.11 @@ -51,150 +52,147 @@
    1.12  #if (defined WIN32 && !defined SDL)
    1.13  void remoteSetSockets(SOCKET l, SOCKET r)
    1.14  {
    1.15 -  remoteSocket       = r;
    1.16 -  remoteListenSocket = l;
    1.17 +	remoteSocket       = r;
    1.18 +	remoteListenSocket = l;
    1.19  }
    1.20  
    1.21  #endif
    1.22  
    1.23  int remoteTcpSend(char *data, int len)
    1.24  {
    1.25 -  return send(remoteSocket, data, len, 0);
    1.26 +	return send(remoteSocket, data, len, 0);
    1.27  }
    1.28  
    1.29  int remoteTcpRecv(char *data, int len)
    1.30  {
    1.31 -  return recv(remoteSocket, data, len, 0);
    1.32 +	return recv(remoteSocket, data, len, 0);
    1.33  }
    1.34  
    1.35  bool remoteTcpInit()
    1.36  {
    1.37 -  if (remoteSocket == -1)
    1.38 -    {
    1.39 +	if (remoteSocket == -1)
    1.40 +	{
    1.41  #ifdef WIN32
    1.42 -      WSADATA wsaData;
    1.43 -      int     error = WSAStartup(MAKEWORD(1, 1), &wsaData);
    1.44 +		WSADATA wsaData;
    1.45 +		int     error = WSAStartup(MAKEWORD(1, 1), &wsaData);
    1.46  #endif // WIN32
    1.47 -      int s = socket(PF_INET, SOCK_STREAM, 0);
    1.48 +		int s = socket(PF_INET, SOCK_STREAM, 0);
    1.49  
    1.50 -      remoteListenSocket = s;
    1.51 +		remoteListenSocket = s;
    1.52  
    1.53 -      if (s < 0)
    1.54 -	{
    1.55 -	  fprintf(stderr, "Error opening socket\n");
    1.56 -	  exit(-1);
    1.57 -	}
    1.58 -      int tmp = 1;
    1.59 -      setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp, sizeof(tmp));
    1.60 +		if (s < 0)
    1.61 +		{
    1.62 +			fprintf(stderr, "Error opening socket\n");
    1.63 +			exit(-1);
    1.64 +		}
    1.65 +		int tmp = 1;
    1.66 +		setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp, sizeof(tmp));
    1.67  
    1.68 -      //    char hostname[256];
    1.69 -      //    gethostname(hostname, 256);
    1.70 +		//    char hostname[256];
    1.71 +		//    gethostname(hostname, 256);
    1.72  
    1.73 -      //    hostent *ent = gethostbyname(hostname);
    1.74 -      //    unsigned long a = *((unsigned long *)ent->h_addr);
    1.75 +		//    hostent *ent = gethostbyname(hostname);
    1.76 +		//    unsigned long a = *((unsigned long *)ent->h_addr);
    1.77  
    1.78 -      sockaddr_in addr;
    1.79 -      addr.sin_family      = AF_INET;
    1.80 -      addr.sin_port        = htons(remotePort);
    1.81 -      addr.sin_addr.s_addr = htonl(0);
    1.82 -      int count = 0;
    1.83 -      while (count < 3)
    1.84 -	{
    1.85 -	  if (bind(s, (sockaddr *)&addr, sizeof(addr)))
    1.86 -	    {
    1.87 -	      addr.sin_port = htons(ntohs(addr.sin_port)+1);
    1.88 -	    }
    1.89 -	  else
    1.90 -	    break;
    1.91 -	}
    1.92 -      if (count == 3)
    1.93 -	{
    1.94 -	  fprintf(stderr, "Error binding \n");
    1.95 -	  exit(-1);
    1.96 -	}
    1.97 +		sockaddr_in addr;
    1.98 +		addr.sin_family      = AF_INET;
    1.99 +		addr.sin_port        = htons(remotePort);
   1.100 +		addr.sin_addr.s_addr = htonl(0);
   1.101 +		int count = 0;
   1.102 +		while (count < 3)
   1.103 +		{
   1.104 +			if (bind(s, (sockaddr *)&addr, sizeof(addr)))
   1.105 +			{
   1.106 +				addr.sin_port = htons(ntohs(addr.sin_port)+1);
   1.107 +			}
   1.108 +			else
   1.109 +				break;
   1.110 +		}
   1.111 +		if (count == 3)
   1.112 +		{
   1.113 +			fprintf(stderr, "Error binding \n");
   1.114 +			exit(-1);
   1.115 +		}
   1.116  
   1.117 -      fprintf(stderr, "Listening for a connection at port %d\n",
   1.118 -	      ntohs(addr.sin_port));
   1.119 +		fprintf(stderr, "Listening for a connection at port %d\n",
   1.120 +		        ntohs(addr.sin_port));
   1.121  
   1.122 -      if (listen(s, 1))
   1.123 -	{
   1.124 -	  fprintf(stderr, "Error listening\n");
   1.125 -	  exit(-1);
   1.126 -	}
   1.127 -
   1.128 +		if (listen(s, 1))
   1.129 +		{
   1.130 +			fprintf(stderr, "Error listening\n");
   1.131 +			exit(-1);
   1.132 +		}
   1.133 +		socklen_t len = sizeof(addr);
   1.134  
   1.135  #ifdef WIN32
   1.136 -      int flag = 0;
   1.137 -      ioctlsocket(s, FIONBIO, (unsigned long *)&flag);
   1.138 +		int flag = 0;
   1.139 +		ioctlsocket(s, FIONBIO, (unsigned long *)&flag);
   1.140  #endif // WIN32
   1.141 -
   1.142 -      socklen_t len = sizeof(addr);
   1.143 -
   1.144 -      int s2 = accept(s, (sockaddr *)&addr, &len);
   1.145 -      if (s2 > 0)
   1.146 -	{
   1.147 -	  fprintf(stderr, "Got a connection from %s %d\n",
   1.148 -		  inet_ntoa((in_addr)addr.sin_addr),
   1.149 -		  ntohs(addr.sin_port));
   1.150 +		int s2 = accept(s, (sockaddr *)&addr, &len);
   1.151 +		if (s2 > 0)
   1.152 +		{
   1.153 +			fprintf(stderr, "Got a connection from %s %d\n",
   1.154 +			        inet_ntoa((in_addr)addr.sin_addr),
   1.155 +			        ntohs(addr.sin_port));
   1.156 +		}
   1.157 +		else
   1.158 +		{
   1.159 +#ifdef WIN32
   1.160 +			int error = WSAGetLastError();
   1.161 +#endif // WIN32
   1.162 +		}
   1.163 +		char dummy;
   1.164 +		recv(s2, &dummy, 1, 0);
   1.165 +		if (dummy != '+')
   1.166 +		{
   1.167 +			fprintf(stderr, "ACK not received\n");
   1.168 +			exit(-1);
   1.169 +		}
   1.170 +		remoteSocket = s2;
   1.171 +		//    close(s);
   1.172  	}
   1.173 -      else
   1.174 -	{
   1.175 -#ifdef WIN32
   1.176 -	  int error = WSAGetLastError();
   1.177 -#endif // WIN32
   1.178 -	}
   1.179 -      char dummy;
   1.180 -      recv(s2, &dummy, 1, 0);
   1.181 -      if (dummy != '+')
   1.182 -	{
   1.183 -	  fprintf(stderr, "ACK not received\n");
   1.184 -	  exit(-1);
   1.185 -	}
   1.186 -      remoteSocket = s2;
   1.187 -      //    close(s);
   1.188 -    }
   1.189 -  return true;
   1.190 +	return true;
   1.191  }
   1.192  
   1.193  void remoteTcpCleanUp()
   1.194  {
   1.195 -  if (remoteSocket > 0)
   1.196 -    {
   1.197 -      fprintf(stderr, "Closing remote socket\n");
   1.198 -      close(remoteSocket);
   1.199 -      remoteSocket = -1;
   1.200 -    }
   1.201 -  if (remoteListenSocket > 0)
   1.202 -    {
   1.203 -      fprintf(stderr, "Closing listen socket\n");
   1.204 -      close(remoteListenSocket);
   1.205 -      remoteListenSocket = -1;
   1.206 -    }
   1.207 +	if (remoteSocket > 0)
   1.208 +	{
   1.209 +		fprintf(stderr, "Closing remote socket\n");
   1.210 +		close(remoteSocket);
   1.211 +		remoteSocket = -1;
   1.212 +	}
   1.213 +	if (remoteListenSocket > 0)
   1.214 +	{
   1.215 +		fprintf(stderr, "Closing listen socket\n");
   1.216 +		close(remoteListenSocket);
   1.217 +		remoteListenSocket = -1;
   1.218 +	}
   1.219  }
   1.220  
   1.221  int remotePipeSend(char *data, int len)
   1.222  {
   1.223 -  int res = write(1, data, len);
   1.224 -  return res;
   1.225 +	int res = write(1, data, len);
   1.226 +	return res;
   1.227  }
   1.228  
   1.229  int remotePipeRecv(char *data, int len)
   1.230  {
   1.231 -  int res = read(0, data, len);
   1.232 -  return res;
   1.233 +	int res = read(0, data, len);
   1.234 +	return res;
   1.235  }
   1.236  
   1.237  bool remotePipeInit()
   1.238  {
   1.239 -  char dummy;
   1.240 -  read(0, &dummy, 1);
   1.241 -  if (dummy != '+')
   1.242 -    {
   1.243 -      fprintf(stderr, "ACK not received\n");
   1.244 -      exit(-1);
   1.245 -    }
   1.246 +	char dummy;
   1.247 +	read(0, &dummy, 1);
   1.248 +	if (dummy != '+')
   1.249 +	{
   1.250 +		fprintf(stderr, "ACK not received\n");
   1.251 +		exit(-1);
   1.252 +	}
   1.253  
   1.254 -  return true;
   1.255 +	return true;
   1.256  }
   1.257  
   1.258  void remotePipeCleanUp()
   1.259 @@ -202,514 +200,514 @@
   1.260  
   1.261  void remoteSetPort(int port)
   1.262  {
   1.263 -  remotePort = port;
   1.264 +	remotePort = port;
   1.265  }
   1.266  
   1.267  void remoteSetProtocol(int p)
   1.268  {
   1.269 -  if (p == 0)
   1.270 -    {
   1.271 -      remoteSendFnc    = remoteTcpSend;
   1.272 -      remoteRecvFnc    = remoteTcpRecv;
   1.273 -      remoteInitFnc    = remoteTcpInit;
   1.274 -      remoteCleanUpFnc = remoteTcpCleanUp;
   1.275 -    }
   1.276 -  else
   1.277 -    {
   1.278 -      remoteSendFnc    = remotePipeSend;
   1.279 -      remoteRecvFnc    = remotePipeRecv;
   1.280 -      remoteInitFnc    = remotePipeInit;
   1.281 -      remoteCleanUpFnc = remotePipeCleanUp;
   1.282 -    }
   1.283 +	if (p == 0)
   1.284 +	{
   1.285 +		remoteSendFnc    = remoteTcpSend;
   1.286 +		remoteRecvFnc    = remoteTcpRecv;
   1.287 +		remoteInitFnc    = remoteTcpInit;
   1.288 +		remoteCleanUpFnc = remoteTcpCleanUp;
   1.289 +	}
   1.290 +	else
   1.291 +	{
   1.292 +		remoteSendFnc    = remotePipeSend;
   1.293 +		remoteRecvFnc    = remotePipeRecv;
   1.294 +		remoteInitFnc    = remotePipeInit;
   1.295 +		remoteCleanUpFnc = remotePipeCleanUp;
   1.296 +	}
   1.297  }
   1.298  
   1.299  void remoteInit()
   1.300  {
   1.301 -  if (remoteInitFnc)
   1.302 -    remoteInitFnc();
   1.303 +	if (remoteInitFnc)
   1.304 +		remoteInitFnc();
   1.305  }
   1.306  
   1.307  void remotePutPacket(char *packet)
   1.308  {
   1.309 -  char *hex = "0123456789abcdef";
   1.310 -  char  buffer[1024];
   1.311 +	char *hex = "0123456789abcdef";
   1.312 +	char  buffer[1024];
   1.313  
   1.314 -  int count = strlen(packet);
   1.315 +	int count = strlen(packet);
   1.316  
   1.317 -  unsigned char csum = 0;
   1.318 +	unsigned char csum = 0;
   1.319  
   1.320 -  char *p = buffer;
   1.321 -  *p++ = '$';
   1.322 +	char *p = buffer;
   1.323 +	*p++ = '$';
   1.324  
   1.325 -  for (int i = 0; i < count; i++)
   1.326 -    {
   1.327 -      csum += packet[i];
   1.328 -      *p++  = packet[i];
   1.329 -    }
   1.330 -  *p++ = '#';
   1.331 -  *p++ = hex[csum>>4];
   1.332 -  *p++ = hex[csum & 15];
   1.333 -  *p++ = 0;
   1.334 -  //  printf("Sending %s\n", buffer);
   1.335 -  remoteSendFnc(buffer, count + 4);
   1.336 +	for (int i = 0; i < count; i++)
   1.337 +	{
   1.338 +		csum += packet[i];
   1.339 +		*p++  = packet[i];
   1.340 +	}
   1.341 +	*p++ = '#';
   1.342 +	*p++ = hex[csum>>4];
   1.343 +	*p++ = hex[csum & 15];
   1.344 +	*p++ = 0;
   1.345 +	//  printf("Sending %s\n", buffer);
   1.346 +	remoteSendFnc(buffer, count + 4);
   1.347  
   1.348 -  char c = 0;
   1.349 -  remoteRecvFnc(&c, 1);
   1.350 -  /*
   1.351 -    if(c == '+')
   1.352 -    printf("ACK\n");
   1.353 -    else if(c=='-')
   1.354 -    printf("NACK\n");
   1.355 -  */
   1.356 +	char c = 0;
   1.357 +	remoteRecvFnc(&c, 1);
   1.358 +	/*
   1.359 +	   if(c == '+')
   1.360 +	   printf("ACK\n");
   1.361 +	   else if(c=='-')
   1.362 +	   printf("NACK\n");
   1.363 +	 */
   1.364  }
   1.365  
   1.366  void remoteOutput(char *s, u32 addr)
   1.367  {
   1.368 -  char buffer[16384];
   1.369 +	char buffer[16384];
   1.370  
   1.371 -  char *d = buffer;
   1.372 -  *d++ = 'O';
   1.373 +	char *d = buffer;
   1.374 +	*d++ = 'O';
   1.375  
   1.376 -  if (s)
   1.377 -    {
   1.378 -      char c = *s++;
   1.379 -      while (c)
   1.380 +	if (s)
   1.381  	{
   1.382 -	  sprintf(d, "%02x", c);
   1.383 -	  d += 2;
   1.384 -	  c  = *s++;
   1.385 +		char c = *s++;
   1.386 +		while (c)
   1.387 +		{
   1.388 +			sprintf(d, "%02x", c);
   1.389 +			d += 2;
   1.390 +			c  = *s++;
   1.391 +		}
   1.392  	}
   1.393 -    }
   1.394 -  else
   1.395 -    {
   1.396 -      char c = debuggerReadByte(addr);
   1.397 -      addr++;
   1.398 -      while (c)
   1.399 +	else
   1.400  	{
   1.401 -	  sprintf(d, "%02x", c);
   1.402 -	  d += 2;
   1.403 -	  c  = debuggerReadByte(addr);
   1.404 -	  addr++;
   1.405 +		char c = debuggerReadByte(addr);
   1.406 +		addr++;
   1.407 +		while (c)
   1.408 +		{
   1.409 +			sprintf(d, "%02x", c);
   1.410 +			d += 2;
   1.411 +			c  = debuggerReadByte(addr);
   1.412 +			addr++;
   1.413 +		}
   1.414  	}
   1.415 -    }
   1.416 -  remotePutPacket(buffer);
   1.417 -  //  fprintf(stderr, "Output sent %s\n", buffer);
   1.418 +	remotePutPacket(buffer);
   1.419 +	//  fprintf(stderr, "Output sent %s\n", buffer);
   1.420  }
   1.421  
   1.422  void remoteSendSignal()
   1.423  {
   1.424 -  char buffer[1024];
   1.425 -  sprintf(buffer, "S%02x", remoteSignal);
   1.426 -  remotePutPacket(buffer);
   1.427 +	char buffer[1024];
   1.428 +	sprintf(buffer, "S%02x", remoteSignal);
   1.429 +	remotePutPacket(buffer);
   1.430  }
   1.431  
   1.432  void remoteSendStatus()
   1.433  {
   1.434 -  char buffer[1024];
   1.435 -  sprintf(buffer, "T%02x", remoteSignal);
   1.436 -  char *s = buffer;
   1.437 -  s += 3;
   1.438 -  for (int i = 0; i < 15; i++)
   1.439 -    {
   1.440 -      u32 v = reg[i].I;
   1.441 -      sprintf(s, "%02x:%02x%02x%02x%02x;", i,
   1.442 -	      (v & 255),
   1.443 -	      (v >> 8) & 255,
   1.444 -	      (v >> 16) & 255,
   1.445 -	      (v >> 24) & 255);
   1.446 -      s += 12;
   1.447 -    }
   1.448 -  u32 v = armNextPC;
   1.449 -  sprintf(s, "0f:%02x%02x%02x%02x;", (v & 255),
   1.450 -	  (v >> 8) & 255,
   1.451 -	  (v >> 16) & 255,
   1.452 -	  (v >> 24) & 255);
   1.453 -  s += 12;
   1.454 -  CPUUpdateCPSR();
   1.455 -  v = reg[16].I;
   1.456 -  sprintf(s, "19:%02x%02x%02x%02x;", (v & 255),
   1.457 -	  (v >> 8) & 255,
   1.458 -	  (v >> 16) & 255,
   1.459 -	  (v >> 24) & 255);
   1.460 -  s += 12;
   1.461 -  *s = 0;
   1.462 -  //  printf("Sending %s\n", buffer);
   1.463 -  remotePutPacket(buffer);
   1.464 +	char buffer[1024];
   1.465 +	sprintf(buffer, "T%02x", remoteSignal);
   1.466 +	char *s = buffer;
   1.467 +	s += 3;
   1.468 +	for (int i = 0; i < 15; i++)
   1.469 +	{
   1.470 +		u32 v = reg[i].I;
   1.471 +		sprintf(s, "%02x:%02x%02x%02x%02x;", i,
   1.472 +		        (v & 255),
   1.473 +		        (v >> 8) & 255,
   1.474 +		        (v >> 16) & 255,
   1.475 +		        (v >> 24) & 255);
   1.476 +		s += 12;
   1.477 +	}
   1.478 +	u32 v = armNextPC;
   1.479 +	sprintf(s, "0f:%02x%02x%02x%02x;", (v & 255),
   1.480 +	        (v >> 8) & 255,
   1.481 +	        (v >> 16) & 255,
   1.482 +	        (v >> 24) & 255);
   1.483 +	s += 12;
   1.484 +	CPUUpdateCPSR();
   1.485 +	v = reg[16].I;
   1.486 +	sprintf(s, "19:%02x%02x%02x%02x;", (v & 255),
   1.487 +	        (v >> 8) & 255,
   1.488 +	        (v >> 16) & 255,
   1.489 +	        (v >> 24) & 255);
   1.490 +	s += 12;
   1.491 +	*s = 0;
   1.492 +	//  printf("Sending %s\n", buffer);
   1.493 +	remotePutPacket(buffer);
   1.494  }
   1.495  
   1.496  void remoteBinaryWrite(char *p)
   1.497  {
   1.498 -  u32 address;
   1.499 -  int count;
   1.500 -  sscanf(p, "%x,%x:", &address, &count);
   1.501 -  //  printf("Binary write for %08x %d\n", address, count);
   1.502 +	u32 address;
   1.503 +	int count;
   1.504 +	sscanf(p, "%x,%x:", &address, &count);
   1.505 +	//  printf("Binary write for %08x %d\n", address, count);
   1.506  
   1.507 -  p = strchr(p, ':');
   1.508 -  p++;
   1.509 -  for (int i = 0; i < count; i++)
   1.510 -    {
   1.511 -      u8 b = *p++;
   1.512 -      switch (b)
   1.513 +	p = strchr(p, ':');
   1.514 +	p++;
   1.515 +	for (int i = 0; i < count; i++)
   1.516  	{
   1.517 -	case 0x7d:
   1.518 -	  b = *p++;
   1.519 -	  debuggerWriteByte(address, (b^0x20));
   1.520 -	  address++;
   1.521 -	  break;
   1.522 -	default:
   1.523 -	  debuggerWriteByte(address, b);
   1.524 -	  address++;
   1.525 -	  break;
   1.526 +		u8 b = *p++;
   1.527 +		switch (b)
   1.528 +		{
   1.529 +		case 0x7d:
   1.530 +			b = *p++;
   1.531 +			debuggerWriteByte(address, (b^0x20));
   1.532 +			address++;
   1.533 +			break;
   1.534 +		default:
   1.535 +			debuggerWriteByte(address, b);
   1.536 +			address++;
   1.537 +			break;
   1.538 +		}
   1.539  	}
   1.540 -    }
   1.541 -  //  printf("ROM is %08x\n", debuggerReadMemory(0x8000254));
   1.542 -  remotePutPacket("OK");
   1.543 +	//  printf("ROM is %08x\n", debuggerReadMemory(0x8000254));
   1.544 +	remotePutPacket("OK");
   1.545  }
   1.546  
   1.547  void remoteMemoryWrite(char *p)
   1.548  {
   1.549 -  u32 address;
   1.550 -  int count;
   1.551 -  sscanf(p, "%x,%x:", &address, &count);
   1.552 -  //  printf("Memory write for %08x %d\n", address, count);
   1.553 +	u32 address;
   1.554 +	int count;
   1.555 +	sscanf(p, "%x,%x:", &address, &count);
   1.556 +	//  printf("Memory write for %08x %d\n", address, count);
   1.557  
   1.558 -  p = strchr(p, ':');
   1.559 -  p++;
   1.560 -  for (int i = 0; i < count; i++)
   1.561 -    {
   1.562 -      u8   v = 0;
   1.563 -      char c = *p++;
   1.564 -      if (c <= '9')
   1.565 -	v = (c - '0') << 4;
   1.566 -      else
   1.567 -	v = (c + 10 - 'a') << 4;
   1.568 -      c = *p++;
   1.569 -      if (c <= '9')
   1.570 -	v += (c - '0');
   1.571 -      else
   1.572 -	v += (c + 10 - 'a');
   1.573 -      debuggerWriteByte(address, v);
   1.574 -      address++;
   1.575 -    }
   1.576 -  //  printf("ROM is %08x\n", debuggerReadMemory(0x8000254));
   1.577 -  remotePutPacket("OK");
   1.578 +	p = strchr(p, ':');
   1.579 +	p++;
   1.580 +	for (int i = 0; i < count; i++)
   1.581 +	{
   1.582 +		u8   v = 0;
   1.583 +		char c = *p++;
   1.584 +		if (c <= '9')
   1.585 +			v = (c - '0') << 4;
   1.586 +		else
   1.587 +			v = (c + 10 - 'a') << 4;
   1.588 +		c = *p++;
   1.589 +		if (c <= '9')
   1.590 +			v += (c - '0');
   1.591 +		else
   1.592 +			v += (c + 10 - 'a');
   1.593 +		debuggerWriteByte(address, v);
   1.594 +		address++;
   1.595 +	}
   1.596 +	//  printf("ROM is %08x\n", debuggerReadMemory(0x8000254));
   1.597 +	remotePutPacket("OK");
   1.598  }
   1.599  
   1.600  void remoteMemoryRead(char *p)
   1.601  {
   1.602 -  u32 address;
   1.603 -  int count;
   1.604 -  sscanf(p, "%x,%x:", &address, &count);
   1.605 -  //  printf("Memory read for %08x %d\n", address, count);
   1.606 +	u32 address;
   1.607 +	int count;
   1.608 +	sscanf(p, "%x,%x:", &address, &count);
   1.609 +	//  printf("Memory read for %08x %d\n", address, count);
   1.610  
   1.611 -  char buffer[1024];
   1.612 +	char buffer[1024];
   1.613  
   1.614 -  char *s = buffer;
   1.615 -  for (int i = 0; i < count; i++)
   1.616 -    {
   1.617 -      u8 b = debuggerReadByte(address);
   1.618 -      sprintf(s, "%02x", b);
   1.619 -      address++;
   1.620 -      s += 2;
   1.621 -    }
   1.622 -  *s = 0;
   1.623 -  remotePutPacket(buffer);
   1.624 +	char *s = buffer;
   1.625 +	for (int i = 0; i < count; i++)
   1.626 +	{
   1.627 +		u8 b = debuggerReadByte(address);
   1.628 +		sprintf(s, "%02x", b);
   1.629 +		address++;
   1.630 +		s += 2;
   1.631 +	}
   1.632 +	*s = 0;
   1.633 +	remotePutPacket(buffer);
   1.634  }
   1.635  
   1.636  void remoteStepOverRange(char *p)
   1.637  {
   1.638 -  u32 address;
   1.639 -  u32 final;
   1.640 -  sscanf(p, "%x,%x", &address, &final);
   1.641 +	u32 address;
   1.642 +	u32 final;
   1.643 +	sscanf(p, "%x,%x", &address, &final);
   1.644  
   1.645 -  remotePutPacket("OK");
   1.646 +	remotePutPacket("OK");
   1.647  
   1.648 -  remoteResumed = true;
   1.649 -  do
   1.650 -    {
   1.651 -      CPULoop(1);
   1.652 -      if (debugger)
   1.653 -	break;
   1.654 -    }
   1.655 -  while (armNextPC >= address && armNextPC < final);
   1.656 +	remoteResumed = true;
   1.657 +	do
   1.658 +	{
   1.659 +		CPULoop(1);
   1.660 +		if (debugger)
   1.661 +			break;
   1.662 +	}
   1.663 +	while (armNextPC >= address && armNextPC < final);
   1.664  
   1.665 -  remoteResumed = false;
   1.666 +	remoteResumed = false;
   1.667  
   1.668 -  remoteSendStatus();
   1.669 +	remoteSendStatus();
   1.670  }
   1.671  
   1.672  void remoteWriteWatch(char *p, bool active)
   1.673  {
   1.674 -  u32 address;
   1.675 -  int count;
   1.676 -  sscanf(p, ",%x,%x#", &address, &count);
   1.677 +	u32 address;
   1.678 +	int count;
   1.679 +	sscanf(p, ",%x,%x#", &address, &count);
   1.680  
   1.681 -  fprintf(stderr, "Write watch for %08x %d\n", address, count);
   1.682 +	fprintf(stderr, "Write watch for %08x %d\n", address, count);
   1.683  
   1.684 -  if (address < 0x2000000 || address > 0x3007fff)
   1.685 -    {
   1.686 -      remotePutPacket("E01");
   1.687 -      return;
   1.688 -    }
   1.689 +	if (address < 0x2000000 || address > 0x3007fff)
   1.690 +	{
   1.691 +		remotePutPacket("E01");
   1.692 +		return;
   1.693 +	}
   1.694  
   1.695 -  if (address > 0x203ffff && address < 0x3000000)
   1.696 -    {
   1.697 -      remotePutPacket("E01");
   1.698 -      return;
   1.699 -    }
   1.700 +	if (address > 0x203ffff && address < 0x3000000)
   1.701 +	{
   1.702 +		remotePutPacket("E01");
   1.703 +		return;
   1.704 +	}
   1.705  
   1.706 -  u32 final = address + count;
   1.707 +	u32 final = address + count;
   1.708  
   1.709 -  if (address < 0x2040000 && final > 0x2040000)
   1.710 -    {
   1.711 -      remotePutPacket("E01");
   1.712 -      return;
   1.713 -    }
   1.714 -  else if (address < 0x3008000 && final > 0x3008000)
   1.715 -    {
   1.716 -      remotePutPacket("E01");
   1.717 -      return;
   1.718 -    }
   1.719 +	if (address < 0x2040000 && final > 0x2040000)
   1.720 +	{
   1.721 +		remotePutPacket("E01");
   1.722 +		return;
   1.723 +	}
   1.724 +	else if (address < 0x3008000 && final > 0x3008000)
   1.725 +	{
   1.726 +		remotePutPacket("E01");
   1.727 +		return;
   1.728 +	}
   1.729  
   1.730 -  for (int i = 0; i < count; i++)
   1.731 -    {
   1.732 -      if ((address >> 24) == 2)
   1.733 -	freezeWorkRAM[address & 0x3ffff] = active;
   1.734 -      else
   1.735 -	freezeInternalRAM[address & 0x7fff] = active;
   1.736 -      address++;
   1.737 -    }
   1.738 +	for (int i = 0; i < count; i++)
   1.739 +	{
   1.740 +		if ((address >> 24) == 2)
   1.741 +			freezeWorkRAM[address & 0x3ffff] = active;
   1.742 +		else
   1.743 +			freezeInternalRAM[address & 0x7fff] = active;
   1.744 +		address++;
   1.745 +	}
   1.746  
   1.747 -  remotePutPacket("OK");
   1.748 +	remotePutPacket("OK");
   1.749  }
   1.750  
   1.751  void remoteReadRegisters(char *p)
   1.752  {
   1.753 -  char buffer[1024];
   1.754 +	char buffer[1024];
   1.755  
   1.756 -  char *s = buffer;
   1.757 -  int   i;
   1.758 -  // regular registers
   1.759 -  for (i = 0; i < 15; i++)
   1.760 -    {
   1.761 -      u32 v = reg[i].I;
   1.762 -      sprintf(s, "%02x%02x%02x%02x",  v & 255, (v >> 8) & 255,
   1.763 -	      (v >> 16) & 255, (v >> 24) & 255);
   1.764 -      s += 8;
   1.765 -    }
   1.766 -  // PC
   1.767 -  u32 pc = armNextPC;
   1.768 -  sprintf(s, "%02x%02x%02x%02x", pc & 255, (pc >> 8) & 255,
   1.769 -	  (pc >> 16) & 255, (pc >> 24) & 255);
   1.770 -  s += 8;
   1.771 +	char *s = buffer;
   1.772 +	int   i;
   1.773 +	// regular registers
   1.774 +	for (i = 0; i < 15; i++)
   1.775 +	{
   1.776 +		u32 v = reg[i].I;
   1.777 +		sprintf(s, "%02x%02x%02x%02x",  v & 255, (v >> 8) & 255,
   1.778 +		        (v >> 16) & 255, (v >> 24) & 255);
   1.779 +		s += 8;
   1.780 +	}
   1.781 +	// PC
   1.782 +	u32 pc = armNextPC;
   1.783 +	sprintf(s, "%02x%02x%02x%02x", pc & 255, (pc >> 8) & 255,
   1.784 +	        (pc >> 16) & 255, (pc >> 24) & 255);
   1.785 +	s += 8;
   1.786  
   1.787 -  // floating point registers (24-bit)
   1.788 -  for (i = 0; i < 8; i++)
   1.789 -    {
   1.790 -      sprintf(s, "000000000000000000000000");
   1.791 -      s += 24;
   1.792 -    }
   1.793 +	// floating point registers (24-bit)
   1.794 +	for (i = 0; i < 8; i++)
   1.795 +	{
   1.796 +		sprintf(s, "000000000000000000000000");
   1.797 +		s += 24;
   1.798 +	}
   1.799  
   1.800 -  // FP status register
   1.801 -  sprintf(s, "00000000");
   1.802 -  s += 8;
   1.803 -  // CPSR
   1.804 -  CPUUpdateCPSR();
   1.805 -  u32 v = reg[16].I;
   1.806 -  sprintf(s, "%02x%02x%02x%02x",  v & 255, (v >> 8) & 255,
   1.807 -	  (v >> 16) & 255, (v >> 24) & 255);
   1.808 -  s += 8;
   1.809 -  *s = 0;
   1.810 -  remotePutPacket(buffer);
   1.811 +	// FP status register
   1.812 +	sprintf(s, "00000000");
   1.813 +	s += 8;
   1.814 +	// CPSR
   1.815 +	CPUUpdateCPSR();
   1.816 +	u32 v = reg[16].I;
   1.817 +	sprintf(s, "%02x%02x%02x%02x",  v & 255, (v >> 8) & 255,
   1.818 +	        (v >> 16) & 255, (v >> 24) & 255);
   1.819 +	s += 8;
   1.820 +	*s = 0;
   1.821 +	remotePutPacket(buffer);
   1.822  }
   1.823  
   1.824  void remoteWriteRegister(char *p)
   1.825  {
   1.826 -  int r;
   1.827 +	int r;
   1.828  
   1.829 -  sscanf(p, "%x=", &r);
   1.830 +	sscanf(p, "%x=", &r);
   1.831  
   1.832 -  p = strchr(p, '=');
   1.833 -  p++;
   1.834 +	p = strchr(p, '=');
   1.835 +	p++;
   1.836  
   1.837 -  char c = *p++;
   1.838 +	char c = *p++;
   1.839  
   1.840 -  u32 v = 0;
   1.841 +	u32 v = 0;
   1.842  
   1.843 -  u8 data[4] = {0, 0, 0, 0};
   1.844 +	u8 data[4] = {0, 0, 0, 0};
   1.845  
   1.846 -  int i = 0;
   1.847 +	int i = 0;
   1.848  
   1.849 -  while (c != '#')
   1.850 -    {
   1.851 -      u8 b = 0;
   1.852 -      if (c <= '9')
   1.853 -	b = (c - '0') << 4;
   1.854 -      else
   1.855 -	b = (c + 10 - 'a') << 4;
   1.856 -      c = *p++;
   1.857 -      if (c <= '9')
   1.858 -	b += (c - '0');
   1.859 -      else
   1.860 -	b += (c + 10 - 'a');
   1.861 -      data[i++] = b;
   1.862 -      c         = *p++;
   1.863 -    }
   1.864 +	while (c != '#')
   1.865 +	{
   1.866 +		u8 b = 0;
   1.867 +		if (c <= '9')
   1.868 +			b = (c - '0') << 4;
   1.869 +		else
   1.870 +			b = (c + 10 - 'a') << 4;
   1.871 +		c = *p++;
   1.872 +		if (c <= '9')
   1.873 +			b += (c - '0');
   1.874 +		else
   1.875 +			b += (c + 10 - 'a');
   1.876 +		data[i++] = b;
   1.877 +		c         = *p++;
   1.878 +	}
   1.879  
   1.880 -  v = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
   1.881 +	v = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
   1.882  
   1.883 -  //  printf("Write register %d=%08x\n", r, v);
   1.884 -  reg[r].I = v;
   1.885 -  if (r == 15)
   1.886 -    {
   1.887 -      armNextPC = v;
   1.888 -      if (armState)
   1.889 -	reg[15].I = v + 4;
   1.890 -      else
   1.891 -	reg[15].I = v + 2;
   1.892 -    }
   1.893 -  remotePutPacket("OK");
   1.894 +	//  printf("Write register %d=%08x\n", r, v);
   1.895 +	reg[r].I = v;
   1.896 +	if (r == 15)
   1.897 +	{
   1.898 +		armNextPC = v;
   1.899 +		if (armState)
   1.900 +			reg[15].I = v + 4;
   1.901 +		else
   1.902 +			reg[15].I = v + 2;
   1.903 +	}
   1.904 +	remotePutPacket("OK");
   1.905  }
   1.906  
   1.907  void remoteStubMain()
   1.908  {
   1.909 -  if (!debugger)
   1.910 -    return;
   1.911 +	if (!debugger)
   1.912 +		return;
   1.913  
   1.914 -  if (remoteResumed)
   1.915 -    {
   1.916 -      remoteSendStatus();
   1.917 -      remoteResumed = false;
   1.918 -    }
   1.919 -
   1.920 -  while (true)
   1.921 -    {
   1.922 -      char buffer[1024];
   1.923 -      int  res = remoteRecvFnc(buffer, 1024);
   1.924 -
   1.925 -      if (res == -1)
   1.926 +	if (remoteResumed)
   1.927  	{
   1.928 -	  fprintf(stderr, "GDB connection lost\n");
   1.929 -#ifdef SDL
   1.930 -	  dbgMain   = debuggerMain;
   1.931 -	  dbgSignal = debuggerSignal;
   1.932 -#endif
   1.933 -	  debugger = false;
   1.934 -	  break;
   1.935 +		remoteSendStatus();
   1.936 +		remoteResumed = false;
   1.937  	}
   1.938  
   1.939 -      //    fprintf(stderr, "Received %s\n", buffer);
   1.940 -      char *p  = buffer;
   1.941 -      char  c  = *p++;
   1.942 -      char  pp = '+';
   1.943 -      remoteSendFnc(&pp, 1);
   1.944 +	while (true)
   1.945 +	{
   1.946 +		char buffer[1024];
   1.947 +		int  res = remoteRecvFnc(buffer, 1024);
   1.948  
   1.949 -      if (c != '$')
   1.950 -	continue;
   1.951 -      c = *p++;
   1.952 -      switch (c)
   1.953 -	{
   1.954 -	case '?':
   1.955 -	  remoteSendSignal();
   1.956 -	  break;
   1.957 -	case 'D':
   1.958 -	  remotePutPacket("OK");
   1.959 +		if (res == -1)
   1.960 +		{
   1.961 +			fprintf(stderr, "GDB connection lost\n");
   1.962  #ifdef SDL
   1.963 -	  dbgMain   = debuggerMain;
   1.964 -	  dbgSignal = debuggerSignal;
   1.965 +			dbgMain   = debuggerMain;
   1.966 +			dbgSignal = debuggerSignal;
   1.967  #endif
   1.968 -	  remoteResumed = true;
   1.969 -	  debugger      = false;
   1.970 -	  return;
   1.971 -	case 'e':
   1.972 -	  remoteStepOverRange(p);
   1.973 -	  break;
   1.974 -	case 'k':
   1.975 -	  remotePutPacket("OK");
   1.976 +			debugger = false;
   1.977 +			break;
   1.978 +		}
   1.979 +
   1.980 +		//    fprintf(stderr, "Received %s\n", buffer);
   1.981 +		char *p  = buffer;
   1.982 +		char  c  = *p++;
   1.983 +		char  pp = '+';
   1.984 +		remoteSendFnc(&pp, 1);
   1.985 +
   1.986 +		if (c != '$')
   1.987 +			continue;
   1.988 +		c = *p++;
   1.989 +		switch (c)
   1.990 +		{
   1.991 +		case '?':
   1.992 +			remoteSendSignal();
   1.993 +			break;
   1.994 +		case 'D':
   1.995 +			remotePutPacket("OK");
   1.996  #ifdef SDL
   1.997 -	  dbgMain   = debuggerMain;
   1.998 -	  dbgSignal = debuggerSignal;
   1.999 +			dbgMain   = debuggerMain;
  1.1000 +			dbgSignal = debuggerSignal;
  1.1001  #endif
  1.1002 -	  debugger  = false;
  1.1003 -	  emulating = false;
  1.1004 -	  return;
  1.1005 -	case 'C':
  1.1006 -	  remoteResumed = true;
  1.1007 -	  debugger      = false;
  1.1008 -	  return;
  1.1009 -	case 'c':
  1.1010 -	  remoteResumed = true;
  1.1011 -	  debugger      = false;
  1.1012 -	  return;
  1.1013 -	case 's':
  1.1014 -	  remoteResumed = true;
  1.1015 -	  remoteSignal  = 5;
  1.1016 -	  CPULoop(1);
  1.1017 -	  if (remoteResumed)
  1.1018 -	    {
  1.1019 -	      remoteResumed = false;
  1.1020 -	      remoteSendStatus();
  1.1021 -	    }
  1.1022 -	  break;
  1.1023 -	case 'g':
  1.1024 -	  remoteReadRegisters(p);
  1.1025 -	  break;
  1.1026 -	case 'P':
  1.1027 -	  remoteWriteRegister(p);
  1.1028 -	  break;
  1.1029 -	case 'M':
  1.1030 -	  remoteMemoryWrite(p);
  1.1031 -	  break;
  1.1032 -	case 'm':
  1.1033 -	  remoteMemoryRead(p);
  1.1034 -	  break;
  1.1035 -	case 'X':
  1.1036 -	  remoteBinaryWrite(p);
  1.1037 -	  break;
  1.1038 -	case 'H':
  1.1039 -	  remotePutPacket("OK");
  1.1040 -	  break;
  1.1041 -	case 'q':
  1.1042 -	  remotePutPacket("");
  1.1043 -	  break;
  1.1044 -	case 'Z':
  1.1045 -	  if (*p++ == '2')
  1.1046 -	    {
  1.1047 -	      remoteWriteWatch(p, true);
  1.1048 -	    }
  1.1049 -	  else
  1.1050 -	    remotePutPacket("");
  1.1051 -	  break;
  1.1052 -	case 'z':
  1.1053 -	  if (*p++ == '2')
  1.1054 -	    {
  1.1055 -	      remoteWriteWatch(p, false);
  1.1056 -	    }
  1.1057 -	  else
  1.1058 -	    remotePutPacket("");
  1.1059 -	  break;
  1.1060 -	default:
  1.1061 -	  {
  1.1062 -	    *(strchr(p, '#') + 3) = 0;
  1.1063 -	    fprintf(stderr, "Unknown packet %s\n", --p);
  1.1064 -	    remotePutPacket("");
  1.1065 -	    break;
  1.1066 -	  }
  1.1067 +			remoteResumed = true;
  1.1068 +			debugger      = false;
  1.1069 +			return;
  1.1070 +		case 'e':
  1.1071 +			remoteStepOverRange(p);
  1.1072 +			break;
  1.1073 +		case 'k':
  1.1074 +			remotePutPacket("OK");
  1.1075 +#ifdef SDL
  1.1076 +			dbgMain   = debuggerMain;
  1.1077 +			dbgSignal = debuggerSignal;
  1.1078 +#endif
  1.1079 +			debugger  = false;
  1.1080 +			emulating = false;
  1.1081 +			return;
  1.1082 +		case 'C':
  1.1083 +			remoteResumed = true;
  1.1084 +			debugger      = false;
  1.1085 +			return;
  1.1086 +		case 'c':
  1.1087 +			remoteResumed = true;
  1.1088 +			debugger      = false;
  1.1089 +			return;
  1.1090 +		case 's':
  1.1091 +			remoteResumed = true;
  1.1092 +			remoteSignal  = 5;
  1.1093 +			CPULoop(1);
  1.1094 +			if (remoteResumed)
  1.1095 +			{
  1.1096 +				remoteResumed = false;
  1.1097 +				remoteSendStatus();
  1.1098 +			}
  1.1099 +			break;
  1.1100 +		case 'g':
  1.1101 +			remoteReadRegisters(p);
  1.1102 +			break;
  1.1103 +		case 'P':
  1.1104 +			remoteWriteRegister(p);
  1.1105 +			break;
  1.1106 +		case 'M':
  1.1107 +			remoteMemoryWrite(p);
  1.1108 +			break;
  1.1109 +		case 'm':
  1.1110 +			remoteMemoryRead(p);
  1.1111 +			break;
  1.1112 +		case 'X':
  1.1113 +			remoteBinaryWrite(p);
  1.1114 +			break;
  1.1115 +		case 'H':
  1.1116 +			remotePutPacket("OK");
  1.1117 +			break;
  1.1118 +		case 'q':
  1.1119 +			remotePutPacket("");
  1.1120 +			break;
  1.1121 +		case 'Z':
  1.1122 +			if (*p++ == '2')
  1.1123 +			{
  1.1124 +				remoteWriteWatch(p, true);
  1.1125 +			}
  1.1126 +			else
  1.1127 +				remotePutPacket("");
  1.1128 +			break;
  1.1129 +		case 'z':
  1.1130 +			if (*p++ == '2')
  1.1131 +			{
  1.1132 +				remoteWriteWatch(p, false);
  1.1133 +			}
  1.1134 +			else
  1.1135 +				remotePutPacket("");
  1.1136 +			break;
  1.1137 +		default:
  1.1138 +		{
  1.1139 +			*(strchr(p, '#') + 3) = 0;
  1.1140 +			fprintf(stderr, "Unknown packet %s\n", --p);
  1.1141 +			remotePutPacket("");
  1.1142 +			break;
  1.1143 +		}
  1.1144 +		}
  1.1145  	}
  1.1146 -    }
  1.1147  }
  1.1148  
  1.1149  void remoteStubSignal(int sig, int number)
  1.1150  {
  1.1151 -  remoteSignal  = sig;
  1.1152 -  remoteResumed = false;
  1.1153 -  remoteSendStatus();
  1.1154 -  debugger = true;
  1.1155 +	remoteSignal  = sig;
  1.1156 +	remoteResumed = false;
  1.1157 +	remoteSendStatus();
  1.1158 +	debugger = true;
  1.1159  }
  1.1160  
  1.1161  void remoteCleanUp()
  1.1162  {
  1.1163 -  if (remoteCleanUpFnc)
  1.1164 -    remoteCleanUpFnc();
  1.1165 +	if (remoteCleanUpFnc)
  1.1166 +		remoteCleanUpFnc();
  1.1167  }
  1.1168