mirror of
https://github.com/simh/simh.git
synced 2026-01-26 04:01:38 +00:00
Notes For V3.2-0
RESTRICTION: The PDP-15 FPP is only partially debugged. Do NOT enable this feature for normal operations. WARNING: The core simulator files (scp.c, sim_*.c) have been reorganized. Unzip V3.2-0 to an empty directory before attempting to compile the source. IMPORTANT: If you are compiling for UNIX, please read the notes for Ethernet very carefully. You may need to download a new version of the pcap library, or make changes to the makefile, to get Ethernet support to work. 1. New Features in 3.2-0 1.1 SCP and libraries - Added SHOW <device> RADIX command. - Added SHOW <device> MODIFIERS command. - Added SHOW <device> NAMES command. - Added SET/SHOW <device> DEBUG command. - Added sim_vm_parse_addr and sim_vm_fprint_addr optional interfaces. - Added REG_VMAD flag. - Split SCP into separate libraries for easier modification. - Added more room to the device and unit flag fields. - Changed terminal multiplexor library to support unlimited. number of async lines. 1.2 All DECtapes - Added STOP_EOR flag to enable end-of-reel error stop - Added device debug support. 1.3 Nova and Eclipse - Added QTY and ALM multiplexors (Bruce Ray). 1.4 LGP-30 - Added LGP-30/LGP-21 simulator. 1.5 PDP-11 - Added format, address increment inhibit, transfer overrun detection to RK. - Added device debug support to HK, RP, TM, TQ, TS. - Added DEUNA/DELUA (XU) support (Dave Hittner). - Add DZ per-line logging. 1.6 18b PDP's - Added support for 1-4 (PDP-9)/1-16 (PDP-15) additional terminals. 1.7 PDP-10 - Added DEUNA/DELUA (XU) support (Dave Hittner). 1.8 VAX - Added extended memory to 512MB (Mark Pizzolato). - Added RXV21 support. 2. Bugs Fixed in 3.2-0 2.1 SCP - Fixed double logging of SHOW BREAK (found by Mark Pizzolato). - Fixed implementation of REG_VMIO. 2.2 Nova and Eclipse - Fixed device enable/disable support (found by Bruce Ray). 2.3 PDP-1 - Fixed bug in LOAD (found by Mark Crispin). 2.4 PDP-10 - Fixed bug in floating point unpack. - Fixed bug in FIXR (found by Phil Stone, fixed by Chris Smith). 2.6 PDP-11 - Fixed bug in RQ interrupt control (found by Tom Evans). 2.6 PDP-18B - Fixed bug in PDP-15 XVM g_mode implementation. - Fixed bug in PDP-15 indexed address calculation. - Fixed bug in PDP-15 autoindexed address calculation. - Fixed bugs in FPP-15 instruction decode. - Fixed clock response to CAF. - Fixed bug in hardware read-in mode bootstrap. - Fixed PDP-15 XVM instruction decoding errors. 2.7 VAX - Fixed PC read fault in EXTxV. - Fixed PC write fault in INSV.
This commit is contained in:
committed by
Mark Pizzolato
parent
1da2d9452d
commit
26aa6de663
@@ -1,6 +1,6 @@
|
||||
/* id16_cpu.c: Interdata 16b CPU simulator
|
||||
|
||||
Copyright (c) 2000-2003, Robert M. Supnik
|
||||
Copyright (c) 2000-2004, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id16_dboot.c: Interdata 16b simulator disk bootstrap
|
||||
|
||||
Copyright (c) 2000-2003, Robert M. Supnik
|
||||
Copyright (c) 2000-2004, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id16_sys.c: Interdata 16b simulator interface
|
||||
|
||||
Copyright (c) 2000-2003, Robert M. Supnik
|
||||
Copyright (c) 2000-2004, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -23,6 +23,7 @@
|
||||
be used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization from Robert M Supnik.
|
||||
|
||||
26-Mar-04 RMS Fixed warning with -std=c99
|
||||
27-Feb-03 RMS Added relative addressing support
|
||||
*/
|
||||
|
||||
@@ -47,7 +48,7 @@ extern uint16 *M;
|
||||
t_stat fprint_sym_m (FILE *of, t_addr addr, t_value *val, t_bool cf);
|
||||
t_stat parse_sym_m (char *cptr, t_addr addr, t_value *val, t_bool cf);
|
||||
extern t_stat lp_load (FILE *fileref, char *cptr, char *fnam);
|
||||
extern pt_dump (FILE *of, char *cptr, char *fnam);
|
||||
extern t_stat pt_dump (FILE *of, char *cptr, char *fnam);
|
||||
|
||||
/* SCP data structures and interface routines
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
cpu Interdata 32b CPU
|
||||
|
||||
25-Jan-04 RMS Revised for device debug support
|
||||
31-Dec-03 RMS Fixed bug in cpu_set_hist
|
||||
22-Sep-03 RMS Added additional instruction decode types
|
||||
Added instruction history
|
||||
@@ -191,6 +192,11 @@ struct InstHistory {
|
||||
#define ABS(x) (((x) & SIGN32)? NEG (x): (x))
|
||||
#define DNEG(x,y) y = NEG (y); \
|
||||
x = (~(x) + (y == 0)) & DMASK32
|
||||
|
||||
/* Logging */
|
||||
|
||||
#define LOG_CPU_I 0x0001 /* intr/exception */
|
||||
#define LOG_CPU_C 0x0002 /* context change */
|
||||
|
||||
uint32 GREG[16 * NRSETS] = { 0 }; /* general registers */
|
||||
uint32 *M = NULL; /* memory */
|
||||
@@ -219,7 +225,6 @@ REG *pcq_r = NULL; /* PC queue reg ptr */
|
||||
uint32 dec_flgs = 0; /* decode flags */
|
||||
uint32 fp_in_hwre = 0; /* ucode vs hwre fp */
|
||||
uint32 pawidth = PAWIDTH32; /* addr mask */
|
||||
uint32 cpu_log = 0; /* debug logging */
|
||||
uint32 hst_p = 0; /* history pointer */
|
||||
uint32 hst_lnt = 0; /* history length */
|
||||
struct InstHistory *hst = NULL; /* instruction history */
|
||||
@@ -231,7 +236,7 @@ extern int32 sim_interval;
|
||||
extern int32 sim_int_char;
|
||||
extern int32 sim_brk_types, sim_brk_dflt, sim_brk_summ; /* breakpoint info */
|
||||
extern UNIT pic_unit, lfc_unit, pas_unit; /* timers */
|
||||
extern FILE *sim_log;
|
||||
extern FILE *sim_deb;
|
||||
|
||||
uint32 ReadB (uint32 loc, uint32 rel);
|
||||
uint32 ReadH (uint32 loc, uint32 rel);
|
||||
@@ -538,7 +543,6 @@ REG cpu_reg[] = {
|
||||
{ BRDATA (PCQ, pcq, 16, 20, PCQ_SIZE), REG_RO+REG_CIRC },
|
||||
{ HRDATA (PCQP, pcq_p, 6), REG_HRO },
|
||||
{ HRDATA (WRU, sim_int_char, 8) },
|
||||
{ HRDATA (DBGLOG, cpu_log, 16), REG_HIDDEN },
|
||||
{ HRDATA (BLKIOD, blk_io.dfl, 16), REG_HRO },
|
||||
{ HRDATA (BLKIOC, blk_io.cur, 20), REG_HRO },
|
||||
{ HRDATA (BLKIOE, blk_io.end, 20), REG_HRO },
|
||||
@@ -561,12 +565,18 @@ MTAB cpu_mod[] = {
|
||||
&cpu_set_hist, &cpu_show_hist },
|
||||
{ 0 } };
|
||||
|
||||
DEBTAB cpu_deb[] = {
|
||||
{ "INTEXC", LOG_CPU_I },
|
||||
{ "CONTEXT", LOG_CPU_C },
|
||||
{ NULL, 0 } };
|
||||
|
||||
DEVICE cpu_dev = {
|
||||
"CPU", &cpu_unit, cpu_reg, cpu_mod,
|
||||
1, 16, 20, 1, 16, 8,
|
||||
&cpu_ex, &cpu_dep, &cpu_reset,
|
||||
NULL, NULL, NULL,
|
||||
&cpu_dib, 0 };
|
||||
&cpu_dib, DEV_DEBUG, 0,
|
||||
cpu_deb, NULL, NULL };
|
||||
|
||||
t_stat sim_instr (void)
|
||||
{
|
||||
@@ -1307,7 +1317,7 @@ case 0xE1: /* SVC - RX */
|
||||
R[14] = t; /* old PSW */
|
||||
R[15] = PC; /* old PC */
|
||||
PC = ReadH (SVNPC + r1 + r1, P); /* new PC */
|
||||
if (DBG_LOG (LOG_CPU_C)) fprintf (sim_log,
|
||||
if (DEBUG_PRI (cpu_dev, LOG_CPU_C)) fprintf (sim_deb,
|
||||
">>SVC: oPC = %X, oPSW = %X, nPC = %X, nPSW = %X\n",
|
||||
pcq[pcq_p], t, PC, PSW);
|
||||
break;
|
||||
@@ -1341,7 +1351,7 @@ case 0xE3: /* SCP - RXH */
|
||||
case 0x18: /* LPSWR - RR */
|
||||
PCQ_ENTRY; /* effective branch */
|
||||
PC = R[(r2 + 1) & 0xF] & VAMASK; /* new PC (old reg set) */
|
||||
if (DBG_LOG (LOG_CPU_C)) fprintf (sim_log,
|
||||
if (DEBUG_PRI (cpu_dev, LOG_CPU_C)) fprintf (sim_deb,
|
||||
">>LPSWR: oPC = %X, oPSW = %X, nPC = %X, nPSW = %X\n",
|
||||
pcq[pcq_p], BUILD_PSW (cc), PC, opnd);
|
||||
cc = newPSW (opnd); /* new PSW */
|
||||
@@ -1351,7 +1361,7 @@ case 0x18: /* LPSWR - RR */
|
||||
case 0xC2: /* LPSW - RXF */
|
||||
PCQ_ENTRY; /* effective branch */
|
||||
PC = ReadF ((ea + 4) & VAMASK, VR) & VAMASK; /* new PC */
|
||||
if (DBG_LOG (LOG_CPU_C)) fprintf (sim_log,
|
||||
if (DEBUG_PRI (cpu_dev, LOG_CPU_C)) fprintf (sim_deb,
|
||||
">>LPSW: oPC = %X, oPSW = %X, nPC = %X, nPSW = %X\n",
|
||||
pcq[pcq_p], BUILD_PSW (cc), PC, opnd);
|
||||
cc = newPSW (opnd); /* new PSW */
|
||||
@@ -1587,7 +1597,7 @@ if (cpu_unit.flags & UNIT_832) { /* 8/32? */
|
||||
R[15] = oldPC; } /* PC to new 15 */
|
||||
else { GREG[14] = oldPSW; /* 7/32, PSW to set 0 14 */
|
||||
GREG[15] = oldPC; } /* PC to set 0 15 */
|
||||
if (DBG_LOG (LOG_CPU_C)) fprintf (sim_log,
|
||||
if (DEBUG_PRI (cpu_dev, LOG_CPU_I)) fprintf (sim_deb,
|
||||
">>Exc %X: oPC = %X, oPSW = %X, nPC = %X, nPSW = %X\n",
|
||||
loc, oldPC, oldPSW, PC, PSW | cc | flg);
|
||||
return cc | flg; /* return CC */
|
||||
@@ -1672,7 +1682,7 @@ newPSW (0x2800); /* new PSW */
|
||||
R[0] = oldPSW; /* save old PSW */
|
||||
R[1] = PC; /* save PC */
|
||||
R[2] = dev; /* set dev # */
|
||||
if (DBG_LOG (LOG_CPU_C)) fprintf (sim_log,
|
||||
if (DEBUG_PRI (cpu_dev, LOG_CPU_I)) fprintf (sim_deb,
|
||||
">>Int %X: oPC = %X, oPSW = %X, nPC = %X, nPSW = %X\n",
|
||||
dev, PC, oldPSW, vec, 0x2800);
|
||||
if (DEV_ACC (dev)) { /* dev exist? */
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id32_dboot.c: Interdata 32b simulator disk bootstrap
|
||||
|
||||
Copyright (c) 2000-2003, Robert M. Supnik
|
||||
Copyright (c) 2000-2004, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id32_sys.c: Interdata 32b simulator interface
|
||||
|
||||
Copyright (c) 2000-2003, Robert M. Supnik
|
||||
Copyright (c) 2000-2004, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id_defs.h: Interdata 16b/32b simulator definitions
|
||||
|
||||
Copyright (c) 2000-2003, Robert M. Supnik
|
||||
Copyright (c) 2000-2004, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -26,6 +26,7 @@
|
||||
The author gratefully acknowledges the help of Carl Friend and Al Kossow,
|
||||
who provided key documents about the Interdata product line.
|
||||
|
||||
25-Jan-04 RMS Removed local logging support
|
||||
22-Sep-03 RMS Added additional instruction decode types
|
||||
21-Jun-03 RMS Changed subroutine argument for ARM compiler conflict
|
||||
25-Apr-03 RMS Revised for extended file support
|
||||
@@ -457,17 +458,6 @@ typedef struct interdib DIB;
|
||||
#define MIN(x,y) (((x) < (y))? (x): (y))
|
||||
#define MAX(x,y) (((x) > (y))? (x): (y))
|
||||
|
||||
/* Logging */
|
||||
|
||||
#define LOG_CPU_I 0x0001 /* instructions */
|
||||
#define LOG_CPU_C 0x0002 /* context change */
|
||||
#define LOG_DP 0x0010
|
||||
#define LOG_IDC 0x0020
|
||||
#define LOG_MT 0x0040
|
||||
#define LOG_FD 0x0080
|
||||
|
||||
#define DBG_LOG(x) (sim_log && (cpu_log & (x)))
|
||||
|
||||
/* Function prototypes */
|
||||
|
||||
int32 int_chg (uint32 irq, int32 dat, int32 armdis);
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
To: Users
|
||||
From: Bob Supnik
|
||||
Subj: Interdata 16b/32b Simulator Usage
|
||||
Date: 15-Jul-2003
|
||||
Date: 15-Feb-2004
|
||||
|
||||
COPYRIGHT NOTICE
|
||||
|
||||
The following copyright notice applies to both the SIMH source and binary:
|
||||
|
||||
Original code published in 1993-2003, written by Robert M Supnik
|
||||
Copyright (c) 1993-2003, Robert M Supnik
|
||||
Original code published in 1993-2004, written by Robert M Supnik
|
||||
Copyright (c) 1993-2004, Robert M Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -36,15 +36,21 @@ This memorandum documents the Interdata 16b and 32b simulators.
|
||||
|
||||
1. Simulator Files
|
||||
|
||||
sim/ sim_defs.h
|
||||
sim/ scp.h
|
||||
sim_console.h
|
||||
sim_defs.h
|
||||
sim_fio.h
|
||||
sim_rev.h
|
||||
sim_sock.h
|
||||
sim_tape.h
|
||||
sim_timer.h
|
||||
sim_tmxr.h
|
||||
scp.c
|
||||
scp_tty.c
|
||||
sim_console.c
|
||||
sim_fio.c
|
||||
sim_sock.c
|
||||
sim_tape.c
|
||||
sim_timer.c
|
||||
sim_tmxr.c
|
||||
|
||||
sim/interdata/ id_defs.h
|
||||
@@ -596,7 +602,13 @@ automatically to upper case. In 7B mode, input and output characters are
|
||||
masked to 7 bits. In 8B mode, characters are not modified. The default
|
||||
mode is UC. Each line (each unit of PASL) can also be set for modem
|
||||
control with the command SET PASLn DATASET. The defaults are 7b mode
|
||||
and DATASET disabled.
|
||||
and DATASET disabled. Finally, each line supports output logging.
|
||||
The SET PASLn LOG command enables logging on a line:
|
||||
|
||||
SET PASLn LOG=filename log output of line n to filename
|
||||
|
||||
The SET PASLn NOLOG command disables logging and closes the open log
|
||||
file, if any.
|
||||
|
||||
Once PAS is attached and the simulator is running, the terminals listen
|
||||
for connections on the specified port. They assume that the incoming
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id_dp.c: Interdata 2.5MB/10MB cartridge disk simulator
|
||||
|
||||
Copyright (c) 2001-2003, Robert M. Supnik
|
||||
Copyright (c) 2001-2004, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
dp M46-421 2.5MB/10MB cartridge disk
|
||||
|
||||
25-Jan-04 RMS Revised for device debug support
|
||||
25-Apr-03 RMS Revised for extended file support
|
||||
16-Feb-03 RMS Fixed read to test transfer ok before selch operation
|
||||
*/
|
||||
@@ -136,7 +137,7 @@ static struct drvtyp drv_tab[] = {
|
||||
{ 0 } };
|
||||
|
||||
extern uint32 int_req[INTSZ], int_enb[INTSZ];
|
||||
extern FILE *sim_log;
|
||||
extern FILE *sim_deb;
|
||||
|
||||
uint8 dpxb[DP_NUMBY]; /* xfer buffer */
|
||||
uint32 dp_bptr = 0; /* buffer ptr */
|
||||
@@ -152,7 +153,6 @@ uint32 dpd_arm[DP_NUMDR] = { 0 }; /* drives armed */
|
||||
int32 dp_stime = 100; /* seek latency */
|
||||
int32 dp_rtime = 100; /* rotate latency */
|
||||
int32 dp_wtime = 1; /* word time */
|
||||
uint32 dp_log = 0; /* debug log */
|
||||
uint8 dp_tplte[(2 * DP_NUMDR) + 2]; /* fix/rmv + ctrl + end */
|
||||
|
||||
DEVICE dp_dev;
|
||||
@@ -213,7 +213,6 @@ REG dp_reg[] = {
|
||||
DP_NUMDR, REG_RO) },
|
||||
{ URDATA (CAPAC, dp_unit[0].capac, 10, T_ADDR_W, 0,
|
||||
DP_NUMDR, PV_LEFT | REG_HRO) },
|
||||
{ FLDATA (LOG, dp_log, 0), REG_HIDDEN },
|
||||
{ HRDATA (DEVNO, dp_dib.dno, 8), REG_HRO },
|
||||
{ HRDATA (SELCH, dp_dib.sch, 2), REG_HRO },
|
||||
{ NULL } };
|
||||
@@ -246,7 +245,7 @@ DEVICE dp_dev = {
|
||||
DP_NUMDR, 16, 24, 1, 16, 8,
|
||||
NULL, NULL, &dp_reset,
|
||||
&id_dboot, &dp_attach, &dp_detach,
|
||||
&dp_dib, DEV_DISABLE };
|
||||
&dp_dib, DEV_DISABLE | DEV_DEBUG };
|
||||
|
||||
/* Controller: IO routine */
|
||||
|
||||
@@ -266,7 +265,7 @@ case IO_RD: /* read data */
|
||||
else dp_sta = dp_sta | STA_BSY; /* xfr? set busy */
|
||||
return dp_db; /* return data */
|
||||
case IO_WD: /* write data */
|
||||
if (sim_log && dp_log) fprintf (sim_log,
|
||||
if (DEBUG_PRS (dp_dev)) fprintf (sim_deb,
|
||||
">>DPC WD = %02X, STA = %02X\n", dat, dp_sta);
|
||||
if (dp_sta & STC_IDL) dp_hdsc = dat & HS_MASK; /* idle? hdsc */
|
||||
else { /* data xfer */
|
||||
@@ -278,7 +277,7 @@ case IO_SS: /* status */
|
||||
if (t & SETC_EX) t = t | STA_EX; /* test for EX */
|
||||
return t;
|
||||
case IO_OC: /* command */
|
||||
if (sim_log && dp_log) fprintf (sim_log,
|
||||
if (DEBUG_PRS (dp_dev)) fprintf (sim_deb,
|
||||
">>DPC OC = %02X, STA = %02X\n", dat, dp_sta);
|
||||
f = dat & CMC_MASK; /* get cmd */
|
||||
if (f & CMC_CLR) { /* clear? */
|
||||
@@ -315,7 +314,7 @@ case IO_ADR: /* select */
|
||||
if (dp_sta & STC_IDL) dp_svun = dev; /* idle? save unit */
|
||||
return BY; /* byte only */
|
||||
case IO_WD: /* write data */
|
||||
if (sim_log && dp_log) fprintf (sim_log,
|
||||
if (DEBUG_PRS (dp_dev)) fprintf (sim_deb,
|
||||
">>DP%d WD = %02X, STA = %02X\n", u, dat, dp_sta);
|
||||
if (GET_DTYPE (uptr->flags) == TYPE_2315) /* 2.5MB drive? */
|
||||
dp_cyl = dat & 0xFF; /* cyl is 8b */
|
||||
@@ -330,7 +329,7 @@ case IO_SS: /* status */
|
||||
if (t & SETD_EX) t = t | STA_EX; /* test for ex */
|
||||
return t;
|
||||
case IO_OC: /* command */
|
||||
if (sim_log && dp_log) fprintf (sim_log,
|
||||
if (DEBUG_PRS (dp_dev)) fprintf (sim_deb,
|
||||
">>DP%d OC = %02X, STA = %02X\n", u, dat, dp_sta);
|
||||
dpd_arm[u] = int_chg (v_DPC + u + 1, dat, dpd_arm[u]);
|
||||
if (dat & CMD_SK) t = dp_cyl; /* seek? get cyl */
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id_fd.c: Interdata floppy disk simulator
|
||||
|
||||
Copyright (c) 2001-2003, Robert M Supnik
|
||||
Copyright (c) 2001-2004, Robert M Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id_fp.c: Interdata floating point instructions
|
||||
|
||||
Copyright (c) 2000-2003, Robert M. Supnik
|
||||
Copyright (c) 2000-2004, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id_idc.c: Interdata MSM/IDC disk controller simulator
|
||||
|
||||
Copyright (c) 2001-2003, Robert M. Supnik
|
||||
Copyright (c) 2001-2004, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id_io.c: Interdata CPU-independent I/O routines
|
||||
|
||||
Copyright (c) 2001-2003, Robert M. Supnik
|
||||
Copyright (c) 2001-2004, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id_lp.c: Interdata line printer
|
||||
|
||||
Copyright (c) 2001-2003, Robert M. Supnik
|
||||
Copyright (c) 2001-2004, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id_mt.c: Interdata magnetic tape simulator
|
||||
|
||||
Copyright (c) 2001-2003, Robert M Supnik
|
||||
Copyright (c) 2001-2004, Robert M Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id_pas.c: Interdata programmable async line adapter simulator
|
||||
|
||||
Copyright (c) 2001-2003, Robert M Supnik
|
||||
Copyright (c) 2001-2004, Robert M Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
pas Programmable asynchronous line adapter(s)
|
||||
|
||||
05-Jan-04 RMS Revised for tmxr library changes
|
||||
09-May-03 RMS Added network device flag
|
||||
|
||||
This module implements up to 32 individual serial interfaces, representing
|
||||
@@ -100,7 +101,7 @@ uint32 pas_tps = 50; /* polls/second */
|
||||
uint8 pas_tplte[PAS_LINES * 2 + 1]; /* template */
|
||||
|
||||
TMLN pas_ldsc[PAS_LINES] = { 0 }; /* line descriptors */
|
||||
TMXR pas_desc = { 8, 0, 0, &pas_ldsc[0], NULL }; /* mux descriptor */
|
||||
TMXR pas_desc = { 8, 0, 0, pas_ldsc }; /* mux descriptor */
|
||||
#define PAS_ENAB pas_desc.lines
|
||||
|
||||
uint32 pas (uint32 dev, uint32 op, uint32 dat);
|
||||
@@ -145,16 +146,16 @@ REG pas_reg[] = {
|
||||
|
||||
MTAB pas_mod[] = {
|
||||
{ MTAB_XTD | MTAB_VDV | MTAB_VAL, 0, "lines", "LINES",
|
||||
&pas_vlines, NULL, &pas_nlreg },
|
||||
&pas_vlines, NULL, &pas_nlreg },
|
||||
{ MTAB_XTD | MTAB_VDV, 1, NULL, "DISCONNECT",
|
||||
&tmxr_dscln, NULL, &pas_desc },
|
||||
&tmxr_dscln, NULL, &pas_desc },
|
||||
{ UNIT_ATT, UNIT_ATT, "connections", NULL, NULL, &pas_summ },
|
||||
{ MTAB_XTD | MTAB_VDV | MTAB_NMO, 1, "CONNECTIONS", NULL,
|
||||
NULL, &pas_show, NULL },
|
||||
NULL, &pas_show, NULL },
|
||||
{ MTAB_XTD | MTAB_VDV | MTAB_NMO, 0, "STATISTICS", NULL,
|
||||
NULL, &pas_show, NULL },
|
||||
NULL, &pas_show, NULL },
|
||||
{ MTAB_XTD|MTAB_VDV, 0, "DEVNO", "DEVNO",
|
||||
&set_dev, &show_dev, NULL },
|
||||
&set_dev, &show_dev, NULL },
|
||||
{ 0 } };
|
||||
|
||||
DEVICE pas_dev = {
|
||||
@@ -212,6 +213,10 @@ MTAB pasl_mod[] = {
|
||||
{ UNIT_UC+UNIT_8B, UNIT_8B, "8b", "8B", NULL },
|
||||
{ UNIT_MDM, 0, "no dataset", "NODATASET", NULL },
|
||||
{ UNIT_MDM, UNIT_MDM, "dataset", "DATASET", NULL },
|
||||
{ MTAB_XTD|MTAB_VUN|MTAB_NC, 0, "LOG", "LOG",
|
||||
&tmxr_set_log, &tmxr_show_log, &pas_desc },
|
||||
{ MTAB_XTD|MTAB_VUN|MTAB_NC, 0, NULL, "NOLOG",
|
||||
&tmxr_set_nolog, NULL, &pas_desc },
|
||||
{ 0 } };
|
||||
|
||||
REG pasl_reg[] = {
|
||||
@@ -270,7 +275,7 @@ case IO_OC: /* command */
|
||||
if ((pas_cmd[ln] & CMD_DTR) && (pas_sta[ln] & STA_RING))
|
||||
pas_sta[ln] = pas_sta[ln] & ~(STA_CROF | STA_RING);
|
||||
if (old_cmd & ~pas_cmd[ln] & CMD_DTR) {
|
||||
tmxr_msg (pas_ldsc[ln].conn, "\r\nLine hangup\r\n");
|
||||
tmxr_linemsg (&pas_ldsc[ln], "\r\nLine hangup\r\n");
|
||||
tmxr_reset_ln (&pas_ldsc[ln]); /* reset line */
|
||||
pas_sta[ln] = pas_sta[ln] | STA_CROF; /* no carrier */
|
||||
if (pas_rarm[ln]) SET_INT (v_PAS + ln + ln); } }
|
||||
@@ -424,9 +429,7 @@ if (pas_unit.flags & UNIT_ATT) { /* master att? */
|
||||
t = sim_rtcn_init (pas_unit.wait, TMR_PAS);
|
||||
sim_activate (&pas_unit, t); } } /* activate */
|
||||
else sim_cancel (&pas_unit); /* else stop */
|
||||
for (i = 0; i < PAS_LINES; i++) {
|
||||
pas_desc.ldsc[i] = &pas_ldsc[i];
|
||||
pas_reset_ln (i); }
|
||||
for (i = 0; i < PAS_LINES; i++) pas_reset_ln (i);
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
@@ -501,7 +504,7 @@ if (newln < PAS_ENAB) {
|
||||
return SCPE_OK;
|
||||
for (i = newln; i < PAS_ENAB; i++) {
|
||||
if (pas_ldsc[i].conn) {
|
||||
tmxr_msg (pas_ldsc[i].conn, "\r\nOperator disconnected line\r\n");
|
||||
tmxr_linemsg (&pas_ldsc[i], "\r\nOperator disconnected line\r\n");
|
||||
tmxr_reset_ln (&pas_ldsc[i]); } /* reset line */
|
||||
pasl_unit[i].flags = pasl_unit[i].flags | UNIT_DIS;
|
||||
pas_reset_ln (i); }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id_pt.c: Interdata paper tape reader
|
||||
|
||||
Copyright (c) 2000-2003, Robert M. Supnik
|
||||
Copyright (c) 2000-2004, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -332,7 +332,7 @@ char *tptr;
|
||||
extern DEVICE cpu_dev;
|
||||
|
||||
if ((cptr == NULL) || (*cptr == 0)) return SCPE_2FARG;
|
||||
tptr = get_range (cptr, &lo, &hi, cpu_dev.aradix, 0xFFFF, 0);
|
||||
tptr = get_range (NULL, cptr, &lo, &hi, cpu_dev.aradix, 0xFFFF, 0);
|
||||
if ((tptr == NULL) || (lo < INTSVT)) return SCPE_ARG;
|
||||
if (*tptr != 0) return SCPE_2MARG;
|
||||
for (i = lo, cs = 0; i <= hi; i++) cs = cs ^ IOReadB (i);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id_tt.c: Interdata teletype
|
||||
|
||||
Copyright (c) 2000-2003, Robert M. Supnik
|
||||
Copyright (c) 2000-2004, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id_uvc.c: Interdata universal clock
|
||||
|
||||
Copyright (c) 2001-2003, Robert M. Supnik
|
||||
Copyright (c) 2001-2004, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
|
||||
Reference in New Issue
Block a user