mirror of
https://github.com/simh/simh.git
synced 2026-01-25 19:56:25 +00:00
Notes For V3.0-1
RESTRICTION: The FP15 and XVM features of the PDP-15 are only partially debugged. Do NOT enable these features for normal operations. 1. New Features in 3.0-1 1.1 PDP-1 - Added block loader format support to LOAD. - Changed BOOT PTR to allow loading of all of the first bank of memory. 1.2 PDP-18b Family - Added PDP-4 EAE support. - Added PDP-15 FP15 support. - Added PDP-15 XVM support. - Added PDP-15 "re-entrancy ECO". - Added PDP-7, PDP-9, PDP-15 hardware RIM loader support in BOOT PTR. 2. Bugs Fixed in 3.0-1 2.1 PDP-11/VAX - Fixed bug in user disk size (found by Chaskiel M Grundman). 2.2 PDP-1 - Updated CPU, line printer, standard devices to detect indefinite I/O wait. - Fixed incorrect logical, missing activate, break in drum simulator. - Fixed bugs in instruction decoding, overprinting for line printer. 2.3 PDP-10 - Fixed bug in RP read header. 2.4 PDP-18b Family - Fixed bug in PDP-4 line printer overprinting. - Fixed bug in PDP-15 memory protect/skip interaction. - Fixed bug in RF set size routine. - Increased PTP TIME for PDP-15 operating systems. 2.5 PDP-8 - Fixed bug in DF, RF set size routine. 2.6 Nova - Fixed bug in DSK set size routine. 2.7 1401 - Revised fetch to model hardware more closely. 2.8 Ibm1130 - Fixed bugs found by APL 1130. 2.9 Altairz80 - Fixed bug in real-time clock on Windows host. 2.10 HP2100 -- Fixed DR drum sizes. -- Fixed DR variable capacity interaction with SAVE/RESTORE. 3. New Features in 3.0 vs prior releases 3.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 3.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. 3.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). 4. Bugs Fixed in 3.0 vs prior releases 4.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). 4.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. 4.3 Nova - Fixed DSK variable size interaction with restore. 4.4 PDP-1 - Fixed DT variable size interaction with restore. 4.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. 4.6 PDP-18B - Fixed DT, RF variable size interaction with restore. - Fixed MT bug in MTTR. 4.7 PDP-8 - Fixed DT, DF, RF, RX variable size interaction with restore. - Fixed MT bug in SKTR. 4.8 HP2100 - Fixed bug in DP (13210A controller only), DQ read status. - Fixed bug in DP, DQ seek complete. 4.9 GRI - Fixed bug in SC queue pointer management.
This commit is contained in:
committed by
Mark Pizzolato
parent
4ffd3be790
commit
f9564b81b9
@@ -1,14 +1,14 @@
|
||||
To: Users
|
||||
From: Bob Supnik
|
||||
Subj: HP2100 Simulator Usage
|
||||
Date: 15-Nov-2002
|
||||
Date: 15-Jul-2003
|
||||
|
||||
COPYRIGHT NOTICE
|
||||
|
||||
The following copyright notice applies to both the SIMH source and binary:
|
||||
|
||||
Original code published in 1993-2002, written by Robert M Supnik
|
||||
Copyright (c) 1993-2002, Robert M Supnik
|
||||
Copyright (c) 1993-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"),
|
||||
@@ -39,10 +39,12 @@ This memorandum documents the HP 2100 simulator.
|
||||
sim/ sim_defs.h
|
||||
sim_rev.h
|
||||
sim_sock.h
|
||||
sim_tape.h
|
||||
sim_tmxr.h
|
||||
scp.c
|
||||
scp_tty.c
|
||||
sim_sock.c
|
||||
sim_tape.c
|
||||
sim_tmxr.c
|
||||
|
||||
sim/hp2100/ hp2100_defs.h
|
||||
@@ -563,7 +565,6 @@ Both IPLI and IPLO implement these registers:
|
||||
TIME 24 polling interval for input
|
||||
STOP_IOE 1 stop on I/O error
|
||||
|
||||
|
||||
2.5 12557A Disk Controller (DPC, DPD) with 2781 Drives
|
||||
13210A Disk Controller (DPC, DPD) with 7900 Drives
|
||||
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
The drum control channel does not have any of the traditional flip-flops.
|
||||
|
||||
27-Jul-03 RMS Fixed drum sizes
|
||||
Fixed variable capacity interaction with SAVE/RESTORE
|
||||
10-Nov-02 RMS Added BOOT command
|
||||
*/
|
||||
|
||||
@@ -48,8 +50,21 @@
|
||||
#define DR_DNUMSC 32 /* drum sec/track */
|
||||
#define DR_NUMSC ((drc_unit.flags & UNIT_DR)? DR_DNUMSC: DR_FNUMSC)
|
||||
#define DR_SIZE (512 * DR_DNUMSC * DR_NUMWD) /* initial size */
|
||||
#define UNIT_V_DR (UNIT_V_UF) /* disk vs drum */
|
||||
#define UNIT_DR (1 << UNIT_V_DR)
|
||||
#define UNIT_V_SZ (UNIT_V_UF) /* disk vs drum */
|
||||
#define UNIT_M_SZ 017 /* size */
|
||||
#define UNIT_SZ (UNIT_M_SZ << UNIT_V_SZ)
|
||||
#define UNIT_DR (1 << UNIT_V_SZ) /* low order bit */
|
||||
#define SZ_180K 000 /* disks */
|
||||
#define SZ_360K 002
|
||||
#define SZ_720K 004
|
||||
#define SZ_1024K 001 /* drums: default size */
|
||||
#define SZ_1536K 003
|
||||
#define SZ_384K 005
|
||||
#define SZ_512K 007
|
||||
#define SZ_640K 011
|
||||
#define SZ_768K 013
|
||||
#define SZ_896K 015
|
||||
#define DR_GETSZ(x) (((x) >> UNIT_V_SZ) & UNIT_M_SZ)
|
||||
|
||||
/* Command word */
|
||||
|
||||
@@ -105,11 +120,16 @@ int32 drd_ptr = 0; /* sector pointer */
|
||||
int32 dr_stopioe = 1; /* stop on error */
|
||||
int32 dr_time = 10; /* time per word */
|
||||
|
||||
static int32 sz_tab[16] = {
|
||||
184320, 1048576, 368640, 1572864, 737280, 393216, 0, 524288,
|
||||
0, 655360, 0, 786432, 0, 917504, 0, 0 };
|
||||
|
||||
DEVICE drd_dev, drc_dev;
|
||||
int32 drdio (int32 inst, int32 IR, int32 dat);
|
||||
int32 drcio (int32 inst, int32 IR, int32 dat);
|
||||
t_stat drc_svc (UNIT *uptr);
|
||||
t_stat drc_reset (DEVICE *dptr);
|
||||
t_stat drc_attach (UNIT *uptr, char *cptr);
|
||||
t_stat drc_boot (int32 unitno, DEVICE *dptr);
|
||||
int32 dr_incda (int32 trk, int32 sec, int32 ptr);
|
||||
t_stat dr_set_size (UNIT *uptr, int32 val, char *cptr, void *desc);
|
||||
@@ -175,21 +195,22 @@ REG drc_reg[] = {
|
||||
{ DRDATA (TIME, dr_time, 24), REG_NZ + PV_LEFT },
|
||||
{ FLDATA (STOP_IOE, dr_stopioe, 0) },
|
||||
{ ORDATA (DEVNO, drc_dib.devno, 6), REG_HRO },
|
||||
{ DRDATA (CAPAC, drc_unit.capac, 24), REG_HRO },
|
||||
{ NULL } };
|
||||
|
||||
MTAB drc_mod[] = {
|
||||
{ UNIT_DR, 0, "disk", NULL, NULL },
|
||||
{ UNIT_DR, UNIT_DR, "drum", NULL, NULL },
|
||||
{ UNIT_DR, 184320, NULL, "180K", &dr_set_size },
|
||||
{ UNIT_DR, 368640, NULL, "360K", &dr_set_size },
|
||||
{ UNIT_DR, 737280, NULL, "720K", &dr_set_size },
|
||||
{ UNIT_DR, 368640+1, NULL, "384K", &dr_set_size },
|
||||
{ UNIT_DR, 524280+1, NULL, "512K", &dr_set_size },
|
||||
{ UNIT_DR, 655360+1, NULL, "640K", &dr_set_size },
|
||||
{ UNIT_DR, 786432+1, NULL, "768K", &dr_set_size },
|
||||
{ UNIT_DR, 917504+1, NULL, "896K", &dr_set_size },
|
||||
{ UNIT_DR, 1048576+1, NULL, "1024K", &dr_set_size },
|
||||
{ UNIT_DR, 1572864+1, NULL, "1536K", &dr_set_size },
|
||||
{ UNIT_SZ, (SZ_180K << UNIT_V_SZ), NULL, "180K", &dr_set_size },
|
||||
{ UNIT_SZ, (SZ_360K << UNIT_V_SZ), NULL, "360K", &dr_set_size },
|
||||
{ UNIT_SZ, (SZ_720K << UNIT_V_SZ), NULL, "720K", &dr_set_size },
|
||||
{ UNIT_SZ, (SZ_384K << UNIT_V_SZ), NULL, "384K", &dr_set_size },
|
||||
{ UNIT_SZ, (SZ_512K << UNIT_V_SZ), NULL, "512K", &dr_set_size },
|
||||
{ UNIT_SZ, (SZ_640K << UNIT_V_SZ), NULL, "640K", &dr_set_size },
|
||||
{ UNIT_SZ, (SZ_768K << UNIT_V_SZ), NULL, "768K", &dr_set_size },
|
||||
{ UNIT_SZ, (SZ_896K << UNIT_V_SZ), NULL, "896K", &dr_set_size },
|
||||
{ UNIT_SZ, (SZ_1024K << UNIT_V_SZ), NULL, "1024K", &dr_set_size },
|
||||
{ UNIT_SZ, (SZ_1536K << UNIT_V_SZ), NULL, "1536K", &dr_set_size },
|
||||
{ MTAB_XTD | MTAB_VDV, 1, "DEVNO", "DEVNO",
|
||||
&hp_setdev, &hp_showdev, &drd_dev },
|
||||
{ 0 } };
|
||||
@@ -198,7 +219,7 @@ DEVICE drc_dev = {
|
||||
"DRC", &drc_unit, drc_reg, drc_mod,
|
||||
1, 8, 21, 1, 8, 16,
|
||||
NULL, NULL, &drc_reset,
|
||||
&drc_boot, NULL, NULL,
|
||||
&drc_boot, &drc_attach, NULL,
|
||||
&drc_dib, DEV_DISABLE };
|
||||
|
||||
/* IOT routines */
|
||||
@@ -336,14 +357,26 @@ sim_cancel (&drc_unit);
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
/* Attach routine */
|
||||
|
||||
t_stat drc_attach (UNIT *uptr, char *cptr)
|
||||
{
|
||||
int32 sz = sz_tab[DR_GETSZ (uptr->flags)];
|
||||
|
||||
if (sz == 0) return SCPE_IERR;
|
||||
uptr->capac = sz;
|
||||
return attach_unit (uptr, cptr);
|
||||
}
|
||||
/* Set size routine */
|
||||
|
||||
t_stat dr_set_size (UNIT *uptr, int32 val, char *cptr, void *desc)
|
||||
{
|
||||
int32 sz;
|
||||
|
||||
if (val < 0) return SCPE_IERR;
|
||||
if ((sz = sz_tab[DR_GETSZ (val)]) == 0) return SCPE_IERR;
|
||||
if (uptr->flags & UNIT_ATT) return SCPE_ALATT;
|
||||
if (val & 1) uptr->flags = uptr->flags | UNIT_DR;
|
||||
else uptr->flags = uptr->flags & ~UNIT_DR;
|
||||
uptr->capac = val & ~1;
|
||||
uptr->capac = sz;
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* hp2100_fp.c: HP 2100 floating point instructions
|
||||
|
||||
Copyright (c) 2003, Robert M. Supnik
|
||||
Copyright (c) 2002-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"),
|
||||
@@ -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.
|
||||
|
||||
15-Jul-03 RMS Fixed signed/unsigned warning
|
||||
21-Oct-02 RMS Recoded for compatibility with 21MX microcode algorithms
|
||||
|
||||
The HP2100 uses a unique binary floating point format:
|
||||
@@ -153,7 +154,7 @@ UnpackFP (&fop1, FPAB); /* unpack A-B */
|
||||
UnpackFP (&fop2, opnd); /* get op */
|
||||
if (sub) { /* subtract? */
|
||||
fop2.fr = FR_NEG (fop2.fr); /* negate frac */
|
||||
if (fop2.fr == FP_SIGN) { /* -1/2? */
|
||||
if (fop2.fr == ((uint32) FP_SIGN)) { /* -1/2? */
|
||||
fop2.fr = fop2.fr >> 1; /* special case */
|
||||
fop2.exp = fop2.exp + 1; } }
|
||||
if (fop1.fr == 0) fop1 = fop2; /* op1 = 0? res = op2 */
|
||||
|
||||
Reference in New Issue
Block a user