X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2Fdebug_net.c;h=7fd540b935e64f4d9b0d6263e9de8300f9bfa594;hb=9db6a54485501b56b0f2f5db4d093c38fe495bda;hp=0305a1a73ef8255378fe1a99e1285e2be8fb78c7;hpb=5686d93123821e06ac2d9f6209c37438303dd4c1;p=picodrive.git diff --git a/cpu/debug_net.c b/cpu/debug_net.c index 0305a1a..7fd540b 100644 --- a/cpu/debug_net.c +++ b/cpu/debug_net.c @@ -1,4 +1,12 @@ +/* + * PDB, the PicoDrive debugger + * (C) notaz, 2010 + * + * This work is licensed under the terms of MAME license. + * See COPYING file in the top-level directory. + */ #include +#include #include #include #include @@ -23,8 +31,12 @@ int main(int argc, char *argv[]) struct sockaddr_in6 sa; packet_t packet1, packet2; int i, ret, cnt, cpuid; + int check_len_override = 0; socklen_t sal; + if (argv[1] != NULL) + check_len_override = atoi(argv[1]); + memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_CANONNAME; hints.ai_family = PF_UNSPEC; @@ -78,6 +90,7 @@ int main(int argc, char *argv[]) for (cnt = 0; ; cnt++) { + int len; #define tmp_size (4+4 + 24*4 + 2*4) ret = recv(sock1, &packet1, tmp_size, MSG_WAITALL); if (ret != tmp_size) { @@ -97,12 +110,18 @@ int main(int argc, char *argv[]) } cpuid = packet1.header.cpuid; - if (memcmp(&packet1, &packet2, sizeof(packet1.header) + packet1.header.len) == 0) { + len = sizeof(packet1.header) + packet1.header.len; + if (check_len_override > 0) + len = check_len_override; + + if (memcmp(&packet1, &packet2, len) == 0) { pc_trace[cpuid][pc_trace_p[cpuid]++ & 3] = packet1.regs[0]; continue; } - if (*(int *)&packet1.header != *(int *)&packet2.header) + if (packet1.header.cpuid != packet2.header.cpuid) + printf("%d: CPU %d %d\n", cnt, packet1.header.cpuid & 0xff, packet2.header.cpuid & 0xff); + else if (*(int *)&packet1.header != *(int *)&packet2.header) printf("%d: header\n", cnt); // check regs (and stuff) @@ -113,10 +132,18 @@ int main(int argc, char *argv[]) break; } - printf("--\nCPU %d, trace:", cpuid); - for (i = 0; i < 4; i++) - printf(" %08x", pc_trace[cpuid][pc_trace_p[cpuid]++ & 3]); - printf(" %08x\n", packet1.regs[0]); + printf("--\nCPU %d\n", cpuid); + for (cpuid = 0; cpuid < 2; cpuid++) { + printf("trace%d: ", cpuid); + for (i = 0; i < 4; i++) + printf(" %08x", pc_trace[cpuid][pc_trace_p[cpuid]++ & 3]); + + if (packet1.header.cpuid == cpuid) + printf(" %08x", packet1.regs[0]); + else if (packet2.header.cpuid == cpuid) + printf(" %08x", packet2.regs[0]); + printf("\n"); + } for (i = 0; i < 24+1; i++) printf("%3s: %08x %08x\n", regnames[i], packet1.regs[i], packet2.regs[i]);