Skip to content

Commit

Permalink
Restructure baud rate table with ifdefs; update documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
AK6DN committed May 7, 2017
1 parent ba6692a commit e707b2b
Show file tree
Hide file tree
Showing 6 changed files with 115 additions and 68 deletions.
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ If the emulator is run with no options, it prints a usage screen:
E:\DEC> tu58em
ERROR: no units were specified
FATAL: illegal command line
tu58 tape emulator v1.4o
tu58 tape emulator v1.4p
Usage: ./tu58em [-options] -[rwci] file1 ... -[rwci] file7
Options: -V | --version output version string
-v | --verbose enable verbose output to terminal
Expand All @@ -29,7 +29,7 @@ FATAL: illegal command line
-b | --background run in background mode, no console I/O except errors
-t | --timing 1 add timing delays to spoof diagnostic into passing
-T | --timing 2 add timing delays to mimic a real TU58
-s | --speed BAUD set line speed 1200..3000000; default 9600
-s | --speed BAUD set line speed to BAUD; default 9600
-S | --stop BITS set stop bits 1..2; default 1
-p | --port PORT set port to PORT [1..N or /dev/comN; default 1]
-r | --read|rd FILENAME readonly drive
Expand All @@ -52,9 +52,10 @@ Most of the switches should be pretty obvious:
-b run in background mode, no console I/O except errors
-t adds time delays to allow the emulator to pass the DEC ZTUUF0 TU-58 Performance Exerciser diagnostic
-T adds time delays to make the emulator nearly as slow as a real TU-58 (just for fun)
-s BAUD sets the baud rate; the following rates are supported. the default will be 9600 if not set.
-s BAUD sets the baud rate; the following rates may be supported. the default will be 9600 if not set.
3000000, 2500000, 2000000, 1500000, 1152000, 1000000, 921600, 576000, 500000,
460800, 230400, 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1200
exact list of baud rate support is system dependent (especially for rates above 230400)
-p PORT sets the com port as a number (1,2,3,...) or if not numeric the full path (/dev/com1)
-S STOP sets the number of stop bits (1 or 2), default is 1
-r FILENAME set the next unit as a read only drive using file FILENAME
Expand Down
Binary file modified cygwin/cygwin1.dll
Binary file not shown.
Binary file modified cygwin/tu58em.exe
Binary file not shown.
48 changes: 25 additions & 23 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@
// v1.4o - 09 Jan 2017 - donorth - Removed baud rate 256000, it is nonstandard for unix.
// Changed serial setup to use cfsetispeed()/cfsetospeed().
// Added capability for 1 or 2 stop bits; default is 1
// v1.4p - 05 May 2017 - donorth - Updated serial baud rate table with #ifdef detection
// Update clock_gettime() for MAC OSX support
//


Expand All @@ -86,7 +88,7 @@
static char copyright[] = "(C) 2005-2017 Don North <ak6dn" "@" "mindspring.com>, " \
"(C) 1984 Dan Ts'o <Rockefeller University>";

static char version[] = "tu58 tape emulator v1.4o";
static char version[] = "tu58 tape emulator v1.4p";

