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.
135 lines
4.2 KiB
C
135 lines
4.2 KiB
C
/* vax_sys.c: VAX simulator interface
|
|
|
|
Copyright (c) 1998-2006, 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"),
|
|
to deal in the Software without restriction, including without limitation
|
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
and/or sell copies of the Software, and to permit persons to whom the
|
|
Software is furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
ROBERT M SUPNIK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
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.
|
|
|
|
17-Oct-06 RMS Re-ordered device list
|
|
17-May-06 RMS Added CR11/CD11 support (from John Dundas)
|
|
01-Oct-2004 RMS Cloned from vax_sys.c
|
|
*/
|
|
|
|
#include "vax_defs.h"
|
|
|
|
char sim_name[] = "VAX";
|
|
|
|
extern DEVICE cpu_dev;
|
|
extern DEVICE tlb_dev;
|
|
extern DEVICE rom_dev;
|
|
extern DEVICE nvr_dev;
|
|
extern DEVICE sysd_dev;
|
|
extern DEVICE qba_dev;
|
|
extern DEVICE tti_dev, tto_dev;
|
|
extern DEVICE cr_dev;
|
|
extern DEVICE lpt_dev;
|
|
extern DEVICE clk_dev;
|
|
extern DEVICE rq_dev, rqb_dev, rqc_dev, rqd_dev;
|
|
extern DEVICE rl_dev;
|
|
extern DEVICE ry_dev;
|
|
extern DEVICE ts_dev;
|
|
extern DEVICE tq_dev;
|
|
extern DEVICE dz_dev;
|
|
extern DEVICE csi_dev, cso_dev;
|
|
extern DEVICE xq_dev, xqb_dev;
|
|
extern DEVICE vh_dev;
|
|
|
|
extern int32 sim_switches;
|
|
extern void WriteB (uint32 pa, int32 val);
|
|
extern void rom_wr_B (int32 pa, int32 val);
|
|
extern UNIT cpu_unit;
|
|
|
|
DEVICE *sim_devices[] = {
|
|
&cpu_dev,
|
|
&tlb_dev,
|
|
&rom_dev,
|
|
&nvr_dev,
|
|
&sysd_dev,
|
|
&qba_dev,
|
|
&clk_dev,
|
|
&tti_dev,
|
|
&tto_dev,
|
|
&csi_dev,
|
|
&cso_dev,
|
|
&dz_dev,
|
|
&vh_dev,
|
|
&cr_dev,
|
|
&lpt_dev,
|
|
&rl_dev,
|
|
&rq_dev,
|
|
&rqb_dev,
|
|
&rqc_dev,
|
|
&rqd_dev,
|
|
&ry_dev,
|
|
&ts_dev,
|
|
&tq_dev,
|
|
&xq_dev,
|
|
&xqb_dev,
|
|
NULL
|
|
};
|
|
|
|
/* Binary loader
|
|
|
|
The binary loader handles absolute system images, that is, system
|
|
images linked /SYSTEM. These are simply a byte stream, with no
|
|
origin or relocation information.
|
|
|
|
-r load ROM
|
|
-n load NVR
|
|
-o for memory, specify origin
|
|
*/
|
|
|
|
t_stat sim_load (FILE *fileref, char *cptr, char *fnam, int flag)
|
|
{
|
|
t_stat r;
|
|
int32 i;
|
|
uint32 origin, limit;
|
|
extern int32 ssc_cnf;
|
|
#define SSCCNF_BLO 0x80000000
|
|
|
|
if (flag) return SCPE_ARG; /* dump? */
|
|
if (sim_switches & SWMASK ('R')) { /* ROM? */
|
|
origin = ROMBASE;
|
|
limit = ROMBASE + ROMSIZE;
|
|
}
|
|
else if (sim_switches & SWMASK ('N')) { /* NVR? */
|
|
origin = NVRBASE;
|
|
limit = NVRBASE + NVRSIZE;
|
|
ssc_cnf = ssc_cnf & ~SSCCNF_BLO;
|
|
}
|
|
else {
|
|
origin = 0; /* memory */
|
|
limit = (uint32) cpu_unit.capac;
|
|
if (sim_switches & SWMASK ('O')) { /* origin? */
|
|
origin = (int32) get_uint (cptr, 16, 0xFFFFFFFF, &r);
|
|
if (r != SCPE_OK) return SCPE_ARG;
|
|
}
|
|
}
|
|
while ((i = getc (fileref)) != EOF) { /* read byte stream */
|
|
if (origin >= limit) return SCPE_NXM; /* NXM? */
|
|
if (sim_switches & SWMASK ('R')) /* ROM? */
|
|
rom_wr_B (origin, i); /* not writeable */
|
|
else WriteB (origin, i); /* store byte */
|
|
origin = origin + 1;
|
|
}
|
|
return SCPE_OK;
|
|
}
|
|
|