133 lines
7.1 KiB
C
133 lines
7.1 KiB
C
/* i7010_defs.h: IBM 7010 simulator definitions
|
|
|
|
Copyright (c) 2006-2016, Richard Cornwell
|
|
|
|
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
|
|
RICHARD CORNWELL 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.
|
|
|
|
*/
|
|
|
|
#include "sim_defs.h" /* simulator defns */
|
|
|
|
#include "i7000_defs.h"
|
|
|
|
/* Memory */
|
|
#define AMASK 0x1ffff
|
|
#define BBIT 0x80000000
|
|
#define MEM_ADDR_OK(x) ((uint32)((x) & AMASK) < MEMSIZE)
|
|
extern uint8 M[MAXMEMSIZE];
|
|
#define WM 0200 /* Word mark in memory */
|
|
|
|
/* Issue a command to a channel */
|
|
int chan_cmd(uint16 dev, uint16 cmd, uint32 addr);
|
|
|
|
/* Opcodes */ /* I A B */
|
|
#define OP_A CHR_A /* Aab */ /* NSI ALW BLB */
|
|
#define OP_S CHR_S /* Sab */ /* NSI ALW BLB */
|
|
#define OP_ZA CHR_QUEST /* ?ab */ /* NSI ALW BLB */
|
|
#define OP_ZS CHR_EXPL /* !ab */ /* NSI ALW BLB */
|
|
#define OP_M CHR_QUOT /* @ab */ /* NSI ALA BLB */
|
|
#define OP_D CHR_RPARN /* %ab */ /* NSI ALA 10-quotient */
|
|
#define OP_SAR CHR_G /* Gcd */ /* NSI * * C */
|
|
/* A B E F T*/ /* 061, 062, 065, 066 */
|
|
#define OP_SWM CHR_COM /* ,ab */ /* NSI A-1 B-1 */
|
|
#define OP_CWM CHR_LPARN /* sqab*/ /* NSI A-1 B-1 */
|
|
#define OP_CS CHR_SLSH /* /ib */ /* NSI/B B bbb00-1/NSIB */
|
|
#define OP_H CHR_DOT /* .i */ /* NSI/B BI NSIB */
|
|
#define OP_NOP CHR_N /* Nxxx^ */ /* NSI * * */
|
|
#define OP_MOV CHR_D /* Dabd */ /* NSI */
|
|
/* B A 8 4 2 1 */
|
|
/* 1pos r-l scan */
|
|
/* awm wm Z N */
|
|
/* bwm */
|
|
/* a|bwm */
|
|
/* a|bwm l-r */
|
|
/* arm */
|
|
/* agm|awm */
|
|
/* arm|agm|arm */
|
|
#define OP_MSZ CHR_Z /* Zab */ /* NSI ALA B+1 */
|
|
#define OP_C CHR_C /* Cab */ /* NSI ALW BLW */
|
|
#define OP_T CHR_T /* Tabd */ /* NSI ALW last addr */
|
|
/* 1 <, 2 ==, 3 <=, 4 >, 5 <>, 6 =>, 7 any, b end */
|
|
#define OP_E CHR_E /* Eab */ /* NSI ALA ? */
|
|
#define OP_B CHR_J /* Jid */ /* NSIB BI NSIB */
|
|
/* blank jump */
|
|
/* Z Arith overflow */
|
|
/* 9 Carriage 9 CH1 */
|
|
/* ! Carriage 9 CH2 */
|
|
/* R Carriage Busy CH1 */
|
|
/* L Carriage Busy CH2 */
|
|
/* @ Cariage Overflow 12 CH 1 */
|
|
/* sq Cariage Overflow 12 CH 2 */
|
|
/* S Equal */
|
|
/* U High */
|
|
/* T Low */
|
|
/* / High or Low */
|
|
/* W Divide overflow */
|
|
/* Q Inq req ch 1 */
|
|
/* * Inq req ch 2 */
|
|
/* 1 Overlap in Proc Ch 1 */
|
|
/* 2 Overlap in Proc Ch 2 */
|
|
/* 3 Overlap in Proc Ch 1 */
|
|
/* 4 Overlap in Proc Ch 2 */
|
|
/* K Tape indicator */
|
|
/* V Zero Balence */
|
|
/* Y Branch Exp over */
|
|
/* X Branch Exp under */
|
|
/* M Branch Bin Card 1 */
|
|
/* ( Branch Bin Card 2 */
|
|
#define OP_IO1 CHR_R /* Rid */ /* NSIB BI NSIB */
|
|
#define OP_IO2 CHR_X /* Xid */ /* NSIB BI NSIB */
|
|
#define OP_IO3 CHR_3 /* 3id */ /* NSIB BI NSIB */
|
|
#define OP_IO4 CHR_1 /* 1id */ /* NSIB BI NSIB */
|
|
/* B-Wrong len, A-No Trans, 8-Condition,
|
|
4-Data Check, 2-Busy, 1- not Ready */
|
|
#define OP_BCE CHR_B /* Bibd */ /* NSIB BI B-1/NSIB */
|
|
#define OP_BBE CHR_W /* Wibd */ /* NSIB BI B-1/NSIB */
|
|
#define OP_BWE CHR_V /* Vibd */ /* NSIB BI B-1/NSIB */
|
|
|
|
#define OP_RD CHR_M /* Mxbd */
|
|
#define OP_RDW CHR_L /* Lxbd */
|
|
#define OP_CC1 CHR_F /* Fd */
|
|
#define OP_CC2 CHR_2 /* 2d */
|
|
#define OP_SSF1 CHR_K /* Kd */
|
|
#define OP_SSF2 CHR_4 /* 4d */
|
|
#define OP_UC CHR_U /* Uxd */
|
|
#define OP_PRI CHR_Y /* Yd */ /* E- enter, X leave */
|
|
/* 21 - enable prot? */
|
|
/* 11 - disable prot? */
|
|
#define OP_STS CHR_DOL /* $ad */ /* S- store, R- restore */
|
|
/* E - stchan1, G stchan2 */
|
|
/* 1 - rschan1, 4 rschan4*/
|
|
/* 47 - set low? */
|
|
/* 72 - set high? */
|
|
#define OP_FP CHR_EQ /* =ad */ /* R - Floating Reset Add */
|
|
/* L - Floating store */
|
|
/* A - Floating add */
|
|
/* S - Floating sub */
|
|
/* M - Floating mul */
|
|
/* D - Floating div */
|
|
|
|
/* Flags for chan_io_status. */
|
|
#define IO_CHS_NORDY 0001 /* Unit not Ready */
|
|
#define IO_CHS_BUSY 0002 /* Unit or channel Busy */
|
|
#define IO_CHS_CHECK 0004 /* Data check */
|
|
#define IO_CHS_COND 0010 /* Condition */
|
|
#define IO_CHS_NOTR 0020 /* No transfer */
|
|
#define IO_CHS_WRL 0040 /* Wrong length */
|
|
#define IO_CHS_DONE 0100 /* Device done */
|
|
#define IO_CHS_OVER 0200 /* Channel busy on overlap processing */
|