if (resetp)
sbp = simibuff;
-#ifdef SDCDB_DEBUG
- fprintf(stderr,"stderr--> reading from sim\n");
-#endif
+ Dprintf(D_simi, ("readSim: reading from sim["));
while ((ch = fgetc(simin))) {
+
#ifdef SDCDB_DEBUG
- fputc(ch,stdout);
+ if (D_simi) {
+ fputc(ch,stdout);
+ }
#endif
+
*sbp++ = ch;
}
-#ifdef SDCDB_DEBUG
- fprintf(stderr,"stderr--> reading from sim done\n");
-#endif
+
+ Dprintf(D_simi, ("] end readSim\n"));
*sbp = '\0';
}
/* fork and start the simulator as a subprocess */
if ((simPid = fork())) {
-#ifdef SDCDB_DEBUG
- printf("simulator pid %d\n",(int) simPid);
-#endif
+ Dprintf(D_simi, ("simulator pid %d\n",(int) simPid));
}
else {
/*-----------------------------------------------------------------*/
void sendSim(char *s)
{
+ Dprintf(D_simi, ("sendSim-->%s", s)); // s has LF at end already
fputs(s,simout);
fflush(simout);
}
{
char buff[128];
- sprintf(buff,"l %s\n",s);
+ sprintf(buff,"l \"%s\"\n",s);
printf(buff);
sendSim(buff);
waitForSim();
unsigned addr ;
char *sfmt;
+ /* kpb: new code 8-03-01 */
+ if (gaddr == 0) {
+ /* initial start, start & stop from address 0 */
+ char buf[20];
+ // this program is setting up a bunch of breakpoints automatically
+ // at key places. Like at startup & main() and other function
+ // entry points. So we don't need to setup one here..
+ //sendSim("break 0x0\n");
+ //sleep(1);
+ //waitForSim();
+
+ sendSim("run 0x0\n");
+ sleep(1); /* do I need this? */
+ } else if (gaddr == -1) { /* resume */
+
+ // try adding this(kpb)
+ sendSim("step\n");
+ usleep(100000);
+ waitForSim();
+
+ sendSim ("run\n");
+ }
+ else {
+ printf("Error, simGoTillBp > 0!\n");
+ exit(1);
+ }
+
+#if 0
if (gaddr != -1) {
char buf[20];
sprintf(buf,"g 0x%x\n",gaddr);
sendSim(buf);
} else
sendSim ("g\n");
+#endif
waitForSim();
sr++;
}
- if (!*sr) return 0;
+ if (!*sr) {
+ fprintf(stderr, "Error?, simGoTillBp failed to Stop\n");
+ return 0;
+ }
while (isspace(*sr)) sr++ ;
- if (sscanf(sr,sfmt,&addr) != 1)
- return 0;
- else
+ if (sscanf(sr,sfmt,&addr) != 1) {
+ fprintf(stderr, "Error?, simGoTillBp failed to get Addr\n");
+ return 0;
+ }
return addr;
-
}
char *rb = regBuff;
int i;
- sendSim("dr\n");
+ sendSim("info registers\n");
+ //kpb(8-5-01) sendSim("dr\n");
+
waitForSim();
/* make it some more readable */
resp = simResponse();
/* the response is of the form
XXXXXX R0 R1 R2 R3 R4 R5 R6 R7 ........
XXXXXX XX . ACC=0xxx dd cc B=0xxx dd cc DPTR= 0xxxxx @DPTR= 0xxx dd cc
- XXXXXX XX . PSW= 0xxx CY=[1|0] AC=[0|1] OV=[0|1] P=[1|0] */
+ XXXXXX XX . PSW= 0xxx CY=[1|0] AC=[0|1] OV=[0|1] P=[1|0]
+
+Format as of 8-4-01:
+ 0x00 00 00 00 00 00 00 00 00 ........
+ 000000 00 . ACC= 0x00 0 . B= 0x00 DPTR= 0x0000 @DPTR= 0x00 0 .
+ 000000 00 . PSW= 0x00 CY=0 AC=0 OV=0 P=0
+F 0x006d 75 87 80 MOV PCON,#80
+*/
+
memset(regBuff,0,sizeof(regBuff));
/* skip the first numerics */
while (*resp && !isxdigit(*resp)) resp++;
+
+ if (strncmp(resp, "0x", 2)) {
+ fprintf(stderr, "Error: Format1A\n");
+ return regBuff;
+ }
+ resp += 2;
while (*resp && isxdigit(*resp)) resp++;
/* now get the eight registers */