1
0
mirror of https://github.com/simh/simh.git synced 2026-02-03 15:13:56 +00:00

Notes For V3.0-0

Because some key files have changed, V3.0 should be unzipped to a
clean directory.

1. New Features in 3.0-0

1.1 SCP and Libraries

- Added ASSIGN/DEASSIGN (logical name) commands.
- Changed RESTORE to unconditionally detach files.
- Added E11 and TPC format support to magtape library.
- Fixed bug in SHOW CONNECTIONS.
- Added USE_ADDR64 support

1.2 All magtapes

- Magtapes support SIMH format, E11 format, and TPC format (read only).
- SET <tape_unit> FORMAT=format sets the specified tape unit's format.
- SHOW <tape_unit> FORMAT displays the specified tape unit's format.
- Tape format can also be set as part of the ATTACH command, using
  the -F switch.

1.3 VAX

- VAX can be compiled without USE_INT64.
- If compiled with USE_INT64 and USE_ADDR64, RQ and TQ controllers support
  files > 2GB.
- VAX ROM has speed control (SET ROM DELAY/NODELAY).

2. Bugs Fixed in 3.01-0

2.1 VAX

- Fixed CVTfi bug: integer overflow not set if exponent out of range
- Fixed EMODx bugs:
  o First and second operands reversed
  o Separated fraction received wrong exponent
  o Overflow calculation on separated integer incorrect
  o Fraction not set to zero if exponent out of range
- Fixed interval timer and ROM access to pass power-up self-test even on very
  fast host processors (fixes from Mark Pizzolato).

2.2 1401

- Fixed mnemonic, instruction lengths, and reverse scan length check bug for MCS.
- Fixed MCE bug, BS off by 1 if zero suppress.
- Fixed chaining bug, D lost if return to SCP.
- Fixed H branch, branch occurs after continue.
- Added check for invalid 8 character MCW, LCA.
- Fixed magtape load-mode end of record response.

2.3 Nova

- Fixed DSK variable size interaction with restore.

2.4 PDP-1

- Fixed DT variable size interaction with restore.

2.5 PDP-11

- Fixed DT variable size interaction with restore.
- Fixed bug in MMR1 update (found by Tim Stark).
- Added XQ features and fixed bugs:
  o Corrected XQ interrupts on IE state transition (code by Tom Evans).
  o Added XQ interrupt clear on soft reset.
  o Removed XQ interrupt when setting XL or RL (multiple people).
  o Added SET/SHOW XQ STATS.
  o Added SHOW XQ FILTERS.
  o Added ability to split received packet into multiple buffers.
  o Added explicit runt and giant packet processing.

2.6 PDP-18B

- Fixed DT, RF variable size interaction with restore.
- Fixed MT bug in MTTR.

2.7 PDP-8

- Fixed DT, DF, RF, RX variable size interaction with restore.
- Fixed MT bug in SKTR.

2.8 HP2100

- Fixed bug in DP (13210A controller only), DQ read status.
- Fixed bug in DP, DQ seek complete.

2.9 GRI

- Fixed bug in SC queue pointer management.

3. New Features in 3.0 vs prior releases

N/A

4. Bugs Fixed in 3.0 vs prior releases

N/A

5. General Notes

WARNING: The RESTORE command has changed.  RESTORE will now
detach an attached file on a unit, if that unit did not have
an attached file in the saved configuration.  This is required
to assure that the unit flags and the file state are consistent.

WARNING: The compilation scheme for the PDP-10, PDP-11, and VAX
has changed.  Use one of the supplied build files, or read the
documentation carefully, before compiling any of these simulators.
This commit is contained in:
Bob Supnik
2003-06-25 09:20:00 -07:00
committed by Mark Pizzolato
parent 43385c9616
commit 4ffd3be790
215 changed files with 12913 additions and 8563 deletions

View File

