diff --git a/README.md b/README.md index 4983daa..dd68d11 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This is a GTK+ 3.0 implementation of an AT&T / Teletype DMD 5620 emulator. ## Status -Version: 1.4.1 +Version: 2.0.0 This is an actively developed project. @@ -42,8 +42,6 @@ AT&T DMD 5620 Terminal emulator. -h, --help display help and exit -v, --version display version and exit --V, --verbose display verbose output --D, --delete backspace sends ^? (DEL) instead of ^H -t, --trace FILE trace to FILE -d, --device DEV serial port name -s, --shell SHELL execute SHELL instead of default user shell diff --git a/dmd5620.man b/dmd5620.man index 53771c6..660f58e 100644 --- a/dmd5620.man +++ b/dmd5620.man @@ -5,11 +5,9 @@ dmd5620 \- AT&T DMD 5620 Terminal Emulator .B dmd5620 [\fB\--help\fR] [\fB\--version\fR] -[\fB\--verbose\fR] -[\fB\--delete\fR] [\fB\--shell\fR \fISHELL\fR|\fB\--device\fR \fIDEVICE\fR] [\fB\--nvram\fR \fIFILE\fR] -[\fB\--trace\fR \fIFILE\fR] +[\fB\--firmware\fR \fI"VERSION"\fR] .SH DESCRIPTION .B dmd5620 AT&T DMD 5620 Terminal emulator with support for XT layers protocol. @@ -21,16 +19,8 @@ Displays help and exits. .BR \-v ", " \-\-version Displays version and exits. .TP -.BR \-V ", " \-\-verbose -Print verbose logging to stdout. -.TP -.BR \-D ", " \-\-delete -Send a delete character ^? (0x7F hex) when the backspace key is pressed. By -default, ^H (0x08 hex) is sent. -.TP .BR \-s ", " \-\-shell " " \fISHELL\fR -Execute the program \fISHELL\fR, e.g. \"/bin/sh\". (Either -\fB\-\-shell\fR or \fB\-\-device\fR is required) +Execute the program \fISHELL\fR, e.g. "/bin/sh". .TP .BR \-d ", " \-\-device " " \fIDEVICE\fR Connect to physical device \fIDEVICE\fR, e.g. "/dev/ttyS0" or @@ -39,8 +29,10 @@ Connect to physical device \fIDEVICE\fR, e.g. "/dev/ttyS0" or .BR \-n ", " \-\-nvram " " \fIFILE\fR Store NVRAM state in file \fIFILE\fR. No default. .TP -.BR \-t ", " \-\-trace " " \fIFILE\fR -Allow logging verbose system execution trace to \fIFILE\fR. +.BR \-f ", " \-\-firmware " " \fI"VERSION"\fR +Select firmare version. \fI"VERSION"\fR is a string, and must +be one of either \fB"8;7;3"\fR or \fB"8;7;5"\fR. The default version +if not specified is \fB"8;7;5"\fR. .SH KEYMAP .TP .BR F1\-F8 @@ -52,9 +44,6 @@ Terminal SETUP key .BR SHIFT\+F9 Terminal RESET key .TP -.BR F10 -Enable or disable execution tracing, if the \fB\-\-trace\fR option has -been used. .SH CONNECTING TO VIRTUAL SERIAL PORTS The \fB\-\-device\fR option can be used with \fBsocat\fR to set up a virtual serial port to a SIMH instance. For example: @@ -67,11 +56,6 @@ This command on Linux will open a virtual serial port connected to \fB192.168.80.100\fR on port \fB8888\fR. The port device will be something like \fB/dev/pts/1\fR, and the \fB\-\-device\fR flag can then be used to connect to this virtual serial port. -.SH TERMINAL EXECUTION TRACING -The \fB\-\-trace\fR option allows verbose tracing of WE32100 CPU -instructions to the specified file. Tracing is turned on or off by -pressing the \fBF10\fR key. \fITracing execution is extremely expensive -and should be used with care, it will degrade performance!\fR .SH USING SVR3 LAYERS One of the primary featuers of dmd5620 is support for the System V Release 3 \fIlayers\fR program. Real DMD5620 terminals were hard-wired directly @@ -87,6 +71,15 @@ Options", either with the mouse or by pressing F2. Next, select toggle .PP "Encoding" will ensure that telnet and SSH control characters are properly escaped. +.SH SAVING NVRAM +All terminal settings are forgotten on shutdown. To save terminal +settings, the contents of NVRAM must be stored in a file using +the \fB\-\-nvram\fR flag. +.PP +\fINote that the NVRAM format is different between firmware versions!\fR +Using the same NVRAM file on an \fB8;7;5\fR firmware terminal +and an \fB8;7;3\fR firwmare terminal is NOT SUPPORTED and will result +in undesirable behavior! .SH KNOWN ISSUES .IP \(bu 3 System V Release 3 \fIlayers\fR does not work when using Telnet to connect to a diff --git a/dmd_core b/dmd_core index 24acb44..03d0d36 160000 --- a/dmd_core +++ b/dmd_core @@ -1 +1 @@ -Subproject commit 24acb4415d7c719aaa9280cbb15c184cd6268699 +Subproject commit 03d0d36061e1dad2f3b0e3d1d670c817f0cf056f diff --git a/src/dmd_5620.c b/src/dmd_5620.c index 2ea7859..b01eab5 100644 --- a/src/dmd_5620.c +++ b/src/dmd_5620.c @@ -73,8 +73,6 @@ gint64 previous_clock = -1; uint8_t previous_vram[VIDRAM_SIZE]; struct pollfd fds[2]; pid_t shell_pid; -int erase_is_delete = FALSE; -int verbose = FALSE; volatile int window_beep = FALSE; volatile int dmd_thread_run = TRUE; int sigint_count = 0; @@ -389,18 +387,12 @@ pty_io_poll() for (i = 0; i < b_read; i++) { dmd_rs232_rx(tx_buf[i] & 0xff); - if (verbose) { - printf("<--- PTY rx_char[%02d]: %02x %c\n", i, tx_buf[i] & 0xff, PCHAR(tx_buf[i])); - } } } } i = 0; while (dmd_rs232_tx(&txc) == 0) { - if (verbose) { - printf("---> PTY tx_char[%02d]: %02x %c\n", i++, txc & 0xff, PCHAR(txc)); - } if (write(pty_master, &txc, 1) < 0) { fprintf(stderr, "Error %d from write: %s\n", errno, strerror(errno)); } @@ -467,18 +459,12 @@ tty_io_poll() for (i = 0; i < b_read; i++) { dmd_rs232_rx(tx_buf[i] & 0xff); - if (verbose) { - printf("<--- TTY rx_char[%02d]: %02x %c\n", i, tx_buf[i] & 0xff, PCHAR(tx_buf[i])); - } } } } i = 0; while (dmd_rs232_tx(&txc) == 0) { - if (verbose) { - printf("---> TTY tx_char[%02d]: %02x %c\n", i++, txc & 0xff, PCHAR(txc)); - } if (write(tty_fd, &txc, 1) < 0) { fprintf(stderr, "error %d during write: %s\n", errno, strerror(errno)); } @@ -701,6 +687,8 @@ gtk_setup(int *argc, char ***argv) gtk_widget_set_size_request(drawing_area, 800, 1024); + gtk_window_set_resizable(GTK_WINDOW(main_window), FALSE); + gtk_container_add(GTK_CONTAINER(main_window), drawing_area); /* Set up the animation handler, which will step the simulation @@ -736,7 +724,6 @@ gtk_setup(int *argc, char ***argv) struct option long_options[] = { {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'v'}, - {"verbose", no_argument, 0, 'V'}, {"delete", no_argument, 0, 'D'}, {"firmware", required_argument, 0, 'f'}, {"shell", required_argument, 0, 's'}, @@ -752,21 +739,23 @@ void usage() printf("-h, --help display help and exit\n"); printf("-v, --version display version and exit\n"); printf("-f, --firmware VER Firmware version 1 or 2\n"); - printf("-V, --verbose display verbose output\n"); printf("-D, --delete backspace sends ^? (DEL) instead of ^H\n"); printf("-d, --device DEV serial port name\n"); printf("-s, --shell SHELL execute SHELL instead of default user shell\n"); printf("-n, --nvram FILE store nvram state in FILE\n"); } +const char *FIRMWARE_873 = "8;7;3"; +const char *FIRMWARE_875 = "8;7;5"; + int main(int argc, char *argv[]) { int c, errflg = 0; char *shell = NULL; char *device = NULL; + char *firmware = NULL; int size; - int firmware_version = DEFAULT_FIRMWARE_VERSION; uint8_t nvram_buf[NVRAM_SIZE]; FILE *fp; struct stat sb; @@ -790,15 +779,9 @@ main(int argc, char *argv[]) case 'h': usage(); exit(0); - case 'D': - erase_is_delete = TRUE; - break; case 'v': printf("Version: %s\n", VERSION_STRING); exit(0); - case 'V': - verbose = TRUE; - break; case 'n': nvram = optarg; break; @@ -809,7 +792,7 @@ main(int argc, char *argv[]) device = optarg; break; case 'f': - firmware_version = atoi(optarg); + firmware = optarg; break; case '?': fprintf(stderr, "Unrecognized option: -%c\n", optopt); @@ -852,14 +835,17 @@ main(int argc, char *argv[]) tty_init(tty_fd); } - if (firmware_version != 1 && firmware_version != 2) { - fprintf(stderr, "--firmware must be one of either '1' or '2'\n"); + /* Initialize the CPU */ + if (firmware == NULL || strncmp(FIRMWARE_875, firmware, 5) == 0) { + dmd_init(2); + } else if (strncmp(FIRMWARE_873, firmware, 5) == 0) { + dmd_init(1); + } else { + fprintf(stderr, "--firmware must be one of either \"%s\" or \"%s\".\n", + FIRMWARE_873, FIRMWARE_875); return -1; } - /* Initialize the CPU */ - dmd_init(firmware_version); - /* Load NVRAM, if any */ if (nvram != NULL) { fp = fopen(nvram, "r"); diff --git a/src/version.h b/src/version.h index becd2ef..1f3b5e8 100644 --- a/src/version.h +++ b/src/version.h @@ -27,8 +27,8 @@ #ifndef __VERSION_H__ #define __VERSION_H__ -#define VERSION_MAJOR 1 -#define VERSION_MINOR 4 +#define VERSION_MAJOR 2 +#define VERSION_MINOR 0 #define VERSION_BUILD 0 #endif