146 lines
5.4 KiB
C
146 lines
5.4 KiB
C
/* pdp11_dmc.h: DMC11 Emulation
|
|
------------------------------------------------------------------------------
|
|
|
|
Copyright (c) 2011, Robert M. A. Jarratt
|
|
|
|
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
|
|
THE AUTHOR 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 the author shall not be
|
|
used in advertising or otherwise to promote the sale, use or other dealings
|
|
in this Software without prior written authorization from the author.
|
|
|
|
------------------------------------------------------------------------------
|
|
|
|
Modification history:
|
|
|
|
15-Jan-13 RJ Contribution from Paul Koning of support for RSTS using the ROM
|
|
INPUT (ROM I) command to get the DMC11 to report DSR status.
|
|
------------------------------------------------------------------------------*/
|
|
|
|
// Notes
|
|
// Base address needs to be 760060 according to DMC11 manual, but SYSGEN seems to think CSR is 0760100. However if I use
|
|
// 0760100 I get a conflict with the DZ because the first 13 bits are still 00100. If I use 760060 VMS sees the XM device, but
|
|
// if I remove the DZ to prevent the conflict VMS does not see an XM device, but I do get lots of reads and writes, possibly
|
|
// because it thinks it is a different device. What worries me more though is that there seems to be overlap in the 13-bit base
|
|
// addresses of the DZ and DMC.
|
|
|
|
|
|
#ifndef PDP11_DMC_H
|
|
#define PDP11_DMC_H
|
|
|
|
#if defined (VM_VAX) /* VAX version */
|
|
#include "vax_defs.h"
|
|
extern int32 int_req[IPL_HLVL];
|
|
#elif defined(VM_PDP10)
|
|
#include "pdp10_defs.h"
|
|
//#define IPL_HLVL 8 /* # int levels */
|
|
extern int32 int_req;
|
|
#else /* PDP-11 version */
|
|
#include "pdp11_defs.h"
|
|
extern int32 int_req[IPL_HLVL];
|
|
#endif
|
|
|
|
#include "sim_sock.h"
|
|
|
|
#define DMC_NUMDEVICE 4 /* # DMC-11 devices */
|
|
#define DMC_UNITSPERDEVICE 1 /* # units per DMC-11 */
|
|
|
|
#define DMP_NUMDEVICE 1 /* # DMP-11 devices */
|
|
#define DMP_UNITSPERDEVICE 1 /* # units per DMP-11 */
|
|
|
|
#define DMC_RDX 8
|
|
|
|
/* debugging bitmaps */
|
|
#define DBG_TRC 0x0001 /* trace routine calls */
|
|
#define DBG_REG 0x0002 /* trace read/write registers */
|
|
#define DBG_WRN 0x0004 /* display warnings */
|
|
#define DBG_INF 0x0008 /* display informational messages (high level trace) */
|
|
#define DBG_DAT 0x0010 /* display data buffer contents */
|
|
#define DBG_DTS 0x0020 /* display data summary */
|
|
#define DBG_SOK 0x0040 /* display socket open/close */
|
|
#define DBG_CON 0x0080 /* display socket connection establishment */
|
|
|
|
#define TYPE_BACCI 0
|
|
#define TYPE_CNTLI 1
|
|
#define TYPE_BASEI 03
|
|
#define TYPE_BACCO 0
|
|
#define TYPE_CNTLO 1
|
|
|
|
#define TYPE_DMP_MODE 2
|
|
#define TYPE_DMP_CONTROL 1
|
|
#define TYPE_DMP_RECEIVE 0
|
|
#define TYPE_DMP_TRANSMIT 4
|
|
|
|
|
|
/* SEL0 */
|
|
#define DMC_TYPE_INPUT_MASK 0x0003
|
|
#define DMC_IN_IO_MASK 0x0004
|
|
#define DMP_IEO_MASK 0x0010
|
|
#define DMC_RQI_MASK 0x0020
|
|
#define DMP_RQI_MASK 0x0080
|
|
#define DMC_RDYI_MASK 0x0080
|
|
#define DMC_IEI_MASK 0x0040
|
|
#define DMP_IEI_MASK 0x0001
|
|
#define ROMI_MASK 0x0200
|
|
#define LU_LOOP_MASK 0x0800
|
|
#define MASTER_CLEAR_MASK 0x4000
|
|
#define RUN_MASK 0x8000
|
|
|
|
/* SEL2 */
|
|
#define DMP_IN_IO_MASK 0x0004
|
|
#define DMP_TYPE_INPUT_MASK 0x0007
|
|
#define TYPE_OUTPUT_MASK 0x0003
|
|
#define OUT_IO_MASK 0x0004
|
|
#define DMC_RDYO_MASK 0x0080
|
|
#define DMC_IEO_MASK 0x0040
|
|
#define DMP_RDYI_MASK 0x0010
|
|
|
|
/* BSEL6 */
|
|
#define LOST_DATA_MASK 0x0010
|
|
#define DISCONNECT_MASK 0x0040
|
|
|
|
#define DSPDSR 0x22b3 /* KMC opcode to move line unit status to SEL2 */
|
|
|
|
#define SEL0_RUN_BIT 15
|
|
#define SEL0_MCLR_BIT 14
|
|
#define SEL0_LU_LOOP_BIT 11
|
|
#define SEL0_ROMI_BIT 9
|
|
#define SEL0_RDI_BIT 7
|
|
#define SEL0_DMC_IEI_BIT 6
|
|
#define SEL0_DMP_IEI_BIT 0
|
|
#define SEL0_DMP_IEO_BIT 4
|
|
#define SEL0_DMC_RQI_BIT 5
|
|
#define SEL0_DMP_RQI_BIT 7
|
|
#define SEL0_IN_IO_BIT 2
|
|
#define SEL0_TYPEI_BIT 0
|
|
|
|
#define SEL2_TYPEO_BIT 0
|
|
#define SEL2_RDO_BIT 7
|
|
#define SEL2_IEO_BIT 6
|
|
#define SEL2_OUT_IO_BIT 2
|
|
#define SEL2_LINE_BIT 8
|
|
#define SEL2_LINE_BIT_LENGTH 6
|
|
#define SEL2_PRIO_BIT 14
|
|
#define SEL2_PRIO_BIT_LENGTH 2
|
|
|
|
#define SEL6_LOST_DATA_BIT 4
|
|
#define SEL6_DISCONNECT_BIT 6
|
|
|
|
#define BUFFER_QUEUE_SIZE 7
|
|
|
|
#endif /* _VAX_DMC_H */
|