SCP: Add . pseudo symbol to reference the most recent address
Useful in EXAMINE and DEPOSIT.
This commit is contained in:
parent
da3f5359bb
commit
9122a9f196
2 changed files with 24 additions and 10 deletions
BIN
doc/simh_doc.doc
BIN
doc/simh_doc.doc
Binary file not shown.
34
scp.c
34
scp.c
|
@ -493,6 +493,7 @@ volatile int32 stop_cpu = 0;
|
||||||
static char **sim_argv;
|
static char **sim_argv;
|
||||||
t_value *sim_eval = NULL;
|
t_value *sim_eval = NULL;
|
||||||
static t_value sim_last_val;
|
static t_value sim_last_val;
|
||||||
|
static t_addr sim_last_addr;
|
||||||
FILE *sim_log = NULL; /* log file */
|
FILE *sim_log = NULL; /* log file */
|
||||||
FILEREF *sim_log_ref = NULL; /* log file file reference */
|
FILEREF *sim_log_ref = NULL; /* log file file reference */
|
||||||
FILE *sim_deb = NULL; /* debug file */
|
FILE *sim_deb = NULL; /* debug file */
|
||||||
|
@ -7528,17 +7529,27 @@ if (max && strncmp (cptr, "ALL", strlen ("ALL")) == 0) { /* ALL? */
|
||||||
*hi = max;
|
*hi = max;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (strncmp (cptr, "$", strlen ("$")) == 0) { /* $? */
|
if ((strncmp (cptr, ".", strlen (".")) == 0) && /* .? */
|
||||||
tptr = cptr + strlen ("$");
|
((cptr[1] == '\0') ||
|
||||||
*hi = *lo = (t_addr)sim_last_val;
|
(cptr[1] == '-') ||
|
||||||
|
(cptr[1] == ':') ||
|
||||||
|
(cptr[1] == '/'))) {
|
||||||
|
tptr = cptr + strlen (".");
|
||||||
|
*lo = *hi = sim_last_addr;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (dptr && sim_vm_parse_addr) /* get low */
|
if (strncmp (cptr, "$", strlen ("$")) == 0) { /* $? */
|
||||||
*lo = sim_vm_parse_addr (dptr, cptr, &tptr);
|
tptr = cptr + strlen ("$");
|
||||||
else
|
*hi = *lo = (t_addr)sim_last_val;
|
||||||
*lo = (t_addr) strtotv (cptr, &tptr, rdx);
|
}
|
||||||
if (cptr == tptr) /* error? */
|
else {
|
||||||
return NULL;
|
if (dptr && sim_vm_parse_addr) /* get low */
|
||||||
|
*lo = sim_vm_parse_addr (dptr, cptr, &tptr);
|
||||||
|
else
|
||||||
|
*lo = (t_addr) strtotv (cptr, &tptr, rdx);
|
||||||
|
if (cptr == tptr) /* error? */
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ((*tptr == '-') || (*tptr == ':')) { /* range? */
|
if ((*tptr == '-') || (*tptr == ':')) { /* range? */
|
||||||
cptr = tptr + 1;
|
cptr = tptr + 1;
|
||||||
|
@ -7559,6 +7570,7 @@ else {
|
||||||
}
|
}
|
||||||
else *hi = *lo;
|
else *hi = *lo;
|
||||||
}
|
}
|
||||||
|
sim_last_addr = *hi;
|
||||||
if (term && (*tptr++ != term))
|
if (term && (*tptr++ != term))
|
||||||
return NULL;
|
return NULL;
|
||||||
return tptr;
|
return tptr;
|
||||||
|
@ -9469,6 +9481,7 @@ t_stat sim_set_expect (EXPECT *exp, CONST char *cptr)
|
||||||
char gbuf[CBUFSIZE];
|
char gbuf[CBUFSIZE];
|
||||||
CONST char *tptr;
|
CONST char *tptr;
|
||||||
CONST char *c1ptr;
|
CONST char *c1ptr;
|
||||||
|
t_bool after_set = FALSE;
|
||||||
uint32 after = exp->after;
|
uint32 after = exp->after;
|
||||||
int32 cnt = 0;
|
int32 cnt = 0;
|
||||||
t_stat r;
|
t_stat r;
|
||||||
|
@ -9488,13 +9501,14 @@ if ((!strncmp(gbuf, "HALTAFTER=", 10)) && (gbuf[10])) {
|
||||||
after = (uint32)get_uint (&gbuf[10], 10, 100000000, &r);
|
after = (uint32)get_uint (&gbuf[10], 10, 100000000, &r);
|
||||||
if (r != SCPE_OK)
|
if (r != SCPE_OK)
|
||||||
return sim_messagef (SCPE_ARG, "Invalid Halt After Value\n");
|
return sim_messagef (SCPE_ARG, "Invalid Halt After Value\n");
|
||||||
|
after_set = TRUE;
|
||||||
cptr = tptr;
|
cptr = tptr;
|
||||||
}
|
}
|
||||||
if ((*cptr != '"') && (*cptr != '\''))
|
if ((*cptr != '"') && (*cptr != '\''))
|
||||||
return sim_messagef (SCPE_ARG, "String must be quote delimited\n");
|
return sim_messagef (SCPE_ARG, "String must be quote delimited\n");
|
||||||
cptr = get_glyph_quoted (cptr, gbuf, 0);
|
cptr = get_glyph_quoted (cptr, gbuf, 0);
|
||||||
|
|
||||||
return sim_exp_set (exp, gbuf, cnt, (after ? after : exp->after), sim_switches, cptr);
|
return sim_exp_set (exp, gbuf, cnt, (after_set ? after : exp->after), sim_switches, cptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Clear expect */
|
/* Clear expect */
|
||||||
|
|
Loading…
Add table
Reference in a new issue