Release 2.0.0

This commit is contained in:
Seth Morabito 2022-09-11 16:58:08 -07:00
parent 9df1c01c50
commit a529d5c6ec
5 changed files with 34 additions and 57 deletions

View File

@ -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

View File

@ -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

@ -1 +1 @@
Subproject commit 24acb4415d7c719aaa9280cbb15c184cd6268699
Subproject commit 03d0d36061e1dad2f3b0e3d1d670c817f0cf056f

View File

@ -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");

View File

@ -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