changeset 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 bf9169ad4222
files commands.sh correct.sh src/gba/remote.cpp wrong.sh
diffstat 4 files changed, 519 insertions(+), 495 deletions(-) [+]
line wrap: on
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/commands.sh	Sun Mar 04 17:35:30 2012 -0600
     1.3 @@ -0,0 +1,9 @@
     1.4 +# This buffer is for notes you don't want to save, and for Lisp evaluation.
     1.5 +# If you want to create a file, visit that file with C-x C-f,
     1.6 +# then enter the text in that file's own buffer.
     1.7 +
     1.8 +
     1.9 +./VisualBoyAdvance ../../../pokemon-escape/roms/Pokemon\ Yellow\ \(U\)\ \[C\]\[\!\].gbc                                     
    1.10 +
    1.11 +
    1.12 +./VisualBoyAdvance --recordmovie=./rlm.vbm ../../../pokemon-escape/roms/Pokemon\ Yellow\ \(U\)\ \[C\]\[\!\].gbc                                     
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/correct.sh	Sun Mar 04 17:35:30 2012 -0600
     2.3 @@ -0,0 +1,9 @@
     2.4 +cd ./src/gba
     2.5 +
     2.6 +g++ -DHAVE_ARPA_INET_H=1  \
     2.7 +    -DHAVE_NETINET_IN_H=1 \
     2.8 +    -fno-exceptions \
     2.9 +    -I. -I../../../src/gba -I../..  -I../../../src \
    2.10 +    -g -O2 \
    2.11 +    -MT remote.o -MD -MP -MF .deps/remote.Tpo -c \
    2.12 +    -o remote.o ../../../src/gba/remote.cpp
     3.1 --- a/src/gba/remote.cpp	Sun Mar 04 16:56:20 2012 -0600
     3.2 +++ b/src/gba/remote.cpp	Sun Mar 04 17:35:30 2012 -0600
     3.3 @@ -1,6 +1,7 @@
     3.4  #include <cstdlib>
     3.5  #include <cstdio>
     3.6  #include <cstring>
     3.7 +#include <config.h>
     3.8  
     3.9  #ifndef WIN32
    3.10  # include <unistd.h>
    3.11 @@ -51,150 +52,147 @@
    3.12  #if (defined WIN32 && !defined SDL)
    3.13  void remoteSetSockets(SOCKET l, SOCKET r)
    3.14  {
    3.15 -  remoteSocket       = r;
    3.16 -  remoteListenSocket = l;
    3.17 +	remoteSocket       = r;
    3.18 +	remoteListenSocket = l;
    3.19  }
    3.20  
    3.21  #endif
    3.22  
    3.23  int remoteTcpSend(char *data, int len)
    3.24  {
    3.25 -  return send(remoteSocket, data, len, 0);
    3.26 +	return send(remoteSocket, data, len, 0);
    3.27  }
    3.28  
    3.29  int remoteTcpRecv(char *data, int len)
    3.30  {
    3.31 -  return recv(remoteSocket, data, len, 0);
    3.32 +	return recv(remoteSocket, data, len, 0);
    3.33  }
    3.34  
    3.35  bool remoteTcpInit()
    3.36  {
    3.37 -  if (remoteSocket == -1)
    3.38 -    {
    3.39 +	if (remoteSocket == -1)
    3.40 +	{
    3.41  #ifdef WIN32
    3.42 -      WSADATA wsaData;
    3.43 -      int     error = WSAStartup(MAKEWORD(1, 1), &wsaData);
    3.44 +		WSADATA wsaData;
    3.45 +		int     error = WSAStartup(MAKEWORD(1, 1), &wsaData);
    3.46  #endif // WIN32
    3.47 -      int s = socket(PF_INET, SOCK_STREAM, 0);
    3.48 +		int s = socket(PF_INET, SOCK_STREAM, 0);
    3.49  
    3.50 -      remoteListenSocket = s;
    3.51 +		remoteListenSocket = s;
    3.52  
    3.53 -      if (s < 0)
    3.54 -	{
    3.55 -	  fprintf(stderr, "Error opening socket\n");
    3.56 -	  exit(-1);
    3.57 -	}
    3.58 -      int tmp = 1;
    3.59 -      setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp, sizeof(tmp));
    3.60 +		if (s < 0)
    3.61 +		{
    3.62 +			fprintf(stderr, "Error opening socket\n");
    3.63 +			exit(-1);
    3.64 +		}
    3.65 +		int tmp = 1;
    3.66 +		setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp, sizeof(tmp));
    3.67  
    3.68 -      //    char hostname[256];
    3.69 -      //    gethostname(hostname, 256);
    3.70 +		//    char hostname[256];
    3.71 +		//    gethostname(hostname, 256);
    3.72  
    3.73 -      //    hostent *ent = gethostbyname(hostname);
    3.74 -      //    unsigned long a = *((unsigned long *)ent->h_addr);
    3.75 +		//    hostent *ent = gethostbyname(hostname);
    3.76 +		//    unsigned long a = *((unsigned long *)ent->h_addr);
    3.77  
    3.78 -      sockaddr_in addr;
    3.79 -      addr.sin_family      = AF_INET;
    3.80 -      addr.sin_port        = htons(remotePort);
    3.81 -      addr.sin_addr.s_addr = htonl(0);
    3.82 -      int count = 0;
    3.83 -      while (count < 3)
    3.84 -	{
    3.85 -	  if (bind(s, (sockaddr *)&addr, sizeof(addr)))
    3.86 -	    {
    3.87 -	      addr.sin_port = htons(ntohs(addr.sin_port)+1);
    3.88 -	    }
    3.89 -	  else
    3.90 -	    break;
    3.91 -	}
    3.92 -      if (count == 3)
    3.93 -	{
    3.94 -	  fprintf(stderr, "Error binding \n");
    3.95 -	  exit(-1);
    3.96 -	}
    3.97 +		sockaddr_in addr;
    3.98 +		addr.sin_family      = AF_INET;
    3.99 +		addr.sin_port        = htons(remotePort);
   3.100 +		addr.sin_addr.s_addr = htonl(0);
   3.101 +		int count = 0;
   3.102 +		while (count < 3)
   3.103 +		{
   3.104 +			if (bind(s, (sockaddr *)&addr, sizeof(addr)))
   3.105 +			{
   3.106 +				addr.sin_port = htons(ntohs(addr.sin_port)+1);
   3.107 +			}
   3.108 +			else
   3.109 +				break;
   3.110 +		}
   3.111 +		if (count == 3)
   3.112 +		{
   3.113 +			fprintf(stderr, "Error binding \n");
   3.114 +			exit(-1);
   3.115 +		}
   3.116  
   3.117 -      fprintf(stderr, "Listening for a connection at port %d\n",
   3.118 -	      ntohs(addr.sin_port));
   3.119 +		fprintf(stderr, "Listening for a connection at port %d\n",
   3.120 +		        ntohs(addr.sin_port));
   3.121  
   3.122 -      if (listen(s, 1))
   3.123 -	{
   3.124 -	  fprintf(stderr, "Error listening\n");
   3.125 -	  exit(-1);
   3.126 -	}
   3.127 -
   3.128 +		if (listen(s, 1))
   3.129 +		{
   3.130 +			fprintf(stderr, "Error listening\n");
   3.131 +			exit(-1);
   3.132 +		}
   3.133 +		socklen_t len = sizeof(addr);
   3.134  
   3.135  #ifdef WIN32
   3.136 -      int flag = 0;
   3.137 -      ioctlsocket(s, FIONBIO, (unsigned long *)&flag);
   3.138 +		int flag = 0;
   3.139 +		ioctlsocket(s, FIONBIO, (unsigned long *)&flag);
   3.140  #endif // WIN32
   3.141 -
   3.142 -      socklen_t len = sizeof(addr);
   3.143 -
   3.144 -      int s2 = accept(s, (sockaddr *)&addr, &len);
   3.145 -      if (s2 > 0)
   3.146 -	{
   3.147 -	  fprintf(stderr, "Got a connection from %s %d\n",
   3.148 -		  inet_ntoa((in_addr)addr.sin_addr),
   3.149 -		  ntohs(addr.sin_port));
   3.150 +		int s2 = accept(s, (sockaddr *)&addr, &len);
   3.151 +		if (s2 > 0)
   3.152 +		{
   3.153 +			fprintf(stderr, "Got a connection from %s %d\n",
   3.154 +			        inet_ntoa((in_addr)addr.sin_addr),
   3.155 +			        ntohs(addr.sin_port));
   3.156 +		}
   3.157 +		else
   3.158 +		{
   3.159 +#ifdef WIN32
   3.160 +			int error = WSAGetLastError();
   3.161 +#endif // WIN32
   3.162 +		}
   3.163 +		char dummy;
   3.164 +		recv(s2, &dummy, 1, 0);
   3.165 +		if (dummy != '+')
   3.166 +		{
   3.167 +			fprintf(stderr, "ACK not received\n");
   3.168 +			exit(-1);
   3.169 +		}
   3.170 +		remoteSocket = s2;
   3.171 +		//    close(s);
   3.172  	}
   3.173 -      else
   3.174 -	{
   3.175 -#ifdef WIN32
   3.176 -	  int error = WSAGetLastError();
   3.177 -#endif // WIN32
   3.178 -	}
   3.179 -      char dummy;
   3.180 -      recv(s2, &dummy, 1, 0);
   3.181 -      if (dummy != '+')
   3.182 -	{
   3.183 -	  fprintf(stderr, "ACK not received\n");
   3.184 -	  exit(-1);
   3.185 -	}
   3.186 -      remoteSocket = s2;
   3.187 -      //    close(s);
   3.188 -    }
   3.189 -  return true;
   3.190 +	return true;
   3.191  }
   3.192  
   3.193  void remoteTcpCleanUp()
   3.194  {
   3.195 -  if (remoteSocket > 0)
   3.196 -    {
   3.197 -      fprintf(stderr, "Closing remote socket\n");
   3.198 -      close(remoteSocket);
   3.199 -      remoteSocket = -1;
   3.200 -    }
   3.201 -  if (remoteListenSocket > 0)
   3.202 -    {
   3.203 -      fprintf(stderr, "Closing listen socket\n");
   3.204 -      close(remoteListenSocket);
   3.205 -      remoteListenSocket = -1;
   3.206 -    }
   3.207 +	if (remoteSocket > 0)
   3.208 +	{
   3.209 +		fprintf(stderr, "Closing remote socket\n");
   3.210 +		close(remoteSocket);
   3.211 +		remoteSocket = -1;
   3.212 +	}
   3.213 +	if (remoteListenSocket > 0)
   3.214 +	{
   3.215 +		fprintf(stderr, "Closing listen socket\n");
   3.216 +		close(remoteListenSocket);
   3.217 +		remoteListenSocket = -1;
   3.218 +	}
   3.219  }
   3.220  
   3.221  int remotePipeSend(char *data, int len)
   3.222  {
   3.223 -  int res = write(1, data, len);
   3.224 -  return res;
   3.225 +	int res = write(1, data, len);
   3.226 +	return res;
   3.227  }
   3.228  
   3.229  int remotePipeRecv(char *data, int len)
   3.230  {
   3.231 -  int res = read(0, data, len);
   3.232 -  return res;
   3.233 +	int res = read(0, data, len);
   3.234 +	return res;
   3.235  }
   3.236  
   3.237  bool remotePipeInit()
   3.238  {
   3.239 -  char dummy;
   3.240 -  read(0, &dummy, 1);
   3.241 -  if (dummy != '+')
   3.242 -    {
   3.243 -      fprintf(stderr, "ACK not received\n");
   3.244 -      exit(-1);
   3.245 -    }
   3.246 +	char dummy;
   3.247 +	read(0, &dummy, 1);
   3.248 +	if (dummy != '+')
   3.249 +	{
   3.250 +		fprintf(stderr, "ACK not received\n");
   3.251 +		exit(-1);
   3.252 +	}
   3.253  
   3.254 -  return true;
   3.255 +	return true;
   3.256  }
   3.257  
   3.258  void remotePipeCleanUp()
   3.259 @@ -202,514 +200,514 @@
   3.260  
   3.261  void remoteSetPort(int port)
   3.262  {
   3.263 -  remotePort = port;
   3.264 +	remotePort = port;
   3.265  }
   3.266  
   3.267  void remoteSetProtocol(int p)
   3.268  {
   3.269 -  if (p == 0)
   3.270 -    {
   3.271 -      remoteSendFnc    = remoteTcpSend;
   3.272 -      remoteRecvFnc    = remoteTcpRecv;
   3.273 -      remoteInitFnc    = remoteTcpInit;
   3.274 -      remoteCleanUpFnc = remoteTcpCleanUp;
   3.275 -    }
   3.276 -  else
   3.277 -    {
   3.278 -      remoteSendFnc    = remotePipeSend;
   3.279 -      remoteRecvFnc    = remotePipeRecv;
   3.280 -      remoteInitFnc    = remotePipeInit;
   3.281 -      remoteCleanUpFnc = remotePipeCleanUp;
   3.282 -    }
   3.283 +	if (p == 0)
   3.284 +	{
   3.285 +		remoteSendFnc    = remoteTcpSend;
   3.286 +		remoteRecvFnc    = remoteTcpRecv;
   3.287 +		remoteInitFnc    = remoteTcpInit;
   3.288 +		remoteCleanUpFnc = remoteTcpCleanUp;
   3.289 +	}
   3.290 +	else
   3.291 +	{
   3.292 +		remoteSendFnc    = remotePipeSend;
   3.293 +		remoteRecvFnc    = remotePipeRecv;
   3.294 +		remoteInitFnc    = remotePipeInit;
   3.295 +		remoteCleanUpFnc = remotePipeCleanUp;
   3.296 +	}
   3.297  }
   3.298  
   3.299  void remoteInit()
   3.300  {
   3.301 -  if (remoteInitFnc)
   3.302 -    remoteInitFnc();
   3.303 +	if (remoteInitFnc)
   3.304 +		remoteInitFnc();
   3.305  }
   3.306  
   3.307  void remotePutPacket(char *packet)
   3.308  {
   3.309 -  char *hex = "0123456789abcdef";
   3.310 -  char  buffer[1024];
   3.311 +	char *hex = "0123456789abcdef";
   3.312 +	char  buffer[1024];
   3.313  
   3.314 -  int count = strlen(packet);
   3.315 +	int count = strlen(packet);
   3.316  
   3.317 -  unsigned char csum = 0;
   3.318 +	unsigned char csum = 0;
   3.319  
   3.320 -  char *p = buffer;
   3.321 -  *p++ = '$';
   3.322 +	char *p = buffer;
   3.323 +	*p++ = '$';
   3.324  
   3.325 -  for (int i = 0; i < count; i++)
   3.326 -    {
   3.327 -      csum += packet[i];
   3.328 -      *p++  = packet[i];
   3.329 -    }
   3.330 -  *p++ = '#';
   3.331 -  *p++ = hex[csum>>4];
   3.332 -  *p++ = hex[csum & 15];
   3.333 -  *p++ = 0;
   3.334 -  //  printf("Sending %s\n", buffer);
   3.335 -  remoteSendFnc(buffer, count + 4);
   3.336 +	for (int i = 0; i < count; i++)
   3.337 +	{
   3.338 +		csum += packet[i];
   3.339 +		*p++  = packet[i];
   3.340 +	}
   3.341 +	*p++ = '#';
   3.342 +	*p++ = hex[csum>>4];
   3.343 +	*p++ = hex[csum & 15];
   3.344 +	*p++ = 0;
   3.345 +	//  printf("Sending %s\n", buffer);
   3.346 +	remoteSendFnc(buffer, count + 4);
   3.347  
   3.348 -  char c = 0;
   3.349 -  remoteRecvFnc(&c, 1);
   3.350 -  /*
   3.351 -    if(c == '+')
   3.352 -    printf("ACK\n");
   3.353 -    else if(c=='-')
   3.354 -    printf("NACK\n");
   3.355 -  */
   3.356 +	char c = 0;
   3.357 +	remoteRecvFnc(&c, 1);
   3.358 +	/*
   3.359 +	   if(c == '+')
   3.360 +	   printf("ACK\n");
   3.361 +	   else if(c=='-')
   3.362 +	   printf("NACK\n");
   3.363 +	 */
   3.364  }
   3.365  
   3.366  void remoteOutput(char *s, u32 addr)
   3.367  {
   3.368 -  char buffer[16384];
   3.369 +	char buffer[16384];
   3.370  
   3.371 -  char *d = buffer;
   3.372 -  *d++ = 'O';
   3.373 +	char *d = buffer;
   3.374 +	*d++ = 'O';
   3.375  
   3.376 -  if (s)
   3.377 -    {
   3.378 -      char c = *s++;
   3.379 -      while (c)
   3.380 +	if (s)
   3.381  	{
   3.382 -	  sprintf(d, "%02x", c);
   3.383 -	  d += 2;
   3.384 -	  c  = *s++;
   3.385 +		char c = *s++;
   3.386 +		while (c)
   3.387 +		{
   3.388 +			sprintf(d, "%02x", c);
   3.389 +			d += 2;
   3.390 +			c  = *s++;
   3.391 +		}
   3.392  	}
   3.393 -    }
   3.394 -  else
   3.395 -    {
   3.396 -      char c = debuggerReadByte(addr);
   3.397 -      addr++;
   3.398 -      while (c)
   3.399 +	else
   3.400  	{
   3.401 -	  sprintf(d, "%02x", c);
   3.402 -	  d += 2;
   3.403 -	  c  = debuggerReadByte(addr);
   3.404 -	  addr++;
   3.405 +		char c = debuggerReadByte(addr);
   3.406 +		addr++;
   3.407 +		while (c)
   3.408 +		{
   3.409 +			sprintf(d, "%02x", c);
   3.410 +			d += 2;
   3.411 +			c  = debuggerReadByte(addr);
   3.412 +			addr++;
   3.413 +		}
   3.414  	}
   3.415 -    }
   3.416 -  remotePutPacket(buffer);
   3.417 -  //  fprintf(stderr, "Output sent %s\n", buffer);
   3.418 +	remotePutPacket(buffer);
   3.419 +	//  fprintf(stderr, "Output sent %s\n", buffer);
   3.420  }
   3.421  
   3.422  void remoteSendSignal()
   3.423  {
   3.424 -  char buffer[1024];
   3.425 -  sprintf(buffer, "S%02x", remoteSignal);
   3.426 -  remotePutPacket(buffer);
   3.427 +	char buffer[1024];
   3.428 +	sprintf(buffer, "S%02x", remoteSignal);
   3.429 +	remotePutPacket(buffer);
   3.430  }
   3.431  
   3.432  void remoteSendStatus()
   3.433  {
   3.434 -  char buffer[1024];
   3.435 -  sprintf(buffer, "T%02x", remoteSignal);
   3.436 -  char *s = buffer;
   3.437 -  s += 3;
   3.438 -  for (int i = 0; i < 15; i++)
   3.439 -    {
   3.440 -      u32 v = reg[i].I;
   3.441 -      sprintf(s, "%02x:%02x%02x%02x%02x;", i,
   3.442 -	      (v & 255),
   3.443 -	      (v >> 8) & 255,
   3.444 -	      (v >> 16) & 255,
   3.445 -	      (v >> 24) & 255);
   3.446 -      s += 12;
   3.447 -    }
   3.448 -  u32 v = armNextPC;
   3.449 -  sprintf(s, "0f:%02x%02x%02x%02x;", (v & 255),
   3.450 -	  (v >> 8) & 255,
   3.451 -	  (v >> 16) & 255,
   3.452 -	  (v >> 24) & 255);
   3.453 -  s += 12;
   3.454 -  CPUUpdateCPSR();
   3.455 -  v = reg[16].I;
   3.456 -  sprintf(s, "19:%02x%02x%02x%02x;", (v & 255),
   3.457 -	  (v >> 8) & 255,
   3.458 -	  (v >> 16) & 255,
   3.459 -	  (v >> 24) & 255);
   3.460 -  s += 12;
   3.461 -  *s = 0;
   3.462 -  //  printf("Sending %s\n", buffer);
   3.463 -  remotePutPacket(buffer);
   3.464 +	char buffer[1024];
   3.465 +	sprintf(buffer, "T%02x", remoteSignal);
   3.466 +	char *s = buffer;
   3.467 +	s += 3;
   3.468 +	for (int i = 0; i < 15; i++)
   3.469 +	{
   3.470 +		u32 v = reg[i].I;
   3.471 +		sprintf(s, "%02x:%02x%02x%02x%02x;", i,
   3.472 +		        (v & 255),
   3.473 +		        (v >> 8) & 255,
   3.474 +		        (v >> 16) & 255,
   3.475 +		        (v >> 24) & 255);
   3.476 +		s += 12;
   3.477 +	}
   3.478 +	u32 v = armNextPC;
   3.479 +	sprintf(s, "0f:%02x%02x%02x%02x;", (v & 255),
   3.480 +	        (v >> 8) & 255,
   3.481 +	        (v >> 16) & 255,
   3.482 +	        (v >> 24) & 255);
   3.483 +	s += 12;
   3.484 +	CPUUpdateCPSR();
   3.485 +	v = reg[16].I;
   3.486 +	sprintf(s, "19:%02x%02x%02x%02x;", (v & 255),
   3.487 +	        (v >> 8) & 255,
   3.488 +	        (v >> 16) & 255,
   3.489 +	        (v >> 24) & 255);
   3.490 +	s += 12;
   3.491 +	*s = 0;
   3.492 +	//  printf("Sending %s\n", buffer);
   3.493 +	remotePutPacket(buffer);
   3.494  }
   3.495  
   3.496  void remoteBinaryWrite(char *p)
   3.497  {
   3.498 -  u32 address;
   3.499 -  int count;
   3.500 -  sscanf(p, "%x,%x:", &address, &count);
   3.501 -  //  printf("Binary write for %08x %d\n", address, count);
   3.502 +	u32 address;
   3.503 +	int count;
   3.504 +	sscanf(p, "%x,%x:", &address, &count);
   3.505 +	//  printf("Binary write for %08x %d\n", address, count);
   3.506  
   3.507 -  p = strchr(p, ':');
   3.508 -  p++;
   3.509 -  for (int i = 0; i < count; i++)
   3.510 -    {
   3.511 -      u8 b = *p++;
   3.512 -      switch (b)
   3.513 +	p = strchr(p, ':');
   3.514 +	p++;
   3.515 +	for (int i = 0; i < count; i++)
   3.516  	{
   3.517 -	case 0x7d:
   3.518 -	  b = *p++;
   3.519 -	  debuggerWriteByte(address, (b^0x20));
   3.520 -	  address++;
   3.521 -	  break;
   3.522 -	default:
   3.523 -	  debuggerWriteByte(address, b);
   3.524 -	  address++;
   3.525 -	  break;
   3.526 +		u8 b = *p++;
   3.527 +		switch (b)
   3.528 +		{
   3.529 +		case 0x7d:
   3.530 +			b = *p++;
   3.531 +			debuggerWriteByte(address, (b^0x20));
   3.532 +			address++;
   3.533 +			break;
   3.534 +		default:
   3.535 +			debuggerWriteByte(address, b);
   3.536 +			address++;
   3.537 +			break;
   3.538 +		}
   3.539  	}
   3.540 -    }
   3.541 -  //  printf("ROM is %08x\n", debuggerReadMemory(0x8000254));
   3.542 -  remotePutPacket("OK");
   3.543 +	//  printf("ROM is %08x\n", debuggerReadMemory(0x8000254));
   3.544 +	remotePutPacket("OK");
   3.545  }
   3.546  
   3.547  void remoteMemoryWrite(char *p)
   3.548  {
   3.549 -  u32 address;
   3.550 -  int count;
   3.551 -  sscanf(p, "%x,%x:", &address, &count);
   3.552 -  //  printf("Memory write for %08x %d\n", address, count);
   3.553 +	u32 address;
   3.554 +	int count;
   3.555 +	sscanf(p, "%x,%x:", &address, &count);
   3.556 +	//  printf("Memory write for %08x %d\n", address, count);
   3.557  
   3.558 -  p = strchr(p, ':');
   3.559 -  p++;
   3.560 -  for (int i = 0; i < count; i++)
   3.561 -    {
   3.562 -      u8   v = 0;
   3.563 -      char c = *p++;
   3.564 -      if (c <= '9')
   3.565 -	v = (c - '0') << 4;
   3.566 -      else
   3.567 -	v = (c + 10 - 'a') << 4;
   3.568 -      c = *p++;
   3.569 -      if (c <= '9')
   3.570 -	v += (c - '0');
   3.571 -      else
   3.572 -	v += (c + 10 - 'a');
   3.573 -      debuggerWriteByte(address, v);
   3.574 -      address++;
   3.575 -    }
   3.576 -  //  printf("ROM is %08x\n", debuggerReadMemory(0x8000254));
   3.577 -  remotePutPacket("OK");
   3.578 +	p = strchr(p, ':');
   3.579 +	p++;
   3.580 +	for (int i = 0; i < count; i++)
   3.581 +	{
   3.582 +		u8   v = 0;
   3.583 +		char c = *p++;
   3.584 +		if (c <= '9')
   3.585 +			v = (c - '0') << 4;
   3.586 +		else
   3.587 +			v = (c + 10 - 'a') << 4;
   3.588 +		c = *p++;
   3.589 +		if (c <= '9')
   3.590 +			v += (c - '0');
   3.591 +		else
   3.592 +			v += (c + 10 - 'a');
   3.593 +		debuggerWriteByte(address, v);
   3.594 +		address++;
   3.595 +	}
   3.596 +	//  printf("ROM is %08x\n", debuggerReadMemory(0x8000254));
   3.597 +	remotePutPacket("OK");
   3.598  }
   3.599  
   3.600  void remoteMemoryRead(char *p)
   3.601  {
   3.602 -  u32 address;
   3.603 -  int count;
   3.604 -  sscanf(p, "%x,%x:", &address, &count);
   3.605 -  //  printf("Memory read for %08x %d\n", address, count);
   3.606 +	u32 address;
   3.607 +	int count;
   3.608 +	sscanf(p, "%x,%x:", &address, &count);
   3.609 +	//  printf("Memory read for %08x %d\n", address, count);
   3.610  
   3.611 -  char buffer[1024];
   3.612 +	char buffer[1024];
   3.613  
   3.614 -  char *s = buffer;
   3.615 -  for (int i = 0; i < count; i++)
   3.616 -    {
   3.617 -      u8 b = debuggerReadByte(address);
   3.618 -      sprintf(s, "%02x", b);
   3.619 -      address++;
   3.620 -      s += 2;
   3.621 -    }
   3.622 -  *s = 0;
   3.623 -  remotePutPacket(buffer);
   3.624 +	char *s = buffer;
   3.625 +	for (int i = 0; i < count; i++)
   3.626 +	{
   3.627 +		u8 b = debuggerReadByte(address);
   3.628 +		sprintf(s, "%02x", b);
   3.629 +		address++;
   3.630 +		s += 2;
   3.631 +	}
   3.632 +	*s = 0;
   3.633 +	remotePutPacket(buffer);
   3.634  }
   3.635  
   3.636  void remoteStepOverRange(char *p)
   3.637  {
   3.638 -  u32 address;
   3.639 -  u32 final;
   3.640 -  sscanf(p, "%x,%x", &address, &final);
   3.641 +	u32 address;
   3.642 +	u32 final;
   3.643 +	sscanf(p, "%x,%x", &address, &final);
   3.644  
   3.645 -  remotePutPacket("OK");
   3.646 +	remotePutPacket("OK");
   3.647  
   3.648 -  remoteResumed = true;
   3.649 -  do
   3.650 -    {
   3.651 -      CPULoop(1);
   3.652 -      if (debugger)
   3.653 -	break;
   3.654 -    }
   3.655 -  while (armNextPC >= address && armNextPC < final);
   3.656 +	remoteResumed = true;
   3.657 +	do
   3.658 +	{
   3.659 +		CPULoop(1);
   3.660 +		if (debugger)
   3.661 +			break;
   3.662 +	}
   3.663 +	while (armNextPC >= address && armNextPC < final);
   3.664  
   3.665 -  remoteResumed = false;
   3.666 +	remoteResumed = false;
   3.667  
   3.668 -  remoteSendStatus();
   3.669 +	remoteSendStatus();
   3.670  }
   3.671  
   3.672  void remoteWriteWatch(char *p, bool active)
   3.673  {
   3.674 -  u32 address;
   3.675 -  int count;
   3.676 -  sscanf(p, ",%x,%x#", &address, &count);
   3.677 +	u32 address;
   3.678 +	int count;
   3.679 +	sscanf(p, ",%x,%x#", &address, &count);
   3.680  
   3.681 -  fprintf(stderr, "Write watch for %08x %d\n", address, count);
   3.682 +	fprintf(stderr, "Write watch for %08x %d\n", address, count);
   3.683  
   3.684 -  if (address < 0x2000000 || address > 0x3007fff)
   3.685 -    {
   3.686 -      remotePutPacket("E01");
   3.687 -      return;
   3.688 -    }
   3.689 +	if (address < 0x2000000 || address > 0x3007fff)
   3.690 +	{
   3.691 +		remotePutPacket("E01");
   3.692 +		return;
   3.693 +	}
   3.694  
   3.695 -  if (address > 0x203ffff && address < 0x3000000)
   3.696 -    {
   3.697 -      remotePutPacket("E01");
   3.698 -      return;
   3.699 -    }
   3.700 +	if (address > 0x203ffff && address < 0x3000000)
   3.701 +	{
   3.702 +		remotePutPacket("E01");
   3.703 +		return;
   3.704 +	}
   3.705  
   3.706 -  u32 final = address + count;
   3.707 +	u32 final = address + count;
   3.708  
   3.709 -  if (address < 0x2040000 && final > 0x2040000)
   3.710 -    {
   3.711 -      remotePutPacket("E01");
   3.712 -      return;
   3.713 -    }
   3.714 -  else if (address < 0x3008000 && final > 0x3008000)
   3.715 -    {
   3.716 -      remotePutPacket("E01");
   3.717 -      return;
   3.718 -    }
   3.719 +	if (address < 0x2040000 && final > 0x2040000)
   3.720 +	{
   3.721 +		remotePutPacket("E01");
   3.722 +		return;
   3.723 +	}
   3.724 +	else if (address < 0x3008000 && final > 0x3008000)
   3.725 +	{
   3.726 +		remotePutPacket("E01");
   3.727 +		return;
   3.728 +	}
   3.729  
   3.730 -  for (int i = 0; i < count; i++)
   3.731 -    {
   3.732 -      if ((address >> 24) == 2)
   3.733 -	freezeWorkRAM[address & 0x3ffff] = active;
   3.734 -      else
   3.735 -	freezeInternalRAM[address & 0x7fff] = active;
   3.736 -      address++;
   3.737 -    }
   3.738 +	for (int i = 0; i < count; i++)
   3.739 +	{
   3.740 +		if ((address >> 24) == 2)
   3.741 +			freezeWorkRAM[address & 0x3ffff] = active;
   3.742 +		else
   3.743 +			freezeInternalRAM[address & 0x7fff] = active;
   3.744 +		address++;
   3.745 +	}
   3.746  
   3.747 -  remotePutPacket("OK");
   3.748 +	remotePutPacket("OK");
   3.749  }
   3.750  
   3.751  void remoteReadRegisters(char *p)
   3.752  {
   3.753 -  char buffer[1024];
   3.754 +	char buffer[1024];
   3.755  
   3.756 -  char *s = buffer;
   3.757 -  int   i;
   3.758 -  // regular registers
   3.759 -  for (i = 0; i < 15; i++)
   3.760 -    {
   3.761 -      u32 v = reg[i].I;
   3.762 -      sprintf(s, "%02x%02x%02x%02x",  v & 255, (v >> 8) & 255,
   3.763 -	      (v >> 16) & 255, (v >> 24) & 255);
   3.764 -      s += 8;
   3.765 -    }
   3.766 -  // PC
   3.767 -  u32 pc = armNextPC;
   3.768 -  sprintf(s, "%02x%02x%02x%02x", pc & 255, (pc >> 8) & 255,
   3.769 -	  (pc >> 16) & 255, (pc >> 24) & 255);
   3.770 -  s += 8;
   3.771 +	char *s = buffer;
   3.772 +	int   i;
   3.773 +	// regular registers
   3.774 +	for (i = 0; i < 15; i++)
   3.775 +	{
   3.776 +		u32 v = reg[i].I;
   3.777 +		sprintf(s, "%02x%02x%02x%02x",  v & 255, (v >> 8) & 255,
   3.778 +		        (v >> 16) & 255, (v >> 24) & 255);
   3.779 +		s += 8;
   3.780 +	}
   3.781 +	// PC
   3.782 +	u32 pc = armNextPC;
   3.783 +	sprintf(s, "%02x%02x%02x%02x", pc & 255, (pc >> 8) & 255,
   3.784 +	        (pc >> 16) & 255, (pc >> 24) & 255);
   3.785 +	s += 8;
   3.786  
   3.787 -  // floating point registers (24-bit)
   3.788 -  for (i = 0; i < 8; i++)
   3.789 -    {
   3.790 -      sprintf(s, "000000000000000000000000");
   3.791 -      s += 24;
   3.792 -    }
   3.793 +	// floating point registers (24-bit)
   3.794 +	for (i = 0; i < 8; i++)
   3.795 +	{
   3.796 +		sprintf(s, "000000000000000000000000");
   3.797 +		s += 24;
   3.798 +	}
   3.799  
   3.800 -  // FP status register
   3.801 -  sprintf(s, "00000000");
   3.802 -  s += 8;
   3.803 -  // CPSR
   3.804 -  CPUUpdateCPSR();
   3.805 -  u32 v = reg[16].I;
   3.806 -  sprintf(s, "%02x%02x%02x%02x",  v & 255, (v >> 8) & 255,
   3.807 -	  (v >> 16) & 255, (v >> 24) & 255);
   3.808 -  s += 8;
   3.809 -  *s = 0;
   3.810 -  remotePutPacket(buffer);
   3.811 +	// FP status register
   3.812 +	sprintf(s, "00000000");
   3.813 +	s += 8;
   3.814 +	// CPSR
   3.815 +	CPUUpdateCPSR();
   3.816 +	u32 v = reg[16].I;
   3.817 +	sprintf(s, "%02x%02x%02x%02x",  v & 255, (v >> 8) & 255,
   3.818 +	        (v >> 16) & 255, (v >> 24) & 255);
   3.819 +	s += 8;
   3.820 +	*s = 0;
   3.821 +	remotePutPacket(buffer);
   3.822  }
   3.823  
   3.824  void remoteWriteRegister(char *p)
   3.825  {
   3.826 -  int r;
   3.827 +	int r;
   3.828  
   3.829 -  sscanf(p, "%x=", &r);
   3.830 +	sscanf(p, "%x=", &r);
   3.831  
   3.832 -  p = strchr(p, '=');
   3.833 -  p++;
   3.834 +	p = strchr(p, '=');
   3.835 +	p++;
   3.836  
   3.837 -  char c = *p++;
   3.838 +	char c = *p++;
   3.839  
   3.840 -  u32 v = 0;
   3.841 +	u32 v = 0;
   3.842  
   3.843 -  u8 data[4] = {0, 0, 0, 0};
   3.844 +	u8 data[4] = {0, 0, 0, 0};
   3.845  
   3.846 -  int i = 0;
   3.847 +	int i = 0;
   3.848  
   3.849 -  while (c != '#')
   3.850 -    {
   3.851 -      u8 b = 0;
   3.852 -      if (c <= '9')
   3.853 -	b = (c - '0') << 4;
   3.854 -      else
   3.855 -	b = (c + 10 - 'a') << 4;
   3.856 -      c = *p++;
   3.857 -      if (c <= '9')
   3.858 -	b += (c - '0');
   3.859 -      else
   3.860 -	b += (c + 10 - 'a');
   3.861 -      data[i++] = b;
   3.862 -      c         = *p++;
   3.863 -    }
   3.864 +	while (c != '#')
   3.865 +	{
   3.866 +		u8 b = 0;
   3.867 +		if (c <= '9')
   3.868 +			b = (c - '0') << 4;
   3.869 +		else
   3.870 +			b = (c + 10 - 'a') << 4;
   3.871 +		c = *p++;
   3.872 +		if (c <= '9')
   3.873 +			b += (c - '0');
   3.874 +		else
   3.875 +			b += (c + 10 - 'a');
   3.876 +		data[i++] = b;
   3.877 +		c         = *p++;
   3.878 +	}
   3.879  
   3.880 -  v = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
   3.881 +	v = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
   3.882  
   3.883 -  //  printf("Write register %d=%08x\n", r, v);
   3.884 -  reg[r].I = v;
   3.885 -  if (r == 15)
   3.886 -    {
   3.887 -      armNextPC = v;
   3.888 -      if (armState)
   3.889 -	reg[15].I = v + 4;
   3.890 -      else
   3.891 -	reg[15].I = v + 2;
   3.892 -    }
   3.893 -  remotePutPacket("OK");
   3.894 +	//  printf("Write register %d=%08x\n", r, v);
   3.895 +	reg[r].I = v;
   3.896 +	if (r == 15)
   3.897 +	{
   3.898 +		armNextPC = v;
   3.899 +		if (armState)
   3.900 +			reg[15].I = v + 4;
   3.901 +		else
   3.902 +			reg[15].I = v + 2;
   3.903 +	}
   3.904 +	remotePutPacket("OK");
   3.905  }
   3.906  
   3.907  void remoteStubMain()
   3.908  {
   3.909 -  if (!debugger)
   3.910 -    return;
   3.911 +	if (!debugger)
   3.912 +		return;
   3.913  
   3.914 -  if (remoteResumed)
   3.915 -    {
   3.916 -      remoteSendStatus();
   3.917 -      remoteResumed = false;
   3.918 -    }
   3.919 -
   3.920 -  while (true)
   3.921 -    {
   3.922 -      char buffer[1024];
   3.923 -      int  res = remoteRecvFnc(buffer, 1024);
   3.924 -
   3.925 -      if (res == -1)
   3.926 +	if (remoteResumed)
   3.927  	{
   3.928 -	  fprintf(stderr, "GDB connection lost\n");
   3.929 -#ifdef SDL
   3.930 -	  dbgMain   = debuggerMain;
   3.931 -	  dbgSignal = debuggerSignal;
   3.932 -#endif
   3.933 -	  debugger = false;
   3.934 -	  break;
   3.935 +		remoteSendStatus();
   3.936 +		remoteResumed = false;
   3.937  	}
   3.938  
   3.939 -      //    fprintf(stderr, "Received %s\n", buffer);
   3.940 -      char *p  = buffer;
   3.941 -      char  c  = *p++;
   3.942 -      char  pp = '+';
   3.943 -      remoteSendFnc(&pp, 1);
   3.944 +	while (true)
   3.945 +	{
   3.946 +		char buffer[1024];
   3.947 +		int  res = remoteRecvFnc(buffer, 1024);
   3.948  
   3.949 -      if (c != '$')
   3.950 -	continue;
   3.951 -      c = *p++;
   3.952 -      switch (c)
   3.953 -	{
   3.954 -	case '?':
   3.955 -	  remoteSendSignal();
   3.956 -	  break;
   3.957 -	case 'D':
   3.958 -	  remotePutPacket("OK");
   3.959 +		if (res == -1)
   3.960 +		{
   3.961 +			fprintf(stderr, "GDB connection lost\n");
   3.962  #ifdef SDL
   3.963 -	  dbgMain   = debuggerMain;
   3.964 -	  dbgSignal = debuggerSignal;
   3.965 +			dbgMain   = debuggerMain;
   3.966 +			dbgSignal = debuggerSignal;
   3.967  #endif
   3.968 -	  remoteResumed = true;
   3.969 -	  debugger      = false;
   3.970 -	  return;
   3.971 -	case 'e':
   3.972 -	  remoteStepOverRange(p);
   3.973 -	  break;
   3.974 -	case 'k':
   3.975 -	  remotePutPacket("OK");
   3.976 +			debugger = false;
   3.977 +			break;
   3.978 +		}
   3.979 +
   3.980 +		//    fprintf(stderr, "Received %s\n", buffer);
   3.981 +		char *p  = buffer;
   3.982 +		char  c  = *p++;
   3.983 +		char  pp = '+';
   3.984 +		remoteSendFnc(&pp, 1);
   3.985 +
   3.986 +		if (c != '$')
   3.987 +			continue;
   3.988 +		c = *p++;
   3.989 +		switch (c)
   3.990 +		{
   3.991 +		case '?':
   3.992 +			remoteSendSignal();
   3.993 +			break;
   3.994 +		case 'D':
   3.995 +			remotePutPacket("OK");
   3.996  #ifdef SDL
   3.997 -	  dbgMain   = debuggerMain;
   3.998 -	  dbgSignal = debuggerSignal;
   3.999 +			dbgMain   = debuggerMain;
  3.1000 +			dbgSignal = debuggerSignal;
  3.1001  #endif
  3.1002 -	  debugger  = false;
  3.1003 -	  emulating = false;
  3.1004 -	  return;
  3.1005 -	case 'C':
  3.1006 -	  remoteResumed = true;
  3.1007 -	  debugger      = false;
  3.1008 -	  return;
  3.1009 -	case 'c':
  3.1010 -	  remoteResumed = true;
  3.1011 -	  debugger      = false;
  3.1012 -	  return;
  3.1013 -	case 's':
  3.1014 -	  remoteResumed = true;
  3.1015 -	  remoteSignal  = 5;
  3.1016 -	  CPULoop(1);
  3.1017 -	  if (remoteResumed)
  3.1018 -	    {
  3.1019 -	      remoteResumed = false;
  3.1020 -	      remoteSendStatus();
  3.1021 -	    }
  3.1022 -	  break;
  3.1023 -	case 'g':
  3.1024 -	  remoteReadRegisters(p);
  3.1025 -	  break;
  3.1026 -	case 'P':
  3.1027 -	  remoteWriteRegister(p);
  3.1028 -	  break;
  3.1029 -	case 'M':
  3.1030 -	  remoteMemoryWrite(p);
  3.1031 -	  break;
  3.1032 -	case 'm':
  3.1033 -	  remoteMemoryRead(p);
  3.1034 -	  break;
  3.1035 -	case 'X':
  3.1036 -	  remoteBinaryWrite(p);
  3.1037 -	  break;
  3.1038 -	case 'H':
  3.1039 -	  remotePutPacket("OK");
  3.1040 -	  break;
  3.1041 -	case 'q':
  3.1042 -	  remotePutPacket("");
  3.1043 -	  break;
  3.1044 -	case 'Z':
  3.1045 -	  if (*p++ == '2')
  3.1046 -	    {
  3.1047 -	      remoteWriteWatch(p, true);
  3.1048 -	    }
  3.1049 -	  else
  3.1050 -	    remotePutPacket("");
  3.1051 -	  break;
  3.1052 -	case 'z':
  3.1053 -	  if (*p++ == '2')
  3.1054 -	    {
  3.1055 -	      remoteWriteWatch(p, false);
  3.1056 -	    }
  3.1057 -	  else
  3.1058 -	    remotePutPacket("");
  3.1059 -	  break;
  3.1060 -	default:
  3.1061 -	  {
  3.1062 -	    *(strchr(p, '#') + 3) = 0;
  3.1063 -	    fprintf(stderr, "Unknown packet %s\n", --p);
  3.1064 -	    remotePutPacket("");
  3.1065 -	    break;
  3.1066 -	  }
  3.1067 +			remoteResumed = true;
  3.1068 +			debugger      = false;
  3.1069 +			return;
  3.1070 +		case 'e':
  3.1071 +			remoteStepOverRange(p);
  3.1072 +			break;
  3.1073 +		case 'k':
  3.1074 +			remotePutPacket("OK");
  3.1075 +#ifdef SDL
  3.1076 +			dbgMain   = debuggerMain;
  3.1077 +			dbgSignal = debuggerSignal;
  3.1078 +#endif
  3.1079 +			debugger  = false;
  3.1080 +			emulating = false;
  3.1081 +			return;
  3.1082 +		case 'C':
  3.1083 +			remoteResumed = true;
  3.1084 +			debugger      = false;
  3.1085 +			return;
  3.1086 +		case 'c':
  3.1087 +			remoteResumed = true;
  3.1088 +			debugger      = false;
  3.1089 +			return;
  3.1090 +		case 's':
  3.1091 +			remoteResumed = true;
  3.1092 +			remoteSignal  = 5;
  3.1093 +			CPULoop(1);
  3.1094 +			if (remoteResumed)
  3.1095 +			{
  3.1096 +				remoteResumed = false;
  3.1097 +				remoteSendStatus();
  3.1098 +			}
  3.1099 +			break;
  3.1100 +		case 'g':
  3.1101 +			remoteReadRegisters(p);
  3.1102 +			break;
  3.1103 +		case 'P':
  3.1104 +			remoteWriteRegister(p);
  3.1105 +			break;
  3.1106 +		case 'M':
  3.1107 +			remoteMemoryWrite(p);
  3.1108 +			break;
  3.1109 +		case 'm':
  3.1110 +			remoteMemoryRead(p);
  3.1111 +			break;
  3.1112 +		case 'X':
  3.1113 +			remoteBinaryWrite(p);
  3.1114 +			break;
  3.1115 +		case 'H':
  3.1116 +			remotePutPacket("OK");
  3.1117 +			break;
  3.1118 +		case 'q':
  3.1119 +			remotePutPacket("");
  3.1120 +			break;
  3.1121 +		case 'Z':
  3.1122 +			if (*p++ == '2')
  3.1123 +			{
  3.1124 +				remoteWriteWatch(p, true);
  3.1125 +			}
  3.1126 +			else
  3.1127 +				remotePutPacket("");
  3.1128 +			break;
  3.1129 +		case 'z':
  3.1130 +			if (*p++ == '2')
  3.1131 +			{
  3.1132 +				remoteWriteWatch(p, false);
  3.1133 +			}
  3.1134 +			else
  3.1135 +				remotePutPacket("");
  3.1136 +			break;
  3.1137 +		default:
  3.1138 +		{
  3.1139 +			*(strchr(p, '#') + 3) = 0;
  3.1140 +			fprintf(stderr, "Unknown packet %s\n", --p);
  3.1141 +			remotePutPacket("");
  3.1142 +			break;
  3.1143 +		}
  3.1144 +		}
  3.1145  	}
  3.1146 -    }
  3.1147  }
  3.1148  
  3.1149  void remoteStubSignal(int sig, int number)
  3.1150  {
  3.1151 -  remoteSignal  = sig;
  3.1152 -  remoteResumed = false;
  3.1153 -  remoteSendStatus();
  3.1154 -  debugger = true;
  3.1155 +	remoteSignal  = sig;
  3.1156 +	remoteResumed = false;
  3.1157 +	remoteSendStatus();
  3.1158 +	debugger = true;
  3.1159  }
  3.1160  
  3.1161  void remoteCleanUp()
  3.1162  {
  3.1163 -  if (remoteCleanUpFnc)
  3.1164 -    remoteCleanUpFnc();
  3.1165 +	if (remoteCleanUpFnc)
  3.1166 +		remoteCleanUpFnc();
  3.1167  }
  3.1168  
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/wrong.sh	Sun Mar 04 17:35:30 2012 -0600
     4.3 @@ -0,0 +1,8 @@
     4.4 +cd ./src/gba
     4.5 +
     4.6 +g++ -DHAVE_CONFIG_H \
     4.7 +    -I. -I../../../src/gba -I../..  -I../../../src \
     4.8 +    -DSDL -DSYSCONFDIR=\"/usr/local/etc\"  \
     4.9 +    -fno-exceptions  -g -O2 \
    4.10 +    -MT remote.o -MD -MP -MF .deps/remote.Tpo -c \
    4.11 +    -o remote.o ../../../src/gba/remote.cpp