Skip to content

Commit

Permalink
Added SET ON, SET NOON, ON, GOTO and RETURN command support
Browse files Browse the repository at this point in the history
    The ControlFlow changes fix a potential bug in breakpoint handling
    which arguably merely could be “not supported”.  That bug is that if
    a breakpoint’s actions have multiple actions AND an action early in
    the list invokes a do command file, the subsequent pending breakpoint
    actions are not performed.

    The ControlFlow patch/changes implement the following extensions to
    the SCP command language without affecting prior behavior:

             GOTO <Label>                 Command is now available.  Labels are lines in which the first non whitespace character is a “:”.  The target of a goto is the first matching label in the current do command file which is encountered.  Since labels don’t do anything else besides being the targets of goto’s, they could be used to provide comments in do command files, for example (“:: This is a comment”)
             SET ON                       Enables error trapping for currently defined traps (by ON commands)
             SET NOON                     Disables error trapping for currently defined traps (by ON commands)
             RETURN                       Return from the current do command file execution with the status from the last executed command
             RETURN <statusvalue>         Return from the current do command file execution with the indicated status.  Status can be a number or a SCPE_<conditionname> name string.
             ON <statusvalue> commandtoprocess{; additionalcommandtoprocess}
                                          Sets the action(s) to take when the specific error status is returned by a command in the currently running do command file.  Multiple actions can be specified with each delimited by a semicolon character (just like breakpoint action commands).
             ON ERROR commandtoprocess{; additionalcommandtoprocess}
                                          Sets the default action(s) to take when any otherwise unspecified error status is returned by a command in the currently running do command file.  Multiple actions can be specified with each delimited by a semicolon character (just like breakpoint action commands).
             ON <statusvalue>
             ON ERROR                     Clears the default actions to take when any otherwise unspecified error status is returned by a command in the currently running do command file.

    Error traps can be taken for any command which returns a status other
    than SCPE_STEP, SCPE_OK, and SCPE_EXIT.

    ON Traps can specify any status value from the following list:
       NXM, UNATT, IOERR, CSUM, FMT, NOATT, OPENERR, MEM, ARG, STEP,
       UNK, RO, INCOMP, STOP, TTIERR, TTOERR, EOF, REL, NOPARAM, ALATT,
       TIMER, SIGERR, TTYERR, SUB, NOFNC, UDIS, NORO, INVSW, MISVAL,
       2FARG, 2MARG, NXDEV, NXUN, NXREG, NXPAR, NEST, IERR, MTRLNT,
       LOST, TTMO, STALL, AFAIL.

    These values can be indicated by name or by their internal numeric
    value (not recommended).

    Interactions with ASSERT command and “DO –e”:
    DO –e		is equivalent to SET ON, which by itself it equivalent
                    to “SET ON; ON ERROR RETURN”.
    ASSERT		failure have several different actions:
    If error trapping is not enabled then AFAIL causes exit from the current
    do command file.
    If error trapping is enabled and an explicit “ON AFAIL” action is defined,
    then the specified action is performed.
    If error trapping is enabled and no “ON AFAIL” action is defined, then
    an AFAIL causes exit from the current do command file.

    Other related changes/extensions:
    •	The “!” command (execute a command on the local OS), now returns
            the command’s exit status as the status from the “!” command.
            This allows ON conditions to handle error status responses from
            OS commands and act as desired.
    •	Argument substitution has been extended for do command file
            execution.  The extended argument substitution include
            substitution of any program environment variable (referenced by
            %ENVVARNAME%) along with dynamic expansion of several pseudo
            environment variables:
    %DATE%	expands to a string of the form: yyyy/mm/dd   (i.e. 2011/01/23)
    %TIME%	expands to a string of the form: hh:mm:ss   (i.e. 17:23:44)
    %CTIME%	expands to a string of the form: www mmm dd hh:mm:ss yyyy
            (i.e. Mon Jan 24 08:22:33 2010)
    %ENVNAME%	expands to a string which has the value of the environment
            variable ENVNAME
  • Loading branch information
markpizz committed Apr 15, 2011
1 parent 35eac70 commit 766e705
Show file tree
Hide file tree
Showing 4 changed files with 339 additions and 87 deletions.
3 changes: 1 addition & 2 deletions AltairZ80/altairZ80_sio.c
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,6 @@ extern const t_bool rtc_avail;
extern uint32 PCX;
extern int32 sim_switches;
extern int32 sim_quiet;
extern const char *scp_error_messages[];
extern int32 SR;
extern UNIT cpu_unit;
extern volatile int32 stop_cpu;
Expand Down Expand Up @@ -1180,7 +1179,7 @@ static void attachCPM(UNIT *uptr) {
sim_quiet = sim_switches & SWMASK ('Q'); /* -q means quiet */
lastCPMStatus = attach_unit(uptr, cpmCommandLine);
if ((lastCPMStatus != SCPE_OK) && (simh_device.dctrl & VERBOSE_MSG))
printf("SIMH: " ADDRESS_FORMAT " Cannot open '%s' (%s)." NLP, PCX, cpmCommandLine, scp_error_messages[lastCPMStatus - SCPE_BASE]);
printf("SIMH: " ADDRESS_FORMAT " Cannot open '%s' (%s)." NLP, PCX, cpmCommandLine, sim_error_text(lastCPMStatus));
}

/* setClockZSDOSAdr points to 6 byte block in M: YY MM DD HH MM SS in BCD notation */
Expand Down
Loading

0 comments on commit 766e705

Please sign in to comment.