/* i7000_defs.h: IBM 70xx simulator definitions | |
Copyright (c) 2005-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. | |
Generic channel interface for all processors in IBM 700 and 7000 line. | |
*/ | |
#ifndef _I7000_H_ | |
#define _I7000_H_ | |
#include "sim_defs.h" /* simulator defns */ | |
/* Definitions for each supported CPU */ | |
#ifdef I701 | |
#define NUM_CHAN 1 | |
#define NUM_DEVS_CDR 1 | |
#define NUM_DEVS_CDP 1 | |
#define NUM_DEVS_LPR 1 | |
#define NUM_DEVS_DR 1 | |
#define NUM_DEVS_MT 0 | |
#define MT_CHANNEL_ZERO | |
#define NUM_UNITS_MT 5 | |
#define NUM_UNITS_DR 16 | |
#define MAXMEMSIZE 2048 | |
#define CHARSPERWORD 6 | |
extern t_uint64 M[]; | |
#endif | |
#ifdef I7010 /* Includes 1410 and 7010 */ | |
#define NUM_CHAN 5 | |
#define NUM_DEVS_CDR 1 | |
#define NUM_DEVS_CDP 1 | |
#define STACK_DEV 1 | |
#define NUM_DEVS_LPR 1 | |
#define NUM_DEVS_CON 1 | |
#define NUM_DEVS_DSK 5 | |
#define NUM_DEVS_COM 1 | |
#define NUM_DEVS_MT 3 | |
#define CHAN_CHUREC 1 | |
#define NUM_UNITS_MT 10 /* A, B */ | |
#define MAXMEMSIZE (100000) | |
#define CHARSPERWORD 1 | |
extern uint8 M[]; | |
#endif | |
#ifdef I7030 | |
/* Not yet */ | |
#endif | |
#ifdef I7070 /* Includes 7070, 7074 */ | |
#define NUM_CHAN 9 | |
#define NUM_DEVS_CDR 1 | |
#define NUM_DEVS_CDP 1 | |
#define NUM_DEVS_LPR 1 | |
#define NUM_DEVS_CON 1 | |
#define NUM_DEVS_MT 3 | |
#define NUM_DEVS_DSK 10 | |
#define NUM_DEVS_HT 0 | |
#define NUM_DEVS_COM 1 | |
#define NUM_UNITS_HT 10 | |
#define NUM_UNITS_MT 10 /* A, B */ | |
#define NUM_DEVS_CHRON 1 | |
#define MAXMEMSIZE (30000) | |
#define CHARSPERWORD 5 | |
extern t_uint64 M[]; | |
#endif | |
#ifdef I7080 /* Includes 702, 705-i/ii, 705-iii, 7080 */ | |
#define NUM_CHAN 11 | |
#define NUM_DEVS_CDR 1 | |
#define NUM_DEVS_CDP 1 | |
#define NUM_DEVS_LPR 1 | |
#define NUM_DEVS_CON 1 | |
#define NUM_DEVS_MT 4 | |
#define NUM_DEVS_CHRON 1 | |
#define NUM_DEVS_DR 1 | |
#define NUM_DEVS_DSK 5 | |
#define NUM_DEVS_HT 0 | |
#define NUM_DEVS_COM 1 | |
#define NUM_UNITS_MT 10 | |
#define MT_CHANNEL_ZERO | |
#define NUM_UNITS_HT 10 | |
#define MAXMEMSIZE (160000) | |
#define CHARSPERWORD 1 | |
extern uint8 M[]; | |
#endif | |
#ifdef I704 /* Special build for 704 only */ | |
#define NUM_CHAN 1 | |
#define NUM_DEVS_CDR 1 | |
#define NUM_DEVS_CDP 1 | |
#define NUM_DEVS_LPR 1 | |
#define NUM_DEVS_DR 1 | |
#define NUM_DEVS_MT 0 | |
#define NUM_UNITS_MT 10 | |
#define MT_CHANNEL_ZERO | |
#define NUM_UNITS_DR 16 | |
#define MAXMEMSIZE (32*1024) | |
#define CHARSPERWORD 6 | |
extern t_uint64 M[]; | |
#endif | |
#ifdef I7040 /* Includes 7040, 7044 */ | |
/* Not yet */ | |
#define NUM_CHAN 8 | |
#define NUM_DEVS_CDP 2 | |
#define NUM_DEVS_CDR 2 | |
#define NUM_DEVS_LPR 2 | |
#define NUM_DEVS_MT 4 | |
#define NUM_DEVS_CHRON 1 | |
#define NUM_DEVS_DSK 10 | |
#define NUM_DEVS_COM 1 | |
#define NUM_DEVS_HD 1 | |
#define NUM_DEVS_HT 0 | |
#define MT_CHANNEL_ZERO | |
#define NUM_UNITS_HT 10 | |
#define NUM_UNITS_MT 10 /* A, B */ | |
#define NUM_UNITS_HD 8 | |
#define MAXMEMSIZE (32*1024) | |
#define CHARSPERWORD 6 | |
extern t_uint64 M[]; | |
#endif | |
#ifdef I7090 /* Includes 704, 709, 7090, 7094 */ | |
#define NUM_CHAN 9 | |
#define NUM_DEVS_CDP 4 | |
#define NUM_DEVS_CDR 4 | |
#define NUM_DEVS_LPR 4 | |
#define NUM_DEVS_MT 3 | |
#define NUM_DEVS_CHRON 1 | |
#define NUM_DEVS_DR 1 | |
#define NUM_DEVS_DSK 10 | |
#define NUM_DEVS_COM 1 | |
#define NUM_DEVS_HD 1 | |
#define NUM_DEVS_HT 0 | |
#define MT_CHANNEL_ZERO | |
#define NUM_UNITS_HT 10 | |
#define NUM_UNITS_MT 10 /* A, B */ | |
#define NUM_UNITS_DR 16 | |
#define NUM_UNITS_HD 8 | |
#define MAXMEMSIZE (64*1024) | |
#define CHARSPERWORD 6 | |
/*#define EXTRA_SL */ /* Remove comments to allow 4 extra sense lights */ | |
/*#define EXTRA_SW */ /* Remove comments to allow 6 extra switchs */ | |
extern t_uint64 M[]; | |
#endif | |
/* Simulation stop codes. */ | |
#define STOP_IONRDY 1 /* I/O dev not ready */ | |
#define STOP_HALT 2 /* HALT */ | |
#define STOP_IBKPT 3 /* breakpoint */ | |
#define STOP_UUO 4 /* invalid opcode */ | |
#define STOP_INDLIM 5 /* indirect limit */ | |
#define STOP_XECLIM 6 /* XEC limit */ | |
#define STOP_IOCHECK 7 /* IOCHECK */ | |
#define STOP_MMTRP 8 /* mm in trap */ | |
#define STOP_INVLIN 9 /* 7750 invalid line number */ | |
#define STOP_INVMSG 10 /* 7750 invalid message */ | |
#define STOP_NOOFREE 11 /* 7750 No free output buffers */ | |
#define STOP_NOIFREE 12 /* 7750 No free input buffers */ | |
#define STOP_FIELD 13 /* Field overflow */ | |
#define STOP_ACOFL 13 /* AC Overflow - 7080 */ | |
#define STOP_SIGN 14 /* Sign change */ | |
#define STOP_DIV 15 /* Divide error */ | |
#define STOP_INDEX 16 /* 7070 Alpha index */ | |
#define STOP_NOWM 17 /* Stop if no word mark found */ | |
#define STOP_INVADDR 18 /* Stop on invalid address */ | |
#define STOP_INVLEN 19 /* Invalid length instruction */ | |
#define STOP_RECCHK 19 /* Record check - 7080 */ | |
#define STOP_PROG 20 /* Program fault */ | |
#define STOP_PROT 21 /* Protection fault */ | |
/* Memory */ | |
#define MEMSIZE (cpu_unit.capac) /* actual memory size */ | |
#define MEMMASK (MEMSIZE - 1) /* Memory bits */ | |
/* Globally visible flags */ | |
#define CHAN_PIO (0) /* Polled mode I/O */ | |
#define CHAN_UREC (1) /* Unit record devices */ | |
#define CHAN_7010 (1) /* Channel type for 7010 */ | |
#define CHAN_7604 (2) /* 7070 tape controller */ | |
#define CHAN_7607 (2) /* Generic 7090 channel */ | |
#define CHAN_7621 (2) /* 7080 tape controller */ | |
#define CHAN_7904 (3) /* 7040 generic channel */ | |
#define CHAN_7907 (3) /* Disk/Hyper/7750 channel for 7070 */ | |
#define CHAN_7908 (3) /* Disk/Hyper/7750 channel for 7080 */ | |
#define CHAN_7909 (3) /* Disk/Hyper/7750 channel for 7090 */ | |
#define CHAN_7289 (4) /* Special CTSS device for 7090 */ | |
#define CHAN_754 (4) /* 705 tape controller */ | |
#define CH_TYP_PIO 01 /* Can be on PIO channel */ | |
#define CH_TYP_UREC 02 /* Can be on Unit record channel */ | |
#define CH_TYP_76XX 04 /* Can be on 76xx Channel */ | |
#define CH_TYP_79XX 010 /* Can be on a 79xx channel */ | |
#define CH_TYP_SPEC 020 /* Special channel */ | |
#define CH_TYP_754 020 /* 705 tape controller */ | |
/* Device information block */ | |
struct dib { | |
uint8 ctype; /* Type of channel */ | |
uint8 upc; /* Units per channel */ | |
uint16 addr; /* Unit address */ | |
uint16 mask; /* Channel mask type */ | |
uint32 (*cmd)(UNIT *up, uint16 cmd, uint16 dev);/* Issue command. */ | |
void (*ini)(UNIT *up, t_bool f); | |
}; | |
typedef struct dib DIB; | |
/* Debuging controls */ | |
#define DEBUG_CHAN 0x0000001 /* Show channel fetchs */ | |
#define DEBUG_TRAP 0x0000002 /* Show CPU Traps */ | |
#define DEBUG_CMD 0x0000004 /* Show device commands */ | |
#define DEBUG_DATA 0x0000008 /* Show data transfers */ | |
#define DEBUG_DETAIL 0x0000020 /* Show details */ | |
#define DEBUG_EXP 0x0000040 /* Show error conditions */ | |
#define DEBUG_SNS 0x0000080 /* Shows sense data for 7909 devs */ | |
#define DEBUG_CTSS 0x0000100 /* Shows CTSS specail instructions */ | |
#define DEBUG_PRIO 0x0000100 /* Debug Priority mode on 7010 */ | |
#define DEBUG_PROT 0x0000200 /* Protection traps */ | |
extern DEBTAB dev_debug[]; | |
extern DEBTAB crd_debug[]; | |
/* Channels */ | |
#define CHAN_CHPIO 0 /* Puesdo access for 704 */ | |
#ifndef CHAN_CHUREC | |
#define CHAN_CHUREC 0 /* Unit record devices */ | |
#endif | |
#define CHAN_A 1 | |
#define CHAN_B 2 | |
#define CHAN_C 3 | |
#define CHAN_D 4 | |
#define CHAN_E 5 | |
#define CHAN_F 6 | |
#define CHAN_G 7 | |
#define CHAN_H 8 | |
#define UNIT_V_SELECT (UNIT_V_UF + 9) /* 9 */ | |
#define UNIT_SELECT (1 << UNIT_V_SELECT) | |
#define UNIT_V_CHAN (UNIT_V_SELECT + 1) /* 10 */ | |
#define UNIT_CHAN (017 << UNIT_V_CHAN) /* 10-14 */ | |
#define UNIT_S_CHAN(x) (UNIT_CHAN & ((x) << UNIT_V_CHAN)) | |
#define UNIT_G_CHAN(x) ((UNIT_CHAN & (x)) >> UNIT_V_CHAN) | |
#define UNIT_V_LOCAL (UNIT_V_UF + 0) /* 0 */ | |
#define DEV_BUF_NUM(x) (((x) & 07) << DEV_V_UF) | |
#define GET_DEV_BUF(x) (((x) >> DEV_V_UF) & 07) | |
#define UNIT_V_MODE (UNIT_V_LOCAL + 1) /* 1 */ | |
/* Specific to channel devices */ | |
#define UNIT_V_MODEL (UNIT_V_UF + 0) | |
#define CHAN_MODEL (07 << UNIT_V_MODEL) | |
#define CHAN_S_TYPE(x) (CHAN_MODEL & ((x) << UNIT_V_MODEL)) | |
#define CHAN_G_TYPE(x) ((CHAN_MODEL & (x)) >> UNIT_V_MODEL) | |
#define UNIT_V_AUTO (UNIT_V_UF + 4) | |
#define CHAN_AUTO (1 << UNIT_V_AUTO) | |
#define UNIT_V_SET (UNIT_V_UF + 5) | |
#define CHAN_SET (1 << UNIT_V_SET) | |
extern t_value assembly[NUM_CHAN]; /* Assembly register */ | |
/* I/O routine functions */ | |
/* Channel half of controls */ | |
/* Channel status */ | |
extern uint32 chan_flags[NUM_CHAN]; /* Channel flags */ | |
extern const char *chname[11]; /* Channel names */ | |
extern int num_devs[NUM_CHAN]; /* Number devices per channel*/ | |
extern uint8 lpr_chan9[NUM_CHAN]; | |
#ifdef I7010 | |
extern uint8 lpr_chan12[NUM_CHAN]; | |
#endif | |
/* Sense information for 7909 channels */ | |
#define SNS_IOCHECK 0x00000400 /* IO Check */ | |
#define SNS_SEQCHECK 0x00000200 /* Sequence check */ | |
#define SNS_UEND 0x00000100 /* Unusual end */ | |
#define SNS_ATTN1 0x00000080 /* Attention 1 */ | |
#define SNS_ATTN2 0x00000040 /* Attention 2 */ | |
#define SNS_ADCHECK 0x00000020 /* Adaptor check */ | |
#define CTL_PREAD 0x00000010 /* Prepare to read */ | |
#define CTL_PWRITE 0x00000008 /* Prepare to write */ | |
#define CTL_READ 0x00000004 /* Read Status */ | |
#define CTL_WRITE 0x00000002 /* Write Status */ | |
#define SNS_IRQ 0x00000001 /* IRQ */ | |
#define SNS_MASK 0x000007fe /* Mask of sense codes */ | |
#define SNS_IRQS 0x000007e0 | |
#define SNS_IMSK 0x00000620 /* Non maskable irqs */ | |
#define CTL_END 0x00000800 /* Transfer is done */ | |
#define CTL_INHB 0x00001000 /* Interupts inhibited */ | |
#define CTL_SEL 0x00002000 /* Device select */ | |
#define CTL_SNS 0x00004000 /* Sense transfer */ | |
#define CTL_CNTL 0x00008000 /* Control transfer */ | |
/* Channel status infomation */ | |
#define STA_PEND 0x00010000 /* Pending LCH instruct */ | |
#define STA_ACTIVE 0x00020000 /* Channel active */ | |
#define STA_WAIT 0x00040000 /* Channel waiting for EOR */ | |
#define STA_START 0x00080000 /* Channel was started, but not reset */ | |
#define STA_TWAIT 0x00100000 /* Channel waiting on IORT */ | |
/* Device error controls */ | |
#define CHS_EOT 0x00200000 /* Channel at EOT */ | |
#define CHS_BOT 0x00400000 /* Channel at BOT */ | |
#define CHS_EOF 0x00800000 /* Channel at EOF */ | |
#define CHS_ERR 0x01000000 /* Channel has Error */ | |
#define CHS_ATTN 0x02000000 /* Channel attention*/ | |
/* Device half of controls */ | |
#define DEV_SEL 0x04000000 /* Channel selected */ | |
#define DEV_WRITE 0x08000000 /* Device is writing to memory */ | |
#define DEV_FULL 0x10000000 /* Buffer full */ | |
#define DEV_REOR 0x20000000 /* Device at End of Record */ | |
#define DEV_DISCO 0x40000000 /* Channel is done with device */ | |
#define DEV_WEOR 0x80000000 /* Channel wants EOR written */ | |
/* Device status information stored in u5 */ | |
#define URCSTA_EOF 0001 /* Hit end of file */ | |
#define URCSTA_ERR 0002 /* Error reading record */ | |
#define URCSTA_CARD 0004 /* Unit has card in buffer */ | |
#define URCSTA_FULL 0004 /* Unit has full buffer */ | |
#define URCSTA_BUSY 0010 /* Device is busy */ | |
#define URCSTA_WDISCO 0020 /* Device is wait for disconnect */ | |
#define URCSTA_READ 0040 /* Device is reading channel */ | |
#define URCSTA_WRITE 0100 /* Device is reading channel */ | |
#define URCSTA_INPUT 0200 /* Console fill buffer from keyboard */ | |
#define URCSTA_ON 0200 /* 7090 Unit is on */ | |
#define URCSTA_IDLE 0400 /* 7090 Unit is idle */ | |
#define URCSTA_WMKS 0400 /* Printer print WM as 1 */ | |
#define URCSTA_SKIPAFT 01000 /* Skip to line after printing next line */ | |
#define URCSTA_NOXFER 01000 /* Don't set up to transfer after feed */ | |
#define URCSTA_LOAD 01000 /* Load flag for 7070 card reader */ | |
#define URCSTA_CMD 01000 /* 7090 Command recieved */ | |
/* Boot from given device */ | |
t_stat chan_boot(int32 unit_num, DEVICE *dptr); | |
/* Sets the device onto a given channel */ | |
t_stat chan_set_devs(DEVICE *dptr); | |
t_stat set_chan(UNIT *uptr, int32 val, CONST char *cptr, void *desc); | |
t_stat set_cchan(UNIT *uptr, int32 val, CONST char *cptr, void *desc); | |
t_stat print_chan(FILE *st, UNIT *uptr, int32 v, CONST void *desc); | |
t_stat get_chan(FILE *st, UNIT *uptr, int32 v, CONST void *desc); | |
t_stat chan9_set_select(UNIT *uptr, int32 val, CONST char *cptr, void *desc); | |
t_stat chan9_get_select(FILE *st, UNIT *uptr, int32 v, CONST void *desc); | |
/* Check channel for error */ | |
int chan_error(int chan); | |
/* Check channel for flags, clear flags if set */ | |
int chan_stat(int chan, uint32 flag); | |
/* Check channel for flags set */ | |
int chan_test(int chan, uint32 flag); | |
/* Check channel is active */ | |
int chan_active(int chan); | |
/* Check channel is selected */ | |
int chan_select(int chan); | |
/* Channel data handling char at a time */ | |
int chan_write_char(int chan, uint8 *data, int flags); | |
int chan_read_char(int chan, uint8 *data, int flags); | |
/* Flag end of file on channel */ | |
void chan_set_eof(int chan); | |
/* Flag error on channel */ | |
void chan_set_error(int chan); | |
/* Flag attention on channel */ | |
void chan_set_attn(int chan); | |
/* Start a selection command on channel */ | |
void chan_set_sel(int chan, int need); | |
void chan_clear_status(int chan); | |
/* Set or clear a flag */ | |
void chan_set(int chan, uint32 flag); | |
void chan_clear(int chan, uint32 flag); | |
/* Channel 7909 special error posting */ | |
void chan9_clear_error(int chan, int sel); | |
void chan9_set_attn(int chan, int sel); | |
void chan9_set_error(int chan, uint32 mask); | |
void chan_proc(); | |
#ifdef I7010 | |
/* Sets the device that will interrupt on the channel. */ | |
t_stat set_urec(UNIT * uptr, int32 val, CONST char *cptr, void *desc); | |
t_stat get_urec(FILE * st, UNIT * uptr, int32 v, CONST void *desc); | |
/* Execute the next channel instruction. */ | |
void chan_set_attn_urec(int chan, uint16 addr); | |
void chan_set_attn_inq(int chan); | |
void chan_clear_attn_inq(int chan); | |
#endif | |
#ifdef I7070 | |
void chan_set_attn_a(int chan); | |
void chan_set_attn_b(int chan); | |
void chan_set_attn_inq(int chan); | |
void chan_clear_attn_inq(int chan); | |
void chan_set_load_mode(int chan); | |
#endif | |
#ifdef I7080 | |
void chan_set_attn_inq(int chan); | |
void chan_clear_attn_inq(int chan); | |
#endif | |
/* Convert micro seconds to click ticks */ | |
#define us_to_ticks(us) (((us) * 10) / cycle_time) | |
/* Returns from chan_read/chan_write */ | |
#define DATA_OK 0 /* Data transfered ok */ | |
#define TIME_ERROR 1 /* Channel did not transfer last operation */ | |
#define END_RECORD 2 /* End of record */ | |
/* Returns from device commands */ | |
#define SCPE_BUSY (1) /* Device is active */ | |
#define SCPE_NODEV (2) /* No device exists */ | |
/* I/O Command codes */ | |
#define IO_RDS 1 /* Read record */ | |
#define IO_BSR 2 /* Backspace one record */ | |
#define IO_BSF 3 /* Backspace one file */ | |
#define IO_WRS 4 /* Write one record */ | |
#define IO_WEF 5 /* Write eof */ | |
#define IO_REW 6 /* Rewind */ | |
#define IO_DRS 7 /* Set unit offline */ | |
#define IO_SDL 8 /* Set density low */ | |
#define IO_SDH 9 /* Set density high */ | |
#define IO_RUN 10 /* Rewind and unload unit */ | |
#define IO_TRS 11 /* Check it unit ready */ | |
#define IO_CTL 12 /* Io control device specific */ | |
#define IO_RDB 13 /* Read backwards */ | |
#define IO_SKR 14 /* Skip record forward */ | |
#define IO_ERG 15 /* Erase next records from tape */ | |
/* Global device definitions */ | |
#ifdef CPANEL | |
extern DEVICE cp_dev; | |
#endif | |
#ifdef NUM_DEVS_TP | |
extern DIB tp_dib; | |
extern uint32 tp_cmd(UNIT *, uint16, uint16); | |
extern DEVICE tpa_dev; | |
#endif | |
#ifdef NUM_DEVS_CDR | |
extern DIB cdr_dib; | |
extern DEVICE cdr_dev; | |
extern uint32 cdr_cmd(UNIT *, uint16, uint16); | |
#endif | |
#ifdef NUM_DEVS_CDP | |
extern DIB cdp_dib; | |
extern DEVICE cdp_dev; | |
extern uint32 cdp_cmd(UNIT *, uint16, uint16); | |
extern void cdp_ini(UNIT *, t_bool); | |
#endif | |
#ifdef STACK_DEV | |
extern DEVICE stack_dev; | |
#endif | |
#ifdef NUM_DEVS_LPR | |
extern DIB lpr_dib; | |
extern DEVICE lpr_dev; | |
extern uint32 lpr_cmd(UNIT *, uint16, uint16); | |
extern void lpr_ini(UNIT *, t_bool); | |
#endif | |
#ifdef NUM_DEVS_CON | |
extern DIB con_dib; | |
extern DEVICE con_dev; | |
extern uint32 con_cmd(UNIT *, uint16, uint16); | |
extern void con_ini(UNIT *, t_bool); | |
#endif | |
#ifdef NUM_DEVS_CHRON | |
extern DIB chron_dib; | |
extern DEVICE chron_dev; | |
extern uint32 chron_cmd(UNIT *, uint16, uint16); | |
#endif | |
#ifdef NUM_DEVS_COM | |
extern uint32 com_cmd(UNIT *, uint16, uint16); | |
extern DIB com_dib; | |
extern DEVICE com_dev; | |
extern DEVICE coml_dev; | |
#endif | |
#ifdef NUM_DEVS_DR | |
extern uint32 drm_cmd(UNIT *, uint16, uint16); | |
extern void drm_ini(UNIT *, t_bool); | |
extern DIB drm_dib; | |
extern DEVICE drm_dev; | |
#endif | |
#ifdef NUM_DEVS_DSK | |
extern uint32 dsk_cmd(UNIT *, uint16, uint16); | |
extern void dsk_ini(UNIT *, t_bool); | |
extern DIB dsk_dib; | |
extern DEVICE dsk_dev; | |
#endif | |
#ifdef NUM_DEVS_HD | |
extern uint32 hsdrm_cmd(UNIT *, uint16, uint16); | |
extern void hsdrm_ini(UNIT *, t_bool); | |
extern DIB hsdrm_dib; | |
extern DEVICE hsdrm_dev; | |
#endif | |
#ifdef NUM_DEVS_HT | |
extern DIB ht_dib; | |
extern uint32 ht_cmd(UNIT *, uint16, uint16); | |
extern DEVICE hta_dev; | |
#if NUM_DEVS_HT > 1 | |
extern DEVICE htb_dev; | |
#endif | |
#endif | |
#if (NUM_DEVS_MT > 0) || defined(MT_CHANNEL_ZERO) | |
extern DIB mt_dib; | |
extern uint32 mt_cmd(UNIT *, uint16, uint16); | |
extern void mt_ini(UNIT *, t_bool); | |
#ifdef MT_CHANNEL_ZERO | |
extern DEVICE mtz_dev; | |
#endif | |
#if NUM_DEVS_MT > 0 | |
extern DEVICE mta_dev; | |
#if NUM_DEVS_MT > 1 | |
extern DEVICE mtb_dev; | |
#if NUM_DEVS_MT > 2 | |
extern DEVICE mtc_dev; | |
#if NUM_DEVS_MT > 3 | |
extern DEVICE mtd_dev; | |
#if NUM_DEVS_MT > 4 | |
extern DEVICE mte_dev; | |
#if NUM_DEVS_MT > 5 | |
extern DEVICE mtf_dev; | |
#endif /* 5 */ | |
#endif /* 4 */ | |
#endif /* 3 */ | |
#endif /* 2 */ | |
#endif /* 1 */ | |
#endif /* 0 */ | |
#endif /* NUM_DEVS_MT */ | |
/* Character codes */ | |
#define CHR_ABLANK 000 | |
#define CHR_MARK CHR_ABLANK | |
#define CHR_1 001 | |
#define CHR_2 002 | |
#define CHR_3 003 | |
#define CHR_4 004 | |
#define CHR_5 005 | |
#define CHR_6 006 | |
#define CHR_7 007 | |
#define CHR_8 010 | |
#define CHR_9 011 | |
#define CHR_0 012 | |
#define CHR_EQ 013 | |
#define CHR_QUOT 014 /* Also @ */ | |
#define CHR_COL 015 | |
#define CHR_GT 016 | |
#define CHR_TRM 017 | |
#define CHR_BLANK 020 | |
#define CHR_SLSH 021 | |
#define CHR_S 022 | |
#define CHR_T 023 | |
#define CHR_U 024 | |
#define CHR_V 025 | |
#define CHR_W 026 | |
#define CHR_X 027 | |
#define CHR_Y 030 | |
#define CHR_Z 031 | |
#define CHR_RM 032 | |
#define CHR_COM 033 | |
#define CHR_RPARN 034 /* Also % */ | |
#define CHR_WM 035 | |
#define CHR_BSLSH 036 | |
#define CHR_UND 037 | |
#define CHR_MINUS 040 | |
#define CHR_J 041 | |
#define CHR_K 042 | |
#define CHR_L 043 | |
#define CHR_M 044 | |
#define CHR_N 045 | |
#define CHR_O 046 | |
#define CHR_P 047 | |
#define CHR_Q 050 | |
#define CHR_R 051 | |
#define CHR_EXPL 052 | |
#define CHR_DOL 053 | |
#define CHR_STAR 054 | |
#define CHR_LBRK 055 | |
#define CHR_SEMI 056 | |
#define CHR_CART 057 | |
#define CHR_PLUS 060 | |
#define CHR_A 061 | |
#define CHR_B 062 | |
#define CHR_C 063 | |
#define CHR_D 064 | |
#define CHR_E 065 | |
#define CHR_F 066 | |
#define CHR_G 067 | |
#define CHR_H 070 | |
#define CHR_I 071 | |
#define CHR_QUEST 072 | |
#define CHR_DOT 073 | |
#define CHR_LPARN 074 /* Also Square */ | |
#define CHR_RBRAK 075 | |
#define CHR_LESS 076 | |
#define CHR_GM 077 | |
/* Generic devices common to all */ | |
extern DEVICE cpu_dev; | |
extern UNIT cpu_unit; | |
extern DEVICE chan_dev; | |
extern UNIT chan_unit[NUM_CHAN]; | |
extern REG cpu_reg[]; | |
extern int cycle_time; | |
extern const char mem_to_ascii[64]; | |
extern const char *cpu_description(DEVICE *dptr); | |
extern const char *chan_type_name[]; | |
extern void help_set_chan_type(FILE *st, DEVICE *dptr, const char *name); | |
#endif /* _I7000_H_ */ |