diff --git a/doc/simh_doc.doc b/doc/simh_doc.doc index 79bcb383..e6786ede 100644 Binary files a/doc/simh_doc.doc and b/doc/simh_doc.doc differ diff --git a/scp.c b/scp.c index 745b08a9..8adb2057 100644 --- a/scp.c +++ b/scp.c @@ -493,6 +493,7 @@ volatile int32 stop_cpu = 0; static char **sim_argv; t_value *sim_eval = NULL; static t_value sim_last_val; +static t_addr sim_last_addr; FILE *sim_log = NULL; /* log file */ FILEREF *sim_log_ref = NULL; /* log file file reference */ FILE *sim_deb = NULL; /* debug file */ @@ -7528,17 +7529,27 @@ if (max && strncmp (cptr, "ALL", strlen ("ALL")) == 0) { /* ALL? */ *hi = max; } else { - if (strncmp (cptr, "$", strlen ("$")) == 0) { /* $? */ - tptr = cptr + strlen ("$"); - *hi = *lo = (t_addr)sim_last_val; + if ((strncmp (cptr, ".", strlen (".")) == 0) && /* .? */ + ((cptr[1] == '\0') || + (cptr[1] == '-') || + (cptr[1] == ':') || + (cptr[1] == '/'))) { + tptr = cptr + strlen ("."); + *lo = *hi = sim_last_addr; } else { - 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 (strncmp (cptr, "$", strlen ("$")) == 0) { /* $? */ + tptr = cptr + strlen ("$"); + *hi = *lo = (t_addr)sim_last_val; + } + else { + 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? */ cptr = tptr + 1; @@ -7559,6 +7570,7 @@ else { } else *hi = *lo; } +sim_last_addr = *hi; if (term && (*tptr++ != term)) return NULL; return tptr; @@ -9469,6 +9481,7 @@ t_stat sim_set_expect (EXPECT *exp, CONST char *cptr) char gbuf[CBUFSIZE]; CONST char *tptr; CONST char *c1ptr; +t_bool after_set = FALSE; uint32 after = exp->after; int32 cnt = 0; t_stat r; @@ -9488,13 +9501,14 @@ if ((!strncmp(gbuf, "HALTAFTER=", 10)) && (gbuf[10])) { after = (uint32)get_uint (&gbuf[10], 10, 100000000, &r); if (r != SCPE_OK) return sim_messagef (SCPE_ARG, "Invalid Halt After Value\n"); + after_set = TRUE; cptr = tptr; } if ((*cptr != '"') && (*cptr != '\'')) return sim_messagef (SCPE_ARG, "String must be quote delimited\n"); 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 */