blob: 5681536977487fb24ccf830f6eb48bd2fb840731 [file] [log] [blame] [raw]
/* i7090_defs.h: IBM 7090 simulator definitions
Copyright (c) 2005, 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"
#define PAMASK (MAXMEMSIZE - 1) /* physical addr mask */
#define MEM_ADDR_OK(x) (((uint16) (x&077777)) < MEMSIZE)
#define ReadP(x) (M[x])
#define WriteP(x,y) if (MEM_ADDR_OK (x)) M[x] = y
extern t_uint64 M[MAXMEMSIZE];
/* Processor specific masks */
#define ONEBIT 00200000000000LL
#define PMASK 00377777777777LL
#define RMASK 00000000777777LL
#define LMASK 00777777000000LL
#define AMSIGN 02000000000000LL
#define AMMASK 01777777777777LL
#define AQSIGN 01000000000000LL
#define AQMASK 00777777777777LL
#define APSIGN 00400000000000LL
#define PREMASK 00700000000000LL
#define AMASK 00000000077777LL
#define TMASK 00000000700000LL
#define DMASK 00077777000000LL
#define MSIGN 00400000000000LL
#define WMASK 00777777777777LL
#define FPCMASK 00377000000000LL
#define FPMMASK 00000777777777LL
#define FPOBIT 00001000000000LL
#define FPNBIT 00000400000000LL
#define FPMQERR 00000001000000LL /* Bit 17 */
#define FPACERR 00000002000000LL /* Bit 16 */
#define FPOVERR 00000004000000LL /* Bit 15 */
#define FPSPERR 00000010000000LL /* Bit 14 */
#define FPDPERR 00000040000000LL /* Bit 12 */
/* 7090 specific channel functions */
/* Reset the channel, clear any pending device */
void chan_rst(int chan, int type);
/* Issue a command to a channel */
int chan_cmd(uint16 dev, uint16 cmd);
/* Give channel a command, any executing command is aborted */
int chan_start(int chan, uint16 addr);
/* Give channel a new address to start working at */
int chan_load(int chan, uint16 addr);
/* return the channels current command address */
void chan_store(int chan, uint16 addr);
/* Nop for the momement */
void chan_store_diag(int chan, uint16 addr);
/* Channel data handling */
int chan_write(int chan, t_uint64 *data, int flags);
int chan_read(int chan, t_uint64 *data, int flags);
void chan_proc();
extern uint16 dev_pulse[NUM_CHAN]; /* Device pulse */
#define PUNCH_1 000001
#define PUNCH_2 000002
#define PUNCH_M 000003
#define PRINT_I 000004
#define PRINT_1 000010
#define PRINT_2 000020
#define PRINT_3 000040
#define PRINT_4 000100
#define PRINT_5 000200
#define PRINT_6 000400
#define PRINT_7 001000
#define PRINT_8 002000
#define PRINT_9 004000
#define PRINT_10 010000
#define PRINT_M 017770
/* Opcodes */
#define OP_TXI 1
#define OP_TIX 2
#define OP_TXH 3
#define OP_STR 5
#define OP_TNX 6
#define OP_TXL 7
/* Positive opcodes */
#define OP_HTR 0000
#define OP_TRA 0020
#define OP_TTR 0021
#define OP_TRCA 0022
#define OP_TRCC 0024
#define OP_TRCE 0026
#define OP_TRCG 0027
#define OP_TEFA 0030
#define OP_TEFC 0031
#define OP_TEFE 0032
#define OP_TEFG 0033
#define OP_TLQ 0040
#define OP_IIA 0041
#define OP_TIO 0042
#define OP_OAI 0043
#define OP_PAI 0044
#define OP_TIF 0046
#define OP_IIR 0051
#define OP_RFT 0054
#define OP_SIR 0055
#define OP_RNT 0056
#define OP_RIR 0057
#define OP_TCOA 0060
#define OP_TCOB 0061
#define OP_TCOC 0062
#define OP_TCOD 0063
#define OP_TCOE 0064
#define OP_TCOF 0065
#define OP_TCOG 0066
#define OP_TCOH 0067
#define OP_TSX 0074
#define OP_TZE 0100
#define OP_TIA 0101
#define OP_CVR 0114
#define OP_TPL 0120
#define OP_XCA 0131
#define OP_TOV 0140
#define OP_TQP 0162
#define OP_TQO 0161
#define OP_MPY 0200
#define OP_VLM 0204
#define OP_DVH 0220
#define OP_DVP 0221
#define OP_VDH 0224
#define OP_VDP 0225
#define OP_FDH 0240
#define OP_FDP 0241
#define OP_FMP 0260
#define OP_DFMP 0261
#define OP_FAD 0300
#define OP_DFAD 0301
#define OP_FSB 0302
#define OP_DFSB 0303
#define OP_FAM 0304
#define OP_DFAM 0305
#define OP_FSM 0306
#define OP_DFSM 0307
#define OP_ANS 0320
#define OP_ERA 0322
#define OP_CAS 0340
#define OP_ACL 0361
#define OP_HPR 0420
#define OP_OSI 0442
#define OP_ADD 0400
#define OP_ADM 0401
#define OP_SUB 0402
#define OP_IIS 0440
#define OP_LDI 0441
#define OP_DLD 0443
#define OP_OFT 0444
#define OP_RIS 0445
#define OP_ONT 0446
#define OP_LDA 0460 /* 704 only */
#define OP_CLA 0500
#define OP_CLS 0502
#define OP_ZET 0520
#define OP_XEC 0522
#define OP_LXA 0534
#define OP_LAC 0535
#define OP_RSCA 0540
#define OP_RSCC 0541
#define OP_RSCE 0542
#define OP_RSCG 0543
#define OP_STCA 0544
#define OP_STCC 0545
#define OP_STCE 0546
#define OP_STCG 0547
#define OP_LDQ 0560
#define OP_ECA 0561
#define OP_LRI 0562
#define OP_ENB 0564
#define OP_STZ 0600
#define OP_STO 0601
#define OP_SLW 0602
#define OP_STI 0604
#define OP_STA 0621
#define OP_STD 0622
#define OP_STT 0625
#define OP_STP 0630
#define OP_SXA 0634
#define OP_SCA 0636
#define OP_SCHA 0640
#define OP_SCHC 0641
#define OP_SCHE 0642
#define OP_SCHG 0643
#define OP_SCDA 0644
#define OP_SCDC 0645
#define OP_SCDE 0646
#define OP_SCDG 0647
#define OP_ELD 0670
#define OP_EAD 0671
#define OP_EDP 0672
#define OP_EMP 0673
#define OP_CPY 0700 /* 704 only */
#define OP_PAX 0734
#define OP_PAC 0737
#define OP_PXA 0754
#define OP_PCA 0756
#define OP_NOP 0761
#define OP_RDS 0762
#define OP_LLS 0763
#define OP_BSR 0764
#define OP_LRS 0765
#define OP_WRS 0766
#define OP_ALS 0767
#define OP_WEF 0770
#define OP_ARS 0771
#define OP_REW 0772
#define OP_AXT 0774
#define OP_DRS 0775
#define OP_SDN 0776
/* Negative opcodes */
#define OP_ESNT 04021
#define OP_TRCB 04022
#define OP_TRCD 04024
#define OP_TRCF 04026
#define OP_TRCH 04027
#define OP_TEFB 04030
#define OP_TEFD 04031
#define OP_TEFF 04032
#define OP_TEFH 04033
#define OP_RIA 04042
#define OP_PIA 04046
#define OP_IIL 04051
#define OP_LFT 04054
#define OP_SIL 04055
#define OP_LNT 04056
#define OP_RIL 04057
#define OP_TCNA 04060
#define OP_TCNB 04061
#define OP_TCNC 04062
#define OP_TCND 04063
#define OP_TCNE 04064
#define OP_TCNF 04065
#define OP_TCNG 04066
#define OP_TCNH 04067
#define OP_TNZ 04100
#define OP_TIB 04101
#define OP_CAQ 04114
#define OP_TMI 04120
#define OP_XCL 04130
#define OP_TNO 04140
#define OP_CRQ 04154
#define OP_DUFA 04301
#define OP_DUAM 04305
#define OP_DUFS 04303
#define OP_DUSM 04307
#define OP_DUFM 04261
#define OP_DFDH 04240
#define OP_DFDP 04241
#define OP_MPR 04200
#define OP_UFM 04260
#define OP_UFA 04300
#define OP_UFS 04302
#define OP_UAM 04304
#define OP_USM 04306
#define OP_ANA 04320
#define OP_LAS 04340
#define OP_SBM 04400
#define OP_CAL 04500
#define OP_ORA 04501
#define OP_NZT 04520
#define OP_LXD 04534
#define OP_LDC 04535
#define OP_RSCB 04540
#define OP_RSCD 04541
#define OP_RSCF 04542
#define OP_RSCH 04543
#define OP_STCB 04544
#define OP_STCD 04545
#define OP_STCF 04546
#define OP_STCH 04547
#define OP_ECQ 04561
#define OP_LPI 04564
#define OP_STQ 04600
#define OP_SRI 04601
#define OP_ORS 04602
#define OP_DST 04603
#define OP_SPI 04604
#define OP_SLQ 04620
#define OP_STL 04625
#define OP_SCD 04636
#define OP_SXD 04634
#define OP_SCHB 04640
#define OP_SCHD 04641
#define OP_SCHF 04642
#define OP_SCHH 04643
#define OP_SCDB 04644
#define OP_SCDD 04645
#define OP_SCDF 04646
#define OP_SCDH 04647
#define OP_ESB 04671
#define OP_EUA 04672
#define OP_EST 04673
#define OP_CAD 04700 /* 704 only */
#define OP_PDX 04734
#define OP_PDC 04737
#define OP_PXD 04754
#define OP_PCD 04756
#define OP_SPOP 04761
#define OP_LGL 04763
#define OP_BSF 04764
#define OP_LGR 04765
#define OP_RUN 04772
#define OP_RQL 04773
#define OP_AXC 04774
#define OP_TRS 04775
/* Positive 0760 opcodes */
#define OP_CLM 000000
#define OP_LBT 000001
#define OP_CHS 000002
#define OP_SSP 000003
#define OP_ENK 000004
#define OP_IOT 000005
#define OP_COM 000006
#define OP_ETM 000007
#define OP_RND 000010
#define OP_FRN 000011
#define OP_DCT 000012
#define OP_RCT 000014
#define OP_LMTM 000016
#define OP_RDCA 001352
#define OP_RDCB 002352
#define OP_RDCC 003352
#define OP_RDCD 004352
#define OP_RDCE 005352
#define OP_RDCF 006352
#define OP_RDCG 007352
#define OP_RDCH 010352
#define OP_RICA 001350
#define OP_RICB 002350
#define OP_RICC 003350
#define OP_RICD 004350
#define OP_RICE 005350
#define OP_RICF 006350
#define OP_RICG 007350
#define OP_RICH 010350
#define OP_SLF 000140
#define OP_SLN1 000141
#define OP_SLN2 000142
#define OP_SLN3 000143
#define OP_SLN4 000144
#define OP_SLN5 000145
#define OP_SLN6 000146
#define OP_SLN7 000147
#define OP_SLN8 000150
#define OP_SWT1 000161
#define OP_SWT2 000162
#define OP_SWT3 000163
#define OP_SWT4 000164
#define OP_SWT5 000165
#define OP_SWT6 000166
#define OP_BTTA 001000
#define OP_BTTB 002000
#define OP_BTTC 003000
#define OP_BTTD 004000
#define OP_BTTE 005000
#define OP_BTTF 006000
#define OP_BTTG 007000
#define OP_BTTH 010000
#define OP_PSE 0
/* Negative 0760 opcodes */
#define OP_ETTA 001000
#define OP_ETTB 002000
#define OP_ETTC 003000
#define OP_ETTD 004000
#define OP_ETTE 005000
#define OP_ETTF 006000
#define OP_ETTG 007000
#define OP_ETTH 010000
#define OP_PBT 000001
#define OP_EFTM 000002
#define OP_SSM 000003
#define OP_LFTM 000004
#define OP_ESTM 000005
#define OP_ECTM 000006
#define OP_LTM 000007
#define OP_LSNM 000010
#define OP_ETT 000011
#define OP_RTT 000012
#define OP_EMTM 000016
#define OP_SLT1 000141
#define OP_SLT2 000142
#define OP_SLT3 000143
#define OP_SLT4 000144
#define OP_SLT5 000145
#define OP_SLT6 000146
#define OP_SLT7 000147
#define OP_SLT8 000150
#define OP_SWT7 000161
#define OP_SWT8 000162
#define OP_SWT9 000163
#define OP_SWT10 000164
#define OP_SWT11 000165
#define OP_SWT12 000166
#define OP_MSE 0
/* Special Ops -0761 */
#define OP_SEA 000041
#define OP_SEB 000042
#define OP_IFT 000043
#define OP_EFT 000044
#define OP_ESM 000140
#define OP_TSM 000141