mirror of
https://github.com/simh/simh.git
synced 2026-02-04 15:44:01 +00:00
Notes For V3.7
1. New Features 1.1 3.7-0 1.1.1 SCP - Added SET THROTTLE and SET NOTHROTTLE commands to regulate simulator execution rate and host resource utilization. - Added idle support (based on work by Mark Pizzolato). - Added -e to control error processing in nested DO commands (from Dave Bryan). 1.1.2 HP2100 - Added Double Integer instructions, 1000-F CPU, and Floating Point Processor (from Dave Bryan). - Added 2114 and 2115 CPUs, 12607B and 12578A DMA controllers, and 21xx binary loader protection (from Dave Bryan). 1.1.3 Interdata - Added SET IDLE and SET NOIDLE commands to idle the simulator in wait state. 1.1.4 PDP-11 - Added SET IDLE and SET NOIDLE commands to idle the simulator in wait state (WAIT instruction executed). - Added TA11/TU60 cassette support. 1.1.5 PDP-8 - Added SET IDLE and SET NOIDLE commands to idle the simulator in wait state (keyboard poll loop or jump-to-self). - Added TA8E/TU60 cassette support. 1.1.6 PDP-1 - Added support for 16-channel sequence break system. - Added support for PDP-1D extended features and timesharing clock. - Added support for Type 630 data communications subsystem. 1.1.6 PDP-4/7/9/15 - Added SET IDLE and SET NOIDLE commands to idle the simulator in wait state (keyboard poll loop or jump-to-self). 1.1.7 VAX, VAX780 - Added SET IDLE and SET NOIDLE commands to idle the simulator in wait state (more than 200 cycles at IPL's 0, 1, or 3 in kernel mode). 1.1.8 PDP-10 - Added SET IDLE and SET NOIDLE commands to idle the simulator in wait state (operating system dependent). - Added CD20 (CD11) support. 2. Bugs Fixed Please see the revision history on http://simh.trailing-edge.com or in the source module sim_rev.h.
This commit is contained in:
committed by
Mark Pizzolato
parent
56a7d31770
commit
3cb7c60d5d
@@ -25,7 +25,9 @@
|
||||
|
||||
ct TA8E/TU60 cassette tape
|
||||
|
||||
30-May-2007 RMS Fixed typo (from Norm Lastovica)
|
||||
13-Aug-07 RMS Fixed handling of BEOT
|
||||
06-Aug-07 RMS Foward op at BOT skips initial file gap
|
||||
30-May-2007 RMS Fixed typo (from Norm Lastovica)
|
||||
|
||||
Magnetic tapes are represented as a series of variable records
|
||||
of the form:
|
||||
@@ -45,7 +47,9 @@
|
||||
rather than file marks. If the controller spaces or reads into a file
|
||||
gap and then reverses direction, the file gap is not seen again. This
|
||||
is in contrast to magnetic tapes, where the file mark is a character
|
||||
sequence and is seen again if direction is reversed.
|
||||
sequence and is seen again if direction is reversed. In addition,
|
||||
cassettes have an initial file gap which is automatically skipped on
|
||||
forward operations from beginning of tape.
|
||||
|
||||
Note that the read and write sequences for the cassette are asymmetric:
|
||||
|
||||
@@ -134,6 +138,7 @@
|
||||
|
||||
extern int32 int_req, stop_inst;
|
||||
extern UNIT cpu_unit;
|
||||
extern FILE *sim_deb;
|
||||
|
||||
uint32 ct_sra = 0; /* status reg A */
|
||||
uint32 ct_srb = 0; /* status reg B */
|
||||
@@ -221,7 +226,7 @@ DEVICE ct_dev = {
|
||||
CT_NUMDR, 10, 31, 1, 8, 8,
|
||||
NULL, NULL, &ct_reset,
|
||||
&ct_boot, &ct_attach, &ct_detach,
|
||||
&ct_dib, DEV_DISABLE | DEV_DIS
|
||||
&ct_dib, DEV_DISABLE | DEV_DIS | DEV_DEBUG
|
||||
};
|
||||
|
||||
/* IOT routines */
|
||||
@@ -254,7 +259,7 @@ switch (IR & 07) { /* decode IR<9:11> */
|
||||
case 4: /* KLSA */
|
||||
ct_sra = AC & 0377;
|
||||
ct_updsta (NULL);
|
||||
return ct_sra ^ 0377;
|
||||
return ct_sra ^ 0377;
|
||||
|
||||
case 5: /* KSAF */
|
||||
if (ct_df || (srb & (SRB_ALLERR|SRB_RDY)))
|
||||
@@ -285,6 +290,9 @@ uint32 fnc = GET_FNC (ct_sra);
|
||||
uint32 flg = ct_fnc_tab[fnc];
|
||||
uint32 old_ust = uptr->UST;
|
||||
|
||||
if (DEBUG_PRS (ct_dev)) fprintf (sim_deb,
|
||||
">>CT start: op=%o, old_sta = %o, pos=%d\n",
|
||||
fnc, uptr->UST, uptr->pos);
|
||||
if ((ct_sra & SRA_ENAB) && (uptr->flags & UNIT_ATT)) { /* enabled, att? */
|
||||
ct_srb &= ~(SRB_XFRERR|SRB_REW); /* clear err, rew */
|
||||
if (flg & OP_WRI) { /* write-type op? */
|
||||
@@ -299,12 +307,24 @@ if ((ct_sra & SRA_ENAB) && (uptr->flags & UNIT_ATT)) { /* enabled, att? */
|
||||
ct_write = 0;
|
||||
ct_db = 0;
|
||||
}
|
||||
ct_srb &= ~SRB_BEOT; /* tape in motion */
|
||||
if (fnc == SRA_REW) ct_srb |= SRB_REW; /* rew? set flag */
|
||||
if ((fnc != SRA_REW) && !(flg & OP_WRI)) { /* read cmd? */
|
||||
t_mtrlnt t;
|
||||
t_stat st;
|
||||
uptr->UST = flg & UST_REV; /* save direction */
|
||||
if (sim_tape_bot (uptr) && (flg & OP_FWD)) { /* spc/read fwd bot? */
|
||||
st = sim_tape_rdrecf (uptr, ct_xb, &t, CT_MAXFR); /* skip file gap */
|
||||
if (st != MTSE_TMK) /* not there? */
|
||||
sim_tape_rewind (uptr); /* restore tap pos */
|
||||
else old_ust = 0; /* defang next */
|
||||
}
|
||||
if ((old_ust ^ uptr->UST) == (UST_REV|UST_GAP)) { /* rev in gap? */
|
||||
t_mtrlnt t; /* skip tape mark */
|
||||
if (uptr->UST) sim_tape_rdrecr (uptr, ct_xb, &t, CT_MAXFR);
|
||||
if (DEBUG_PRS (ct_dev)) fprintf (sim_deb,
|
||||
">>CT skip gap: op=%o, old_sta = %o, pos=%d\n",
|
||||
fnc, uptr->UST, uptr->pos);
|
||||
if (uptr->UST) /* skip file gap */
|
||||
sim_tape_rdrecr (uptr, ct_xb, &t, CT_MAXFR);
|
||||
else sim_tape_rdrecf (uptr, ct_xb, &t, CT_MAXFR);
|
||||
}
|
||||
}
|
||||
@@ -362,9 +382,10 @@ if ((uptr->flags & UNIT_ATT) == 0) { /* not attached? */
|
||||
}
|
||||
if (((flgs & OP_REV) && sim_tape_bot (uptr)) || /* rev at BOT or */
|
||||
((flgs & OP_FWD) && sim_tape_eot (uptr))) { /* fwd at EOT? */
|
||||
ct_srb |= SRB_BEOT; /* error */
|
||||
ct_updsta (uptr); /* op done */
|
||||
return SCPE_OK;
|
||||
}
|
||||
}
|
||||
|
||||
r = SCPE_OK;
|
||||
switch (uptr->FNC) { /* case on function */
|
||||
@@ -429,6 +450,7 @@ switch (uptr->FNC) { /* case on function */
|
||||
|
||||
case SRA_REW: /* rewind */
|
||||
sim_tape_rewind (uptr);
|
||||
ct_srb |= SRB_BEOT; /* set BOT */
|
||||
break;
|
||||
|
||||
case SRA_SRB: /* space rev blk */
|
||||
@@ -451,6 +473,9 @@ switch (uptr->FNC) { /* case on function */
|
||||
} /* end case */
|
||||
|
||||
ct_updsta (uptr); /* update status */
|
||||
if (DEBUG_PRS (ct_dev)) fprintf (sim_deb,
|
||||
">>CT done: op=%o, statusA = %o, statusB = %o, pos=%d\n",
|
||||
uptr->FNC, ct_sra, ct_srb, uptr->pos);
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -467,13 +492,11 @@ if (uptr == NULL) { /* unit specified? */
|
||||
}
|
||||
else if (ct_srb & SRB_EOF) uptr->UST |= UST_GAP; /* save gap */
|
||||
if (uptr) { /* any unit? */
|
||||
ct_srb &= ~(SRB_WLK|SRB_BEOT|SRB_EMP|SRB_RDY); /* clear dyn flags */
|
||||
ct_srb &= ~(SRB_WLK|SRB_EMP|SRB_RDY); /* clear dyn flags */
|
||||
if ((uptr->flags & UNIT_ATT) == 0) /* unattached? */
|
||||
ct_srb = (ct_srb | SRB_EMP|SRB_WLK) & ~SRB_REW; /* empty, locked */
|
||||
if (!sim_is_active (uptr)) { /* not busy? */
|
||||
ct_srb = (ct_srb | SRB_RDY) & ~SRB_REW; /* ready, ~rew */
|
||||
if (sim_tape_bot (uptr) || sim_tape_eot (uptr)) /* update BEOT */
|
||||
ct_srb |= SRB_BEOT;
|
||||
}
|
||||
if (sim_tape_wrp (uptr) || (ct_srb & SRB_REW)) /* locked or rew? */
|
||||
ct_srb |= SRB_WLK; /* set locked */
|
||||
@@ -572,6 +595,7 @@ switch (st) {
|
||||
break;
|
||||
|
||||
case MTSE_BOT: /* reverse into BOT */
|
||||
ct_srb |= SRB_BEOT; /* set BOT */
|
||||
break;
|
||||
|
||||
case MTSE_WRP: /* write protect */
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* pdp8_defs.h: PDP-8 simulator definitions
|
||||
|
||||
Copyright (c) 1993-2006, Robert M Supnik
|
||||
Copyright (c) 1993-2007, 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 @@
|
||||
used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization from Robert M Supnik.
|
||||
|
||||
21-Aug-07 RMS Added FPP8 support
|
||||
13-Dec-06 RMS Added TA8E support
|
||||
30-Oct-06 RMS Added infinite loop stop
|
||||
13-Oct-03 RMS Added TSC8-75 support
|
||||
@@ -94,6 +95,7 @@ typedef struct {
|
||||
#define DEV_CLK 013 /* clock */
|
||||
#define DEV_TSC 036
|
||||
#define DEV_KJ8 040 /* extra terminals */
|
||||
#define DEV_FPP 055 /* floating point */
|
||||
#define DEV_DF 060 /* DF32 */
|
||||
#define DEV_RF 060 /* RF08 */
|
||||
#define DEV_RL 060 /* RL8A */
|
||||
@@ -154,7 +156,8 @@ typedef struct {
|
||||
#define INT_V_PWR (INT_V_DIRECT+8) /* power int */
|
||||
#define INT_V_UF (INT_V_DIRECT+9) /* user int */
|
||||
#define INT_V_TSC (INT_V_DIRECT+10) /* TSC8-75 int */
|
||||
#define INT_V_OVHD (INT_V_DIRECT+11) /* overhead start */
|
||||
#define INT_V_FPP (INT_V_DIRECT+11) /* FPP8 */
|
||||
#define INT_V_OVHD (INT_V_DIRECT+12) /* overhead start */
|
||||
#define INT_V_NO_ION_PENDING (INT_V_OVHD+0) /* ion pending */
|
||||
#define INT_V_NO_CIF_PENDING (INT_V_OVHD+1) /* cif pending */
|
||||
#define INT_V_ION (INT_V_OVHD+2) /* interrupts on */
|
||||
@@ -184,6 +187,7 @@ typedef struct {
|
||||
#define INT_PWR (1 << INT_V_PWR)
|
||||
#define INT_UF (1 << INT_V_UF)
|
||||
#define INT_TSC (1 << INT_V_TSC)
|
||||
#define INT_FPP (1 << INT_V_FPP)
|
||||
#define INT_NO_ION_PENDING (1 << INT_V_NO_ION_PENDING)
|
||||
#define INT_NO_CIF_PENDING (1 << INT_V_NO_CIF_PENDING)
|
||||
#define INT_ION (1 << INT_V_ION)
|
||||
|
||||
Reference in New Issue
Block a user