From 80289e1e3b544023365135ea6eaace4435115b07 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Fri, 10 May 2013 16:10:07 -0700 Subject: [PATCH] Enhanced Remote Console support to allow two separate command processing modes. 1) Single Command Mode: commands are processed between simulated instructions once CR is received. 2) Multiple Command Mode: commands are initiated with the WRU character (usually *E) which suspends simulation execution and commands are processed until a CONTINUE command is entered (or automatically provided if the SET REMOTE TIMEOUT=seconds interval has elapsed). --- README.md | 8 ++- doc/simh_doc.doc | Bin 192512 -> 196608 bytes sim_console.c | 150 ++++++++++++++++++++++++++++++----------------- 3 files changed, 102 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index 791dad6f..0964bbee 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,13 @@ #### Remote Console Facility A new capability has been added which allows a TELNET Connection to a user designated port so that some out of band commands can be entered to manipulate and/or adjust a running simulator. The commands which enable and control this capability are SET REMOTE TELNET=port, SET REMOTE CONNECTIONS=n, SET REMOTE TIMEOUT=seconds, and SHOW REMOTE. -A subset of normal simh commands are available for use in remote console sessions. These are: EXAMINE, IEXAMINE, DEPOSIT, EVALUATE, ATTACH, DETACH, ASSIGN, DEASSIGN, STEP, CONTINUE, PWD, SAVE, SET, SHOW, DIR, LS, ECHO, HELP +The remote console facility has two modes of operation: 1) single command mode. and 2) multiple command mode. +In single command mode you enter one command at a time and aren't concerned about what the simulated system is doing while you enter that command. The command is executed once you've hit return. +In multiple command mode you initiate your activities by entering the WRU character (usually ^E). This will suspend the current simulator execution. You then enter commands as needed and when you are done you enter a CONTINUE command. While entering Multiple Command commands, if you fail to enter a complete command before the timeout (specified by "SET REMOTE TIMEOUT=seconds"), a CONTINUE command is automatically processed and simulation proceeds. + +A subset of normal simh commands are available for use in remote console sessions. +The Single Command Mode commands are: ATTACH, DETACH, PWD, SHOW, DIR, LS, ECHO, HELP +The Multiple Command Mode commands are: EXAMINE, IEXAMINE, DEPOSIT, EVALUATE, ATTACH, DETACH, ASSIGN, DEASSIGN, STEP, CONTINUE, PWD, SAVE, SET, SHOW, DIR, LS, ECHO, HELP #### VAX/PDP11 Enhancements RQ has new disk types: RC25, RCF25, RA80 diff --git a/doc/simh_doc.doc b/doc/simh_doc.doc index 480365e79f339b327cf3a8df338a07d7b9ee37ef..02cec35ba569e91ce2d84d30f9d6b38c1e6ca14c 100644 GIT binary patch delta 26429 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 0) { /* poll connect */ sim_activate_after(uptr+1, 1000000); /* start data poll after 100ms */ lp->rcve = 1; /* rcv enabled */ sim_rem_buf_ptr[c] = 0; /* start with empty command buffer */ - tmxr_linemsgf (lp, "%s Remote Console\r\nSimulator Running...", sim_name); + tmxr_linemsgf (lp, "%s Remote Console\r\n" + "Enter single commands or to enter multiple command mode enter the WRU character\r\n" + "Simulator Running...", sim_name); tmxr_send_buffered_data (lp); /* flush buffered data */ } sim_activate_after(uptr, 1000000); /* check again in 1 second */ @@ -465,6 +468,18 @@ static CTAB allowed_remote_cmds[] = { { NULL, NULL } }; +static CTAB allowed_single_remote_cmds[] = { + { "ATTACH", &attach_cmd, 0 }, + { "DETACH", &detach_cmd, 0 }, + { "PWD", &pwd_cmd, 0 }, + { "DIR", &dir_cmd, 0 }, + { "LS", &dir_cmd, 0 }, + { "ECHO", &echo_cmd, 0 }, + { "SHOW", &show_cmd, 0 }, + { "HELP", &x_help_cmd, 0 }, + { NULL, NULL } + }; + static t_stat x_help_cmd (int32 flag, char *cptr) { CTAB *cmdp, *cmdph; @@ -539,52 +554,63 @@ for (i=(was_stepping ? sim_rem_step_line : 0); if (!(TMXR_VALID & c)) continue; c = c & ~TMXR_VALID; - if (c != sim_int_char) - continue; /* ^E (the interrupt character) must start console interaction */ - sim_is_running = 0; - sim_stop_timer_services (); - for (j=0; j < sim_rem_con_tmxr.lines; j++) { - lp = &sim_rem_con_tmxr.ldsc[j]; - if ((i == j) || (!lp->conn)) - continue; - tmxr_linemsgf (lp, "\nRemote Console(%s) Entering Commands\n", lp->ipad); + if (!sim_rem_single_mode[i]) { + if (c == sim_int_char) { /* ^E (the interrupt character) must start continue mode console interaction */ + sim_is_running = 0; + sim_stop_timer_services (); + for (j=0; j < sim_rem_con_tmxr.lines; j++) { + lp = &sim_rem_con_tmxr.ldsc[j]; + if ((i == j) || (!lp->conn)) + continue; + tmxr_linemsgf (lp, "\nRemote Console(%s) Entering Commands\n", lp->ipad); + tmxr_send_buffered_data (lp); /* flush any buffered data */ + } + lp = &sim_rem_con_tmxr.ldsc[i]; + tmxr_linemsg (lp, "\r\nSimulator paused.\r\n"); + if (sim_rem_read_timeout) + tmxr_linemsgf (lp, "Simulation will resume automatically if input is not received in %d seconds\n", sim_rem_read_timeout); + } + else { + sim_rem_single_mode[i] = TRUE; + tmxr_linemsg (lp, "\r\nsim> "); + tmxr_send_buffered_data (lp); /* flush any buffered data */ + } + } + } + got_command = FALSE; + while (1) { + if (!sim_rem_single_mode[i]) { + read_start_time = sim_os_msec(); + tmxr_linemsg (lp, "sim> "); tmxr_send_buffered_data (lp); /* flush any buffered data */ } - lp = &sim_rem_con_tmxr.ldsc[i]; - tmxr_linemsg (lp, "\r\nSimulator paused.\r\n"); - if (sim_rem_read_timeout) - tmxr_linemsgf (lp, "Simulation will resume automatically if input is not received in %d seconds\n", sim_rem_read_timeout); - } - while (1) { - read_start_time = sim_os_msec(); - tmxr_linemsg (lp, "sim> "); - tmxr_send_buffered_data (lp); /* flush any buffered data */ - got_command = FALSE; - while (!got_command) { - c = tmxr_getc_ln (lp); - if (!(TMXR_VALID & c)) { - tmxr_send_buffered_data (lp); /* flush any buffered data */ - if (sim_rem_read_timeout && - ((sim_os_msec() - read_start_time)/1000 >= sim_rem_read_timeout)) { - while (sim_rem_buf_ptr[i] > 0) { /* Erase current input line */ - tmxr_linemsg (lp, "\b \b"); - --sim_rem_buf_ptr[i]; + do { + if (!sim_rem_single_mode[i]) { + c = tmxr_getc_ln (lp); + if (!(TMXR_VALID & c)) { + tmxr_send_buffered_data (lp); /* flush any buffered data */ + if (sim_rem_read_timeout && + ((sim_os_msec() - read_start_time)/1000 >= sim_rem_read_timeout)) { + while (sim_rem_buf_ptr[i] > 0) { /* Erase current input line */ + tmxr_linemsg (lp, "\b \b"); + --sim_rem_buf_ptr[i]; + } + if (sim_rem_buf_ptr[i]+80 >= sim_rem_buf_size[i]) { + sim_rem_buf_size[i] += 1024; + sim_rem_buf[i] = realloc (sim_rem_buf[i], sim_rem_buf_size[i]); + } + strcpy (sim_rem_buf[i], "CONTINUE ! Automatic continue due to timeout"); + tmxr_linemsgf (lp, "%s\n", sim_rem_buf[i]); + got_command = TRUE; + break; } - if (sim_rem_buf_ptr[i]+80 >= sim_rem_buf_size[i]) { - sim_rem_buf_size[i] += 1024; - sim_rem_buf[i] = realloc (sim_rem_buf[i], sim_rem_buf_size[i]); - } - strcpy (sim_rem_buf[i], "CONTINUE ! Automatic continue due to timeout"); - tmxr_linemsgf (lp, "%s\n", sim_rem_buf[i]); - got_command = TRUE; - break; + sim_os_ms_sleep (100); + tmxr_poll_rx (&sim_rem_con_tmxr);/* poll input */ + continue; } - sim_os_ms_sleep (100); - tmxr_poll_rx (&sim_rem_con_tmxr);/* poll input */ - continue; + read_start_time = sim_os_msec(); + c = c & ~TMXR_VALID; } - read_start_time = sim_os_msec(); - c = c & ~TMXR_VALID; switch (c) { case 0: /* no data */ break; @@ -626,8 +652,10 @@ for (i=(was_stepping ? sim_rem_step_line : 0); got_command = TRUE; /* command too long */ break; } - } + } while ((!got_command) && (!sim_rem_single_mode[i])); tmxr_send_buffered_data (lp); /* flush any buffered data */ + if ((sim_rem_single_mode[i]) && !got_command) + break; printf ("Remote Console Command from %s> %s\r\n", lp->ipad, sim_rem_buf[i]); if (sim_log) fprintf (sim_log, "Remote Console Command from %s> %s\n", lp->ipad, sim_rem_buf[i]); @@ -643,7 +671,12 @@ for (i=(was_stepping ? sim_rem_step_line : 0); sim_rem_buf_ptr[i] = 0; sim_rem_buf[i][sim_rem_buf_ptr[i]] = '\0'; if (cbuf[0] == '\0') - continue; + if (sim_rem_single_mode[i]) { + sim_rem_single_mode[i] = FALSE; + break; + } + else + continue; sim_sub_args (cbuf, sizeof(cbuf), argv); cptr = cbuf; cptr = get_glyph (cptr, gbuf, 0); /* get command glyph */ @@ -661,7 +694,7 @@ for (i=(was_stepping ? sim_rem_step_line : 0); if (!find_cmd (gbuf)) /* validate command */ stat = SCPE_UNK; else { - if ((cmdp = find_ctab (allowed_remote_cmds, gbuf))) {/* lookup command */ + if ((cmdp = find_ctab (sim_rem_single_mode[i] ? allowed_single_remote_cmds : allowed_remote_cmds, gbuf))) {/* lookup command */ if (cmdp->action == &x_continue_cmd) stat = SCPE_OK; else { @@ -709,28 +742,32 @@ for (i=(was_stepping ? sim_rem_step_line : 0); tmxr_linemsgf (lp, "%s", cbuf); tmxr_send_buffered_data (lp); } - if (cmdp && (cmdp->action == &x_continue_cmd)) { + if ((cmdp && (cmdp->action == &x_continue_cmd)) || + (sim_rem_single_mode[i])) { sim_rem_step_line = -1; /* Not stepping */ if (sim_log_temp) { /* If we setup a temporary log, clean it now */ int32 save_quiet = sim_quiet; - sim_quiet = 0; + sim_quiet = 1; sim_set_logoff (0, NULL); sim_quiet = save_quiet; remove (sim_rem_con_temp_name); sim_log_temp = FALSE; } - tmxr_linemsg (lp, "Simulator Running..."); - tmxr_send_buffered_data (lp); - for (j=0; j < sim_rem_con_tmxr.lines; j++) { - lp = &sim_rem_con_tmxr.ldsc[j]; - if ((i == j) || (!lp->conn)) - continue; + if (!sim_rem_single_mode[i]) { tmxr_linemsg (lp, "Simulator Running..."); tmxr_send_buffered_data (lp); + for (j=0; j < sim_rem_con_tmxr.lines; j++) { + lp = &sim_rem_con_tmxr.ldsc[j]; + if ((i == j) || (!lp->conn)) + continue; + tmxr_linemsg (lp, "Simulator Running..."); + tmxr_send_buffered_data (lp); + } + sim_is_running = 1; + sim_start_timer_services (); } - sim_is_running = 1; - sim_start_timer_services (); + sim_rem_single_mode[i] = FALSE; break; } if (cmdp && (cmdp->action == &x_step_cmd)) { @@ -782,6 +819,7 @@ else { sim_rem_buf[i] = NULL; sim_rem_buf_size[i] = 0; sim_rem_buf_ptr[i] = 0; + sim_rem_single_mode[i] = FALSE; } } } @@ -812,6 +850,8 @@ sim_rem_buf_size = realloc (sim_rem_buf_size, sizeof(*sim_rem_buf_size)*lines); memset (sim_rem_buf_size, 0, sizeof(*sim_rem_buf_size)*lines); sim_rem_buf_ptr = realloc (sim_rem_buf_ptr, sizeof(*sim_rem_buf_ptr)*lines); memset (sim_rem_buf_ptr, 0, sizeof(*sim_rem_buf_ptr)*lines); +sim_rem_single_mode = realloc (sim_rem_single_mode, sizeof(*sim_rem_single_mode)*lines); +memset (sim_rem_single_mode, 0, sizeof(*sim_rem_single_mode)*lines); return SCPE_OK; }