static char port[32] = "1"; // default port number (COM1, /dev/ttyS0)
static long speed = 9600; // default line speed
Expand Down Expand Up @@ -156,7 +158,7 @@ void fatal (char *fmt, ...)
// main program
//
int main (int argc,
char **argv)
char *argv[])
{
long i;
long n = 0;
Expand All @@ -166,32 +168,32 @@ int main (int argc,
int opt_index = 0;
char opt_short[] = "dvVmnxbTtp:s:r:w:c:i:z:S:";
static struct option opt_long[] = {
{ "debug", no_argument, 0, 'd' },
{ "verbose", no_argument, 0, 'v' },
{ "version", no_argument, 0, 'V' },
{ "mrsp", no_argument, 0, 'm' },
{ "nosync", no_argument, 0, 'n' },
{ "vax", no_argument, 0, 'x' },
{ "background", no_argument, 0, 'b' },
{ "timing", required_argument, 0, -2 },
{ "port", required_argument, 0, 'p' },
{ "baud", required_argument, 0, 's' },
{ "speed", required_argument, 0, 's' },
{ "stop", required_argument, 0, 'S' },
{ "rd", required_argument, 0, 'r' },
{ "read", required_argument, 0, 'r' },
{ "write", required_argument, 0, 'w' },
{ "create", required_argument, 0, 'c' },
{ "initrt11", required_argument, 0, 'i' },
{ "initxxdp", required_argument, 0, 'z' },
{ 0, no_argument, 0, 0 }
{ "debug", no_argument, NULL, 'd' },
{ "verbose", no_argument, NULL, 'v' },
{ "version", no_argument, NULL, 'V' },
{ "mrsp", no_argument, NULL, 'm' },
{ "nosync", no_argument, NULL, 'n' },
{ "vax", no_argument, NULL, 'x' },
{ "background", no_argument, NULL, 'b' },
{ "timing", required_argument, NULL, -2 },
{ "port", required_argument, NULL, 'p' },
{ "baud", required_argument, NULL, 's' },
{ "speed", required_argument, NULL, 's' },
{ "stop", required_argument, NULL, 'S' },
{ "rd", required_argument, NULL, 'r' },
{ "read", required_argument, NULL, 'r' },
{ "write", required_argument, NULL, 'w' },
{ "create", required_argument, NULL, 'c' },
{ "initrt11", required_argument, NULL, 'i' },
{ "initxxdp", required_argument, NULL, 'z' },
{ NULL, no_argument, NULL, 0 }
};

// init file structures
fileinit();

// process command line options
while ((i = getopt_long(argc, argv, opt_short, opt_long, &opt_index)) != EOF) {
while ((i = getopt_long(argc, argv, opt_short, opt_long, &opt_index)) != -1) {
switch (i) {
case -2 : timing = atoi(optarg); if (timing > 2) errors++; break;
case 'p': strcpy(port, optarg); break;
Expand Down Expand Up @@ -238,7 +240,7 @@ int main (int argc,
" -b | --background run in background mode, no console I/O except errors\n" \
" -t | --timing 1 add timing delays to spoof diagnostic into passing\n" \
" -T | --timing 2 add timing delays to mimic a real TU58\n" \
" -s | --speed BAUD set line speed 1200..3000000; default 9600\n" \
" -s | --speed BAUD set line speed to BAUD; default 9600\n" \
" -S | --stop BITS set stop bits 1..2; default 1\n" \
" -p | --port PORT set port to PORT [1..N or /dev/comN; default 1]\n" \
" -r | --read|rd FILENAME readonly drive\n" \
Expand Down
122 changes: 82 additions & 40 deletions serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -405,47 +405,89 @@ void devtxput (uint8_t c)
static int32_t devbaud (int32_t rate)
{
#ifdef WINCOMM
static int32_t baudlist[] = { 3000000, 3000000,
2500000, 2500000,
2000000, 2000000,
1500000, 1500000,
1152000, 1152000,
1000000, 1000000,
921600, 921600,
576000, 576000,
500000, 500000,
460800, 460800,
230400, 230400,
115200, 115200,
57600, 57600,
38400, 38400,
19200, 19200,
9600, 9600,
4800, 4800,
2400, 2400,
1200, 1200,
-1, -1 };
static int32_t baudlist[] = {
3000000, 3000000,
2500000, 2500000,
2000000, 2000000,
1500000, 1500000,
1152000, 1152000,
1000000, 1000000,
921600, 921600,
576000, 576000,
500000, 500000,
460800, 460800,
230400, 230400,
115200, 115200,
57600, 57600,
38400, 38400,
19200, 19200,
9600, 9600,
4800, 4800,
2400, 2400,
1200, 1200,
-1, -1
};
#else // !WINCOMM
static int32_t baudlist[] = { 3000000, B3000000,
2500000, B2500000,
2000000, B2000000,
1500000, B1500000,
1152000, B1152000,
1000000, B1000000,
921600, B921600,
576000, B576000,
500000, B500000,
460800, B460800,
230400, B230400,
115200, B115200,
57600, B57600,
38400, B38400,
19200, B19200,
9600, B9600,
4800, B4800,
2400, B2400,
1200, B1200,
-1, -1 };
static int32_t baudlist[] = {
#ifdef B3000000
3000000, B3000000,
#endif // B3000000
#ifdef B2500000
2500000, B2500000,
#endif // B2500000
#ifdef B2000000
2000000, B2000000,
#endif // B2000000
#ifdef B1500000
1500000, B1500000,
#endif // B1500000
#ifdef B1152000
1152000, B1152000,
#endif // B1152000
#ifdef B1000000
1000000, B1000000,
#endif // B1000000
#ifdef B921600
921600, B921600,
#endif // B921600
#ifdef B576000
576000, B576000,
#endif // B576000
#ifdef B500000
500000, B500000,
#endif // B500000
#ifdef B460800
460800, B460800,
#endif // B460800
#ifdef B230400
230400, B230400,
#endif // B230400
#ifdef B115200
115200, B115200,
#endif // B115200
#ifdef B57600
57600, B57600,
#endif // B57600
#ifdef B38400
38400, B38400,
#endif // B38400
#ifdef B19200
19200, B19200,
#endif // B19200
#ifdef B9600
9600, B9600,
#endif // B9600
#ifdef B4800
4800, B4800,
#endif // B4800
#ifdef B2400
2400, B2400,
#endif // B2400
#ifdef B1200
1200, B1200,
#endif // B1200
-1, -1
};
#endif // !WINCOMM
int32_t *p = baudlist;
int32_t r;
Expand Down
6 changes: 4 additions & 2 deletions tu58drive.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,13 @@
#include "tu58.h"

#ifdef MACOSX
// clock_gettime() is not available under OSX
// clock_gettime() is not available under MACOSX
#define CLOCK_REALTIME 1
#include <mach/mach_time.h>
#include <mach/clock.h>
#include <mach/mach.h>

void clock_gettime(int dummy, timespec_t *t) {
void clock_gettime (int dummy, struct timespec *t) {
uint64_t mt;
mt = mach_absolute_time();
t->tv_sec = mt / 1000000000;
Expand Down

0 comments on commit e707b2b

Please sign in to comment.