blob: 231935c9b3a49d73b7f0e62ff8f7e64ea759384d [file] [log] [blame] [raw]
/* 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 */