@@ -1,6 +1,6 @@
/* h316_cpu.c: Honeywell 316/516 CPU simulator
Copyright (c) 1999-2002, Robert M. Supnik
Copyright (c) 1999-2003, 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"),
@@ -195,7 +195,7 @@
#define PCQ_ENTRY pcq[pcq_p = (pcq_p - 1) & PCQ_MASK] = PC
#define PCQ_TOP pcq[pcq_p]
#define UNIT_V_MSIZE (UNIT_V_UF) /* dummy mask */
#define UNIT_MSIZE (1 << UNIT_V_MSIZE)
#define UNIT_MSIZE (1u << UNIT_V_MSIZE)
#define m7 0001000 /* for generics */
#define m8 0000400
#define m9 0000200
@@ -229,17 +229,20 @@ int32 pcq_p = 0; /* PC queue ptr */
REG *pcq_r = NULL; /* PC queue reg ptr */
int32 dlog = 0; /* debug log */
int32 turnoff = 0;
extern int32 sim_int_char;
extern int32 sim_interval;
extern int32 sim_brk_types, sim_brk_dflt, sim_brk_summ; /* breakpoint info */
extern FILE *sim_log;
extern t_stat fprint_sym (FILE *of, t_addr addr, t_value *val,
UNIT *uptr, int32 sw);
t_stat cpu_ex (t_value *vptr, t_addr addr, UNIT *uptr, int32 sw);
t_stat cpu_dep (t_value val, t_addr addr, UNIT *uptr, int32 sw);
t_stat cpu_reset (DEVICE *dptr);
t_stat cpu_set_noext (UNIT *uptr, int32 val, char *cptr, void *desc);
t_stat cpu_set_size (UNIT *uptr, int32 val, char *cptr, void *desc);
extern t_stat fprint_sym (FILE *of, t_addr addr, t_value *val,
UNIT *uptr, int32 sw);
/* CPU data structures
@@ -276,7 +279,7 @@ REG cpu_reg[] = {
{ FLDATA (STOP_INST, stop_inst, 0) },
{ FLDATA (STOP_DEV, stop_dev, 1) },
{ DRDATA (INDMAX, ind_max, 8), REG_NZ + PV_LEFT },
{ BRDATA (PCQ, pcq, 8, 15, PCQ_SIZE), REG_RO+REG_CIRC },
{ BRDATA (PCQ, pcq, 8, 15, PCQ_SIZE), REG_RO + REG_CIRC },
{ ORDATA (PCQP, pcq_p, 6), REG_HRO },
{ ORDATA (WRU, sim_int_char, 8) },
{ FLDATA (DLOG, dlog, 0), REG_HIDDEN },
@@ -323,10 +326,9 @@ int32 (*iotab[64])() = {
t_stat sim_instr (void)
{
extern int32 sim_interval;
extern UNIT clk_unit;
int32 AR, BR, MB, Y, t1, t2, t3, skip;
unsigned int32 ut;
uint32 ut;
t_stat reason;
t_stat Ea (int32 inst, int32 *addr);
void Write (int32 val, int32 addr);
@@ -377,6 +379,7 @@ else { if (sim_brk_summ &&
MB = Read (Y); /* fetch instr */
PC = NEWA (Y, Y + 1); /* incr PC */
dev_ready = dev_ready | INT_NODEF; }
sim_interval = sim_interval - 1;
if (dlog && sim_log && !turnoff) { /* cycle log? */
int32 op = I_GETOP (MB) & 017; /* core opcode */
@@ -389,6 +392,7 @@ if (dlog && sim_log && !turnoff) { /* cycle log? */
/* Memory reference instructions */
switch (I_GETOP (MB)) { /* case on <1:6> */
case 001: case 021: case 041: case 061: /* JMP */
if (reason = Ea (MB, &Y)) break; /* eff addr */
PCQ_ENTRY; /* save PC */
@@ -401,6 +405,7 @@ case 001: case 021: case 041: case 061: /* JMP */
else turnoff = 0; } /* no, log */
if (extoff_pending) ext = extoff_pending = 0; /* cond ext off */
break;
case 002: case 022: case 042: case 062: /* LDA */
if (reason = Ea (MB, &Y)) break; /* eff addr */
if (dp) { /* double prec? */
@@ -409,10 +414,12 @@ case 002: case 022: case 042: case 062: /* LDA */
sc = 0; }
else AR = Read (Y); /* no, get word */
break;
case 003: case 023: case 043: case 063: /* ANA */
if (reason = Ea (MB, &Y)) break; /* eff addr */
AR = AR & Read (Y);
break;
case 004: case 024: case 044: case 064: /* STA */
if (reason = Ea (MB, &Y)) break; /* eff addr */
if (dp) { /* double prec? */
@@ -421,10 +428,12 @@ case 004: case 024: case 044: case 064: /* STA */
sc = 0; }
else Write (AR, Y); /* no, store word */
break;
case 005: case 025: case 045: case 065: /* ERA */
if (reason = Ea (MB, &Y)) break; /* eff addr */
AR = AR ^ Read (Y);
break;
case 006: case 026: case 046: case 066: /* ADD */
if (reason = Ea (MB, &Y)) break; /* eff addr */
if (dp) { /* double prec? */
@@ -435,6 +444,7 @@ case 006: case 026: case 046: case 066: /* ADD */
sc = 0; }
else AR = Add16 (AR, Read (Y)); /* no, 16b add */
break;
case 007: case 027: case 047: case 067: /* SUB */
if (reason = Ea (MB, &Y)) break; /* eff addr */
if (dp) { /* double prec? */
@@ -455,32 +465,38 @@ case 010: case 030: case 050: case 070: /* JST */
PCQ_ENTRY;
PC = NEWA (PC, Y + 1); /* set new PC */
break;
case 011: case 031: case 051: case 071: /* CAS */
if (reason = Ea (MB, &Y)) break; /* eff addr */
MB = Read (Y);
if (AR == MB) PC = NEWA (PC, PC + 1);
else if (SEXT (AR) < SEXT (MB)) PC = NEWA (PC, PC + 2);
break;
case 012: case 032: case 052: case 072: /* IRS */
if (reason = Ea (MB, &Y)) break; /* eff addr */
MB = (Read (Y) + 1) & DMASK; /* incr, rewrite */
Write (MB, Y);
if (MB == 0) PC = NEWA (PC, PC + 1); /* skip if zero */
break;
case 013: case 033: case 053: case 073: /* IMA */
if (reason = Ea (MB, &Y)) break; /* eff addr */
MB = Read (Y);
Write (AR, Y); /* A to mem */
AR = MB; /* mem to A */
break;
case 015: case 055: /* STX */
if (reason = Ea (MB & ~IDX, &Y)) break; /* eff addr */
Write (XR, Y); /* store XR */
break;
case 035: case 075: /* LDX */
if (reason = Ea (MB & ~IDX, &Y)) break; /* eff addr */
XR = Read (Y); /* load XR */
break;
case 016: case 036: case 056: case 076: /* MPY */
if (cpu_unit.flags & UNIT_HSA) { /* installed? */
if (reason = Ea (MB, &Y)) break; /* eff addr */
@@ -489,6 +505,7 @@ case 016: case 036: case 056: case 076: /* MPY */
sc = 0; }
else reason = stop_inst;
break;
case 017: case 037: case 057: case 077: /* DIV */
if (cpu_unit.flags & UNIT_HSA) { /* installed? */
if (reason = Ea (MB, &Y)) break; /* eff addr */
@@ -512,6 +529,7 @@ case 014: /* OCP */
reason = t2 >> IOT_V_REASON;
turnoff = 0;
break;
case 034: /* SKS */
t2 = iotab[MB & DEVMASK] (ioSKS, I_GETFNC (MB), AR);
reason = t2 >> IOT_V_REASON;
@@ -519,6 +537,7 @@ case 034: /* SKS */
PC = NEWA (PC, PC + 1);
turnoff = 0; }
break;
case 054: /* INA */
if (MB & INCLRA) AR = 0;
t2 = iotab[MB & DEVMASK] (ioINA, I_GETFNC (MB), AR);
@@ -528,6 +547,7 @@ case 054: /* INA */
turnoff = 0; }
AR = t2 & DMASK; /* data */
break;
case 074: /* OTA */
t2 = iotab[MB & DEVMASK] (ioOTA, I_GETFNC (MB), AR);
reason = t2 >> IOT_V_REASON;
@@ -606,6 +626,7 @@ case 020:
sc = 0; /* clear sc */
if ((t1 = (-MB) & SHFMASK) == 0) break; /* shift count */
switch (I_GETFNC (MB)) { /* case shift fnc */
case 000: /* LRL */
if (t1 > 32) ut = 0; /* >32? all 0 */
else {
@@ -614,6 +635,7 @@ case 020:
ut = ut >> t1; } /* log right */
PUTDBL_U (ut); /* store A,B */
break;
case 001: /* LRS */
if (t1 > 31) t1 = 31; /* limit to 31 */
t2 = GETDBL_S (SEXT (AR), BR); /* get A'B signed */
@@ -621,6 +643,7 @@ case 020:
t2 = t2 >> t1; /* arith right */
PUTDBL_S (t2); /* store A,B */
break;
case 002: /* LRR */
t2 = t1 % 32; /* mod 32 */
ut = GETDBL_U (AR, BR); /* get A'B */
@@ -628,6 +651,7 @@ case 020:
C = (ut >> 31) & 1; /* C = A<1> */
PUTDBL_U (ut); /* store A,B */
break;
case 003: /* "long right arot" */
if (reason = stop_inst) break; /* stop on undef? */
for (t2 = 0; t2 < t1; t2++) { /* bit by bit */
@@ -636,22 +660,26 @@ case 020:
((BR & MMASK) >> 1);
AR = ((AR & SIGN) | (C << 15)) | (AR >> 1); }
break;
case 004: /* LGR */
if (t1 > 16) AR = 0; /* > 16? all 0 */
else {
C = (AR >> (t1 - 1)) & 1; /* C = last out */
AR = (AR >> t1) & DMASK; } /* log right */
break;
case 005: /* ARS */
if (t1 > 16) t1 = 16; /* limit to 16 */
C = ((SEXT (AR)) >> (t1 - 1)) & 1; /* C = last out */
AR = ((SEXT (AR)) >> t1) & DMASK; /* arith right */
break;
case 006: /* ARR */
t2 = t1 % 16; /* mod 16 */
AR = ((AR >> t2) | (AR << (16 - t2))) & DMASK;
C = (AR >> 15) & 1; /* C = A<1> */
break;
case 007: /* "short right arot" */
if (reason = stop_inst) break; /* stop on undef? */
for (t2 = 0; t2 < t1; t2++) { /* bit by bit */
@@ -669,6 +697,7 @@ case 020:
ut = ut << t1; } /* log left */
PUTDBL_U (ut); /* store A,B */
break;
case 011: /* LLS */
if (t1 > 31) t1 = 31; /* limit to 31 */
t2 = GETDBL_S (SEXT (AR), BR); /* get A'B */
@@ -677,6 +706,7 @@ case 020:
if ((t2 >> (31 - t1)) != /* shf out = sgn? */
((AR & SIGN)? -1: 0)) C = 1;
break;
case 012: /* LLR */
t2 = t1 % 32; /* mod 32 */
ut = GETDBL_U (AR, BR); /* get A'B */
@@ -684,6 +714,7 @@ case 020:
C = ut & 1; /* C = B<16> */
PUTDBL_U (ut); /* store A,B */
break;
case 013: /* "long left arot" */
if (reason = stop_inst) break; /* stop on undef? */
for (t2 = 0; t2 < t1; t2++) { /* bit by bit */
@@ -693,12 +724,14 @@ case 020:
if ((AR & SIGN) != ((AR >> 1) & SIGN)) C = 1;
AR = AR & DMASK; }
break;
case 014: /* LGL */
if (t1 > 16) AR = 0; /* > 16? all 0 */
else {
C = (AR >> (16 - t1)) & 1; /* C = last out */
AR = (AR << t1) & DMASK; } /* log left */
break;
case 015: /* ALS */
if (t1 > 16) t1 = 16; /* limit to 16 */
t2 = SEXT (AR); /* save AR */
@@ -706,11 +739,13 @@ case 020:
if ((t2 >> (16 - t1)) != /* shf out + sgn */
((AR & SIGN)? -1: 0)) C = 1;
break;
case 016: /* ALR */
t2 = t1 % 16; /* mod 16 */
AR = ((AR << t2) | (AR >> (16 - t2))) & DMASK;
C = AR & 1; /* C = A<16> */
break;
case 017: /* "short left arot" */
if (reason = stop_inst) break; /* stop on undef? */
for (t2 = 0; t2 < t1; t2++) { /* bit by bit */
@@ -826,6 +861,7 @@ return;
int32 Add16 (int32 v1, int32 v2)
{
int32 r = v1 + v2;
C = 0;
if (((v1 ^ ~v2) & (v1 ^ r)) & SIGN) C = 1;
return (r & DMASK);
@@ -834,6 +870,7 @@ return (r & DMASK);
int32 Add31 (int32 v1, int32 v2)
{
int32 r = v1 + v2;
C = 0;
if (((v1 ^ ~v2) & (v1 ^ r)) & (1u << 30)) C = 1;
return r;
@@ -1037,7 +1074,7 @@ return SCPE_OK;
t_stat cpu_set_size (UNIT *uptr, int32 val, char *cptr, void *desc)
{
int32 mc = 0;
t_addr i;
uint32 i;
if ((val <= 0) || (val > MAXMEMSIZE) || ((val & 07777) != 0) ||
(((cpu_unit.flags & UNIT_EXT) == 0) && (val > (NX_AMASK + 1))))

View File

@@ -1,6 +1,6 @@
/* h316_defs.h: Honeywell 316/516 simulator definitions
Copyright (c) 1999-2002, Robert M. Supnik
Copyright (c) 1999-2003, 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"),
@@ -22,6 +22,8 @@
Except as contained in this notice, the name of Robert M Supnik shall not
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.
25-Apr-03 RMS Revised for extended file support
*/
#include "sim_defs.h" /* simulator defns */
@@ -40,7 +42,7 @@
#define MEMSIZE (cpu_unit.capac) /* actual memory size */
#define X_AMASK (MAXMEMSIZE - 1) /* ext address mask */
#define NX_AMASK ((MAXMEMSIZE / 2) - 1) /* nx address mask */
#define MEM_ADDR_OK(x) (((t_addr) (x)) < MEMSIZE)
#define MEM_ADDR_OK(x) (((uint32) (x)) < MEMSIZE)
/* Architectural constants */
@@ -56,8 +58,8 @@
#define UNIT_V_EXT (UNIT_V_UF + 1) /* extended mem */
#define UNIT_V_HSA (UNIT_V_UF + 2) /* high speed arith */
#define UNIT_EXT (1 << UNIT_V_EXT)
#define UNIT_HSA (1 << UNIT_V_HSA)
#define UNIT_EXT (1u << UNIT_V_EXT)
#define UNIT_HSA (1u << UNIT_V_HSA)
/* Instruction format */

View File

@@ -1,7 +1,7 @@
To: Users
From: Bob Supnik
Subj: H316 Simulator Usage
Date: 15-Mar-2003
Date: 20-Apr-2003
COPYRIGHT NOTICE
@@ -152,7 +152,7 @@ Error handling is as follows:
0 out of tape
end of file 1 report error and stop
0 out of tape or paper
0 out of tape or paper
OS I/O error x report error and stop

View File

@@ -1,6 +1,6 @@
/* h316_lp.c: Honeywell 316/516 line printer
Copyright (c) 1999-2002, Robert M. Supnik
Copyright (c) 1999-2003, 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,34 +25,10 @@
lpt line printer
25-Apr-03 RMS Revised for extended file support
30-May-02 RMS Widened POS to 32b
*/
#include "h316_defs.h"
#define LPT_WIDTH 120 /* width */
#define LPT_SCAN (LPT_WIDTH / 2) /* words/scan */
#define LPT_DRUM 64 /* drum rows */
#define LPT_SVCSH 01 /* shuttle */
#define LPT_SVCPA 02 /* paper advance */
extern int32 dev_ready, dev_enable;
extern int32 stop_inst;
int32 lpt_wdpos = 0; /* word position */
int32 lpt_drpos = 0; /* drum position */
int32 lpt_crpos = 0; /* carriage position */
int32 lpt_svcst = 0; /* service state */
int32 lpt_svcch = 0; /* service channel */
int32 lpt_xfer = 0; /* transfer flag */
int32 lpt_prdn = 1; /* printing done */
char lpt_buf[LPT_WIDTH + 1] = { 0 }; /* line buffer */
int32 lpt_xtime = 5; /* transfer time */
int32 lpt_etime = 50; /* end of scan time */
int32 lpt_ptime = 5000; /* paper adv time */
int32 lpt_stopioe = 0; /* stop on error */
t_stat lpt_svc (UNIT *uptr);
t_stat lpt_reset (DEVICE *dptr);
/* The Series 16 line printer is an unbuffered Analex shuttle printer.
The Series 16 line printer is an unbuffered Analex shuttle printer.
Because it was unbuffered, the CPU had to scan out an entire line's
worth of characters (60 words) for every character on the print drum
(64 characters). Because it was a shuttle printer, the entire
@@ -81,8 +57,36 @@ t_stat lpt_reset (DEVICE *dptr);
lpt_svcch channel for paper advance (0 = no adv)
lpt_xfer transfer ready flag
lpt_prdn printing done flag
*/
LPT data structures
#include "h316_defs.h"
#define LPT_WIDTH 120 /* width */
#define LPT_SCAN (LPT_WIDTH / 2) /* words/scan */
#define LPT_DRUM 64 /* drum rows */
#define LPT_SVCSH 01 /* shuttle */
#define LPT_SVCPA 02 /* paper advance */
extern int32 dev_ready, dev_enable;
extern int32 stop_inst;
int32 lpt_wdpos = 0; /* word position */
int32 lpt_drpos = 0; /* drum position */
int32 lpt_crpos = 0; /* carriage position */
int32 lpt_svcst = 0; /* service state */
int32 lpt_svcch = 0; /* service channel */
int32 lpt_xfer = 0; /* transfer flag */
int32 lpt_prdn = 1; /* printing done */
char lpt_buf[LPT_WIDTH + 1] = { 0 }; /* line buffer */
int32 lpt_xtime = 5; /* transfer time */
int32 lpt_etime = 50; /* end of scan time */
int32 lpt_ptime = 5000; /* paper adv time */
int32 lpt_stopioe = 0; /* stop on error */
t_stat lpt_svc (UNIT *uptr);
t_stat lpt_reset (DEVICE *dptr);
/* LPT data structures
lpt_dev LPT device descriptor
lpt_unit LPT unit descriptor
@@ -103,7 +107,7 @@ REG lpt_reg[] = {
{ ORDATA (SVCST, lpt_svcst, 2) },
{ ORDATA (SVCCH, lpt_svcch, 2) },
{ BRDATA (BUF, lpt_buf, 8, 8, 120) },
{ DRDATA (POS, lpt_unit.pos, 32), PV_LEFT },
{ DRDATA (POS, lpt_unit.pos, T_ADDR_W), PV_LEFT },
{ DRDATA (XTIME, lpt_xtime, 24), PV_LEFT },
{ DRDATA (ETIME, lpt_etime, 24), PV_LEFT },
{ DRDATA (PTIME, lpt_ptime, 24), PV_LEFT },
@@ -115,7 +119,6 @@ DEVICE lpt_dev = {
1, 10, 31, 1, 8, 8,
NULL, NULL, &lpt_reset,
NULL, NULL, NULL };
/* IO routine */
@@ -127,7 +130,7 @@ switch (inst) { /* case on opcode */
case ioOCP: /* OCP */
switch (fnc) { /* case on fnc */
case 000: case 002: case 004: /* paper adv */
lpt_svcst = lpt_svcst | LPT_SVCPA; /* set state */
lpt_svcst = lpt_svcst | LPT_SVCPA; /* set state */
lpt_svcch = fnc >> 1; /* save channel */
sim_activate (&lpt_unit, lpt_ptime);
CLR_READY (INT_LPT); /* clear int */
@@ -141,6 +144,7 @@ case ioOCP: /* OCP */
default:
return IOBADFNC (dat); }
break;
case ioSKS: /* SKS */
switch (fnc) { /* case on fnc */
case 000: /* if xfer rdy */
@@ -180,6 +184,7 @@ case ioSKS: /* SKS */
default:
return IOBADFNC (dat); }
break;
case ioOTA: /* OTA */
if (fnc) return IOBADFNC (dat); /* only fnc 0 */
if (lpt_xfer) { /* xfer ready? */

View File

@@ -28,6 +28,7 @@
tty 316/516-33 teleprinter
clk/options 316/516-12 real time clocks/internal options
25-Apr-03 RMS Revised for extended file support
01-Mar-03 RMS Added SET/SHOW CLK FREQ support
22-Dec-02 RMS Added break support
01-Nov-02 RMS Added 7b/8b support to terminal
@@ -87,7 +88,7 @@ REG ptr_reg[] = {
{ ORDATA (BUF, ptr_unit.buf, 8) },
{ FLDATA (READY, dev_ready, INT_V_PTR) },
{ FLDATA (ENABLE, dev_enable, INT_V_PTR) },
{ DRDATA (POS, ptr_unit.pos, 32), PV_LEFT },
{ DRDATA (POS, ptr_unit.pos, T_ADDR_W), PV_LEFT },
{ DRDATA (TIME, ptr_unit.wait, 24), PV_LEFT },
{ FLDATA (STOP_IOE, ptr_stopioe, 0) },
{ NULL } };
@@ -114,7 +115,7 @@ REG ptp_reg[] = {
{ FLDATA (READY, dev_ready, INT_V_PTP) },
{ FLDATA (ENABLE, dev_enable, INT_V_PTP) },
{ FLDATA (POWER, ptp_power, 0) },
{ DRDATA (POS, ptp_unit.pos, 32), PV_LEFT },
{ DRDATA (POS, ptp_unit.pos, T_ADDR_W), PV_LEFT },
{ DRDATA (TIME, ptp_unit.wait, 24), PV_LEFT },
{ DRDATA (PWRTIME, ptp_ptime, 24), PV_LEFT },
{ FLDATA (STOP_IOE, ptp_stopioe, 0) },
@@ -147,9 +148,9 @@ REG tty_reg[] = {
{ FLDATA (MODE, tty_mode, 0) },
{ FLDATA (READY, dev_ready, INT_V_TTY) },
{ FLDATA (ENABLE, dev_enable, INT_V_TTY) },
{ DRDATA (KPOS, tty_unit[TTI].pos, 32), PV_LEFT },
{ DRDATA (KPOS, tty_unit[TTI].pos, T_ADDR_W), PV_LEFT },
{ DRDATA (KTIME, tty_unit[TTI].wait, 24), REG_NZ + PV_LEFT },
{ DRDATA (TPOS, tty_unit[TTO].pos, 32), PV_LEFT },
{ DRDATA (TPOS, tty_unit[TTO].pos, T_ADDR_W), PV_LEFT },
{ DRDATA (TTIME, tty_unit[TTO].wait, 24), REG_NZ + PV_LEFT },
{ NULL } };
@@ -164,7 +165,7 @@ DEVICE tty_dev = {
2, 10, 31, 1, 8, 8,
NULL, NULL, &tty_reset,
NULL, NULL, NULL };
/* CLK data structures
clk_dev CLK device descriptor

View File

@@ -1,6 +1,6 @@
/* h316_sys.c: Honeywell 316/516 simulator interface
Copyright (c) 1999-2002, Robert M Supnik
Copyright (c) 1999-2003, 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"),