int sf_proto_end(sf_instance_t *inst, sf_session_t *session) { sf_protocb_t *pcb = PCB(session); if (pcb == NULL || pcb->pc_session_end == NULL) return 0; return pcb->pc_session_end(&session->se_sf, UDATA(session)); }
int sf_proto_input(sf_instance_t *inst, sf_session_t *session, sf_pbuf_t *pbuf, int msglen) { sf_protocb_t *pcb = PCB(session); if (pcb == NULL || pcb->pc_msg_input == NULL) return -1; return pcb->pc_msg_input(&session->se_sf, sf_pbuf_head(pbuf), msglen, UDATA(session)); }
int sf_proto_msglen(sf_instance_t *inst, sf_session_t *session, sf_pbuf_t *pbuf) { int len; sf_protocb_t *pcb = PCB(session); if ((len = sf_pbuf_data_len(pbuf)) <= 0) return -1; if ((pcb = PCB(session)) == NULL || pcb->pc_msg_length == NULL) return len; return pcb->pc_msg_length(&session->se_sf, sf_pbuf_head(pbuf), len, UDATA(session)); }
t_stat i8272_reset (DEVICE *dptr, uint16 base); void i8272_reset1(uint8 devnum); uint8 i8272_get_dn(void); uint8 i8251s(t_bool io, uint8 data); uint8 i8251d(t_bool io, uint8 data); /* globals */ int32 i8272_devnum = 0; //initially, no 8272 instances uint16 i8272_port[4]; //base port assigned to each 8272 instance /* i8272 Standard I/O Data Structures */ /* up to 4 i8282 devices */ UNIT i8272_unit[4] = { { UDATA (&i8272_svc, 0, 0), KBD_POLL_WAIT }, { UDATA (&i8272_svc, 0, 0), KBD_POLL_WAIT }, { UDATA (&i8272_svc, 0, 0), KBD_POLL_WAIT }, { UDATA (&i8272_svc, 0, 0), KBD_POLL_WAIT } }; REG i8272_reg[4] = { { HRDATA (DATA, i8272_unit[0].buf, 8) }, { HRDATA (STAT, i8272_unit[0].u3, 8) }, { HRDATA (MODE, i8272_unit[0].u4, 8) }, { HRDATA (CMD, i8272_unit[0].u5, 8) } }; DEBTAB i8272_debug[] = { { "ALL", DEBUG_all }, { "FLOW", DEBUG_flow },
uint32 I_delay (uint32 opc, uint32 ea, uint32 op); uint32 shift_in (uint32 a, uint32 dat, uint32 sh4); extern t_stat op_p (uint32 dev, uint32 ch); extern t_stat op_i (uint32 dev, uint32 ch, uint32 sh4); extern void lgp_vm_init (void); /* CPU data structures cpu_dev CPU device descriptor cpu_unit CPU unit descriptor cpu_reg CPU register list cpu_mod CPU modifiers list */ UNIT cpu_unit = { UDATA (NULL, UNIT_FIX+UNIT_IN4B+UNIT_TTSS_D, MEMSIZE) }; REG cpu_reg[] = { { DRDATA (C, PC, 12), REG_VMAD }, { HRDATA (A, A, 32), REG_VMIO }, { HRDATA (IR, IR, 32), REG_VMIO }, { FLDATA (OVF, OVF, 0) }, { FLDATA (TSW, t_switch, 0) }, { FLDATA (BP32, bp32, 0) }, { FLDATA (BP16, bp16, 0) }, { FLDATA (BP8, bp8, 0) }, { FLDATA (BP4, bp4, 0) }, { FLDATA (INPST, inp_strt, 0) }, { FLDATA (INPDN, inp_done, 0) }, { FLDATA (OUTST, out_strt, 0) }, { FLDATA (OUTDN, out_done, 0) },
t_stat rp_set_size (UNIT *uptr, int32 val, char *cptr, void *desc); t_stat rp_set_bad (UNIT *uptr, int32 val, char *cptr, void *desc); int32 rp_abort (void); /* RP data structures rp_dev RP device descriptor rp_unit RP unit list rp_reg RP register list rp_mod RP modifier list */ DIB rp_dib = { MBA_RP, 0, &rp_mbrd, &rp_mbwr, 0, 0, 0, { &rp_abort } }; UNIT rp_unit[] = { { UDATA (&rp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_AUTO+ UNIT_ROABLE+(INIT_DTYPE << UNIT_V_DTYPE), INIT_SIZE) }, { UDATA (&rp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_AUTO+ UNIT_ROABLE+(INIT_DTYPE << UNIT_V_DTYPE), INIT_SIZE) }, { UDATA (&rp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_AUTO+ UNIT_ROABLE+(INIT_DTYPE << UNIT_V_DTYPE), INIT_SIZE) }, { UDATA (&rp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_AUTO+ UNIT_ROABLE+(INIT_DTYPE << UNIT_V_DTYPE), INIT_SIZE) }, { UDATA (&rp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_AUTO+ UNIT_ROABLE+(INIT_DTYPE << UNIT_V_DTYPE), INIT_SIZE) }, { UDATA (&rp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_AUTO+ UNIT_ROABLE+(INIT_DTYPE << UNIT_V_DTYPE), INIT_SIZE) }, { UDATA (&rp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_AUTO+ UNIT_ROABLE+(INIT_DTYPE << UNIT_V_DTYPE), INIT_SIZE) }, { UDATA (&rp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+UNIT_AUTO+ UNIT_ROABLE+(INIT_DTYPE << UNIT_V_DTYPE), INIT_SIZE) } };
extern uint32 PCX; extern int32 sio0d(const int32 port, const int32 io, const int32 data); extern int32 sio0s(const int32 port, const int32 io, const int32 data); static t_stat set_if3_connect(UNIT *uptr, int32 val, char *cptr, void *desc); static t_stat if3_reset(DEVICE *if3_dev); static t_stat if3_svc (UNIT *uptr); static uint8 IF3_Read(const uint32 Addr); static uint8 IF3_Write(const uint32 Addr, uint8 cData); static int32 if3dev(const int32 port, const int32 io, const int32 data); static t_stat update_rx_tx_isr (UNIT *uptr); static UNIT if3_unit[] = { { UDATA (&if3_svc, UNIT_FIX | UNIT_DISABLE | UNIT_ROABLE | UNIT_IF3_CONNECT, 0) }, { UDATA (&if3_svc, UNIT_FIX | UNIT_DISABLE | UNIT_ROABLE, 0) }, { UDATA (&if3_svc, UNIT_FIX | UNIT_DISABLE | UNIT_ROABLE, 0) }, { UDATA (&if3_svc, UNIT_FIX | UNIT_DISABLE | UNIT_ROABLE, 0) } }; static uint8 if3_user = 0; static uint8 if3_board = 0; static uint8 if3_rimr[IF3_MAX_BOARDS] = { 0, 0, 0, 0 }; static uint8 if3_timr[IF3_MAX_BOARDS] = { 0, 0, 0, 0 }; static uint8 if3_risr[IF3_MAX_BOARDS] = { 0, 0, 0, 0 }; static uint8 if3_tisr[IF3_MAX_BOARDS] = { 0, 0, 0, 0 }; static REG if3_reg[] = { { HRDATA (USER, if3_user, 3), }, { HRDATA (BOARD, if3_board, 2), },
int32 dco_iack(void); void dcx_reset_ln(int32 ln); /* DCI data structures dci_dev DCI device descriptor dci_unit DCI unit descriptor dci_reg DCI register list */ DIB dci_dib = { IOBA_DC, IOLN_DC, &dcx_rd, &dcx_wr, 2, IVCL(DCI), VEC_DCI, {&dci_iack, &dco_iack} }; UNIT dci_unit = { UDATA(&dci_svc, 0, 0), KBD_POLL_WAIT }; REG dci_reg[] = { {BRDATA(BUF, dci_buf, DEV_RDX, 8, DCX_LINES)}, {BRDATA(CSR, dci_csr, DEV_RDX, 16, DCX_LINES)}, {GRDATA(IREQ, dci_ireq, DEV_RDX, DCX_LINES, 0)}, {DRDATA(LINES, dcx_desc.lines, 6), REG_HRO}, {GRDATA(DEVADDR, dci_dib.ba, DEV_RDX, 32, 0), REG_HRO}, {GRDATA(DEVIOLN, dci_dib.lnt, DEV_RDX, 32, 0), REG_HRO}, {GRDATA(DEVVEC, dci_dib.vec, DEV_RDX, 16, 0), REG_HRO}, {NULL} }; MTAB dci_mod[] = { {MTAB_XTD | MTAB_VDV, 1, NULL, "DISCONNECT", &tmxr_dscln, NULL, &dcx_desc},
/* TS data structures ts_dev TS device descriptor ts_unit TS unit list ts_reg TS register list ts_mod TS modifier list */ #define IOLN_TS 004 DIB ts_dib = { IOBA_AUTO, IOLN_TS, &ts_rd, &ts_wr, 1, IVCL (TS), VEC_AUTO, { NULL } }; UNIT ts_unit = { UDATA (&ts_svc, UNIT_ATTABLE + UNIT_ROABLE + UNIT_DISABLE, 0) }; REG ts_reg[] = { { GRDATA (TSSR, tssr, DEV_RDX, 16, 0) }, { GRDATA (TSBA, tsba, DEV_RDX, 22, 0) }, { GRDATA (TSDBX, tsdbx, DEV_RDX, 8, 0) }, { GRDATA (CHDR, cmdhdr, DEV_RDX, 16, 0) }, { GRDATA (CADL, cmdadl, DEV_RDX, 16, 0) }, { GRDATA (CADH, cmdadh, DEV_RDX, 16, 0) }, { GRDATA (CLNT, cmdlnt, DEV_RDX, 16, 0) }, { GRDATA (MHDR, msghdr, DEV_RDX, 16, 0) }, { GRDATA (MRFC, msgrfc, DEV_RDX, 16, 0) }, { GRDATA (MXS0, msgxs0, DEV_RDX, 16, 0) }, { GRDATA (MXS1, msgxs1, DEV_RDX, 16, 0) }, { GRDATA (MXS2, msgxs2, DEV_RDX, 16, 0) }, { GRDATA (MXS3, msgxs3, DEV_RDX, 16, 0) },
void mt_clr_rwi (uint32 un); /* MT data structures mt_dev MT device descriptor mt_unit MT unit descriptors mt_reg MT register list mt_mod MT modifiers list */ dib_t mt_dib = { DVA_MT, mt_disp }; /* First 'n' units are tape drives; second 'n' are rewind threads */ UNIT mt_unit[] = { { UDATA (&mtu_svc, UNIT_ATTABLE+UNIT_ROABLE+UNIT_DISABLE, 0) }, { UDATA (&mtu_svc, UNIT_ATTABLE+UNIT_ROABLE+UNIT_DISABLE, 0) }, { UDATA (&mtu_svc, UNIT_ATTABLE+UNIT_ROABLE+UNIT_DISABLE, 0) }, { UDATA (&mtu_svc, UNIT_ATTABLE+UNIT_ROABLE+UNIT_DISABLE, 0) }, { UDATA (&mtu_svc, UNIT_ATTABLE+UNIT_ROABLE+UNIT_DISABLE, 0) }, { UDATA (&mtu_svc, UNIT_ATTABLE+UNIT_ROABLE+UNIT_DISABLE, 0) }, { UDATA (&mtu_svc, UNIT_ATTABLE+UNIT_ROABLE+UNIT_DISABLE, 0) }, { UDATA (&mtu_svc, UNIT_ATTABLE+UNIT_ROABLE+UNIT_DISABLE, 0) }, { UDATA (&mtr_svc, UNIT_DIS, 0) }, { UDATA (&mtr_svc, UNIT_DIS, 0) }, { UDATA (&mtr_svc, UNIT_DIS, 0) }, { UDATA (&mtr_svc, UNIT_DIS, 0) }, { UDATA (&mtr_svc, UNIT_DIS, 0) }, { UDATA (&mtr_svc, UNIT_DIS, 0) }, { UDATA (&mtr_svc, UNIT_DIS, 0) }, { UDATA (&mtr_svc, UNIT_DIS, 0) }
extern t_bool conv_old; int32 inq_char = 033; /* request inq */ t_stat inq_svc (UNIT *uptr); t_stat inq_reset (DEVICE *dptr); void inq_puts (char *cptr); /* INQ data structures inq_dev INQ device descriptor inq_unit INQ unit descriptor inq_reg INQ register list */ UNIT inq_unit = { UDATA (&inq_svc, 0, 0), KBD_POLL_WAIT }; REG inq_reg[] = { { ORDATA (INQC, inq_char, 7) }, { FLDATA (INR, ind[IN_INR], 0) }, { FLDATA (INC, ind[IN_INC], 0) }, { DRDATA (TIME, inq_unit.wait, 24), REG_NZ + PV_LEFT }, { NULL } }; MTAB inq_mod[] = { { UNIT_PCH, 0, "business set", "BUSINESS" }, { UNIT_PCH, UNIT_PCH, "Fortran set", "FORTRAN" }, { 0 } };
uint8 ttp_tplte[] = { 0, 1, TPL_END }; uint32 ttp (uint32 dev, uint32 op, uint32 dat); t_stat ttpi_svc (UNIT *uptr); t_stat ttpo_svc (UNIT *uptr); t_stat ttp_reset (DEVICE *dptr); t_stat ttp_set_mode (UNIT *uptr, int32 val, char *cptr, void *desc); t_stat ttp_set_break (UNIT *uptr, int32 val, char *cptr, void *desc); t_stat ttp_set_enbdis (UNIT *uptr, int32 val, char *cptr, void *desc); /* TTP data structures */ DIB ttp_dib = { d_TTP, -1, v_TTP, ttp_tplte, &ttp, NULL }; UNIT ttp_unit[] = { { UDATA (&ttpi_svc, UNIT_IDLE, 0), 0 }, { UDATA (&ttpo_svc, 0, 0), SERIAL_OUT_WAIT } }; REG ttp_reg[] = { { HRDATA (CMD, ttp_cmd, 16) }, { HRDATA (KBUF, ttp_unit[TTI].buf, 8) }, { DRDATA (KPOS, ttp_unit[TTI].pos, T_ADDR_W), PV_LEFT }, { DRDATA (KTIME, ttp_unit[TTI].wait, 24), REG_NZ + PV_LEFT + REG_HRO }, { FLDATA (KIREQ, int_req[l_TTP], i_TTP) }, { FLDATA (KIENB, int_enb[l_TTP], i_TTP) }, { FLDATA (KARM, ttp_karm, 0) }, { FLDATA (CHP, ttp_kchp, 0) }, { HRDATA (TBUF, ttp_unit[TTO].buf, 8) }, { DRDATA (TPOS, ttp_unit[TTO].pos, T_ADDR_W), PV_LEFT }, { DRDATA (TTIME, ttp_unit[TTO].wait, 24), REG_NZ + PV_LEFT },
#define HDC1001_CAPACITY (77*2*16*256) /* Default Micropolis Disk Capacity */ #define IMAGE_TYPE_DSK 1 /* Flat binary "DSK" image file. */ #define IMAGE_TYPE_IMD 2 /* ImageDisk "IMD" image file. */ #define IMAGE_TYPE_CPT 3 /* CP/M Transfer "CPT" image file. */ static t_stat hdc1001_reset(DEVICE *hdc1001_dev); static t_stat hdc1001_attach(UNIT *uptr, char *cptr); static t_stat hdc1001_detach(UNIT *uptr); static int32 hdc1001dev(const int32 port, const int32 io, const int32 data); static uint8 HDC1001_Read(const uint32 Addr); static uint8 HDC1001_Write(const uint32 Addr, uint8 cData); static UNIT hdc1001_unit[] = { { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, HDC1001_CAPACITY) }, { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, HDC1001_CAPACITY) }, { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, HDC1001_CAPACITY) }, { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, HDC1001_CAPACITY) } }; static REG hdc1001_reg[] = { { NULL } }; static MTAB hdc1001_mod[] = { { MTAB_XTD|MTAB_VDV, 0, "IOBASE", "IOBASE", &set_iobase, &show_iobase, NULL }, { UNIT_HDC1001_WLK, 0, "WRTENB", "WRTENB", NULL }, { UNIT_HDC1001_WLK, UNIT_HDC1001_WLK, "WRTLCK", "WRTLCK", NULL }, /* quiet, no warning messages */ { UNIT_HDC1001_VERBOSE, 0, "QUIET", "QUIET", NULL },
extern uint8 isbc064_get_mbyte(uint16 addr); extern void isbc064_put_mbyte(uint16 addr, uint8 val); extern void set_cpuint(int32 int_num); extern t_stat SBC_reset (DEVICE *dptr); extern t_stat isbc064_reset (DEVICE *dptr); extern t_stat isbc208_reset (DEVICE *dptr); /* external globals */ extern uint8 xack; /* XACK signal */ extern int32 int_req; /* i8080 INT signal */ /* multibus Standard SIMH Device Data Structures */ UNIT multibus_unit = { UDATA (&multibus_svc, 0, 0), 20 }; REG multibus_reg[] = { { HRDATA (MBIRQ, mbirq, 32) }, { HRDATA (XACK, xack, 8) } }; DEBTAB multibus_debug[] = { { "ALL", DEBUG_all }, { "FLOW", DEBUG_flow }, { "READ", DEBUG_read }, { "WRITE", DEBUG_write }, { "LEV1", DEBUG_level1 }, { "LEV2", DEBUG_level2 }, { NULL }
int32 tmxr_poll = 5000; extern int32 stop_inst; t_stat clk_svc (UNIT *uptr); t_stat clk_reset (DEVICE *dptr); /* CLK data structures clk_dev CLK device descriptor clk_unit CLK unit clk_reg CLK register list */ UNIT clk_unit = { UDATA (&clk_svc, 0, 0), 5000 }; REG clk_reg[] = { { ORDATA (CNTR, clk_cntr, 16) }, { DRDATA (SBS32LVL, clk32ms_sbs, 4), REG_HRO }, { DRDATA (SBS1MLVL, clk1min_sbs, 4), REG_HRO }, { NULL } }; MTAB clk_mod[] = { { MTAB_XTD|MTAB_VDV, 0, "SBS32MSLVL", "SBS32MSLVL", &dev_set_sbs, &dev_show_sbs, (void *) &clk32ms_sbs }, { MTAB_XTD|MTAB_VDV, 0, "SBS1MINLVL", "SBS1MINLVL", &dev_set_sbs, &dev_show_sbs, (void *) &clk1min_sbs }, { 0 }
int32 icr_rd (t_bool interp); void tmr_incr (uint32 inc); void tmr_sched (void); t_stat todr_resync (void); t_stat fl_wr_txdb (int32 data); t_bool fl_test_xfr (UNIT *uptr, t_bool wr); void fl_protocol_error (void); /* TTI data structures tti_dev TTI device descriptor tti_unit TTI unit descriptor tti_reg TTI register list */ UNIT tti_unit = { UDATA (&tti_svc, TT_MODE_8B, 0), 0 }; REG tti_reg[] = { { HRDATA (RXDB, tti_buf, 16) }, { HRDATA (RXCS, tti_csr, 16) }, { FLDATA (INT, tti_int, 0) }, { FLDATA (DONE, tti_csr, CSR_V_DONE) }, { FLDATA (IE, tti_csr, CSR_V_IE) }, { DRDATA (POS, tti_unit.pos, T_ADDR_W), PV_LEFT }, { DRDATA (TIME, tti_unit.wait, 24), PV_LEFT }, { NULL } }; MTAB tti_mod[] = { { TT_MODE, TT_MODE_7B, "7b", "7B", NULL }, { TT_MODE, TT_MODE_8B, "8b", "8B", NULL },
char *sbia_description (DEVICE *dptr); void sbi_set_tmo (int32 pa); t_stat (*nexusR[NEXUS_NUM])(int32 *dat, int32 ad, int32 md); t_stat (*nexusW[NEXUS_NUM])(int32 dat, int32 ad, int32 md); extern int32 intexc (int32 vec, int32 cc, int32 ipl, int ei); extern int32 eval_int (void); /* SBIA data structures sbia_dev SBIA device descriptor sbia_unit SBIA unit sbia_reg SBIA register list */ UNIT sbia_unit = { UDATA (NULL, 0, 0) }; REG sbia_reg[] = { { HRDATA (NREQ14, nexus_req[0], 16) }, { HRDATA (NREQ15, nexus_req[1], 16) }, { HRDATA (NREQ16, nexus_req[2], 16) }, { HRDATA (NREQ17, nexus_req[3], 16) }, { HRDATA (SBIFS, sbi_fs, 32) }, { HRDATA (SBISC, sbi_sc, 32) }, { HRDATA (SBIMT, sbi_mt, 32) }, { HRDATA (SBIER, sbi_er, 32) }, { HRDATA (SBITMO, sbi_tmo, 32) }, { HRDATA (SBICSR, sbi_csr, 32) }, { NULL } };
t_stat clk_set_freq (UNIT *uptr, int32 val, char *cptr, void *desc); t_stat clk_show_freq (FILE *st, UNIT *uptr, int32 val, void *desc); /* TTI data structures tti_dev TTI device descriptor tti_unit TTI unit descriptor tti_reg TTI register list */ DIB tti_dib = { IOBA_TTI, IOLN_TTI, &tti_rd, &tti_wr, 1, IVCL (TTI), VEC_TTI, { NULL } }; UNIT tti_unit = { UDATA (&tti_svc, UNIT_IDLE, 0), 0 }; REG tti_reg[] = { { ORDATA (BUF, tti_unit.buf, 8) }, { ORDATA (CSR, tti_csr, 16) }, { FLDATA (INT, IREQ (TTI), INT_V_TTI) }, { FLDATA (ERR, tti_csr, CSR_V_ERR) }, { FLDATA (DONE, tti_csr, CSR_V_DONE) }, { FLDATA (IE, tti_csr, CSR_V_IE) }, { DRDATA (POS, tti_unit.pos, T_ADDR_W), PV_LEFT }, { DRDATA (TIME, tti_unit.wait, 24), PV_LEFT }, { NULL } }; MTAB tti_mod[] = { { TT_MODE, TT_MODE_UC, "UC", "UC", &tty_set_mode },
#define ADCS6_TIMER3_RST 0xDF /* RST18 - 0xDF */ #define ADCS6_RDA_RST 0xE7 /* RST20 - 0xE7 */ #define ADCS6_TBE_RST 0xEF /* RST28 - 0xEF */ #define ADCS6_TIMER4_RST 0xF7 /* RST30 - 0xF7 */ #define ADCS6_TIMER5_RST 0xFF /* RST38 - 0xFF */ #define RST_OPCODE_TO_VECTOR(x) (x & 0x38) /* The ADCS6 does not really have RAM associated with it, but for ease of integration with the * SIMH/AltairZ80 Resource Mapping Scheme, rather than Map and Unmap the ROM, simply implement our * own RAM that can be swapped in when the ADCS6 Boot ROM is disabled. */ static uint8 adcs6ram[ADCS6_ROM_SIZE]; static UNIT adcs6_unit[] = { { UDATA (&adcs6_svc, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE + UNIT_ADCS6_ROM, ADCS6_CAPACITY), 1024 }, { UDATA (&adcs6_svc, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, ADCS6_CAPACITY) }, { UDATA (&adcs6_svc, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, ADCS6_CAPACITY) }, { UDATA (&adcs6_svc, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, ADCS6_CAPACITY) } }; static REG adcs6_reg[] = { { HRDATAD (J7, dipswitch, 8, "5-position DIP switch on 64FDC card"), }, { NULL } }; #define ADCS6_NAME "ADC Super-Six ADCS6" static MTAB adcs6_mod[] = { { MTAB_XTD|MTAB_VDV, 0, "MEMBASE", "MEMBASE", &set_membase, &show_membase, NULL, "Sets disk controller memory base address" },
t_stat ttx_vlines (UNIT *uptr, int32 val, char *cptr, void *desc); /* TTIx data structures ttix_dev TTIx device descriptor ttix_unit TTIx unit descriptor ttix_reg TTIx register list ttix_mod TTIx modifiers list */ DIB ttix_dib = { DEV_TTO1, 8, NULL, { &ttox, &ttix, &ttox, &ttix, &ttox, &ttix, &ttox, &ttix } }; UNIT ttix_unit = { UDATA (&ttix_svc, UNIT_IDLE|UNIT_ATTABLE, 0), KBD_POLL_WAIT }; REG ttix_reg[] = { { BRDATA (BUF, ttix_buf, 8, 8, TTX_MAXL) }, { ORDATA (DONE, ttix_done, TTX_MAXL) }, { FLDATA (INT, int_hwre[API_TTI1], INT_V_TTI1) }, { DRDATA (TIME, ttix_unit.wait, 24), REG_NZ + PV_LEFT }, { ORDATA (DEVNUM, ttix_dib.dev, 6), REG_HRO }, { NULL } }; MTAB ttix_mod[] = { { MTAB_XTD | MTAB_VDV, 0, "LINES", "LINES", &ttx_vlines, &tmxr_show_lines, (void *) &ttx_desc }, { UNIT_ATT, UNIT_ATT, "summary", NULL, NULL, &tmxr_show_summ, (void *) &ttx_desc },
t_stat rx_svc (UNIT *uptr); t_stat rx_reset (DEVICE *dptr); t_stat rx_boot (int32 unitno); extern t_stat sim_activate (UNIT *uptr, int32 delay); extern t_stat sim_cancel (UNIT *uptr); /* RX11 data structures rx_dev RX device descriptor rx_unit RX unit list rx_reg RX register list rx_mod RX modifier list */ UNIT rx_unit[] = { { UDATA (&rx_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_BUFABLE+UNIT_MUSTBUF, RX_SIZE) }, { UDATA (&rx_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_BUFABLE+UNIT_MUSTBUF, RX_SIZE) } }; REG rx_reg[] = { { ORDATA (RXCS, rx_csr, 16) }, { ORDATA (RXDB, rx_dbr, 8) }, { ORDATA (RXES, rx_esr, 8) }, { ORDATA (RXERR, rx_ecode, 8) }, { ORDATA (RXTA, rx_track, 8) }, { ORDATA (RXSA, rx_sector, 8) }, { ORDATA (STAPTR, rx_state, 3), REG_RO }, { ORDATA (BUFPTR, bptr, 7) }, { FLDATA (INT, int_req, INT_V_RX) }, { FLDATA (ERR, rx_csr, CSR_V_ERR) }, { FLDATA (TR, rx_csr, RXCS_V_TR) },
t_stat dp_done (uint32 req, uint32 f); t_stat dp_setformat (UNIT *uptr, int32 val, char *cptr, void *desc); t_stat dp_showformat (FILE *st, UNIT *uptr, int32 val, void *desc); /* DP data structures dp_dev DP device descriptor dp_unit DP unit list dp_reg DP register list dp_mod DP modifier list */ DIB dp_dib = { DP, DMC1, 1, &dpio }; UNIT dp_unit[] = { { UDATA (&dp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+ UNIT_ROABLE, CAP_4651) }, { UDATA (&dp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+ UNIT_ROABLE, CAP_4651) }, { UDATA (&dp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+ UNIT_ROABLE, CAP_4651) }, { UDATA (&dp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+ UNIT_ROABLE, CAP_4651) }, { UDATA (&dp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+ UNIT_ROABLE, CAP_4651) }, { UDATA (&dp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+ UNIT_ROABLE, CAP_4651) }, { UDATA (&dp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+ UNIT_ROABLE, CAP_4651) }, { UDATA (&dp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+ UNIT_ROABLE, CAP_4651) } };
t_stat clk_svc (UNIT *uptr); t_stat clk_reset (DEVICE *dptr); int32 clk_delay (int32 flg); /* PTR data structures ptr_dev PTR device descriptor ptr_unit PTR unit descriptor ptr_mod PTR modifiers ptr_reg PTR register list */ DIB ptr_dib = { &ptrio, PTR }; UNIT ptr_unit = { UDATA (&ptr_svc, UNIT_SEQ+UNIT_ATTABLE+UNIT_ROABLE, 0), SERIAL_IN_WAIT }; REG ptr_reg[] = { { ORDATA (BUF, ptr_unit.buf, 8) }, { FLDATA (CTL, ptr.control, 0) }, { FLDATA (FLG, ptr.flag, 0) }, { FLDATA (FBF, ptr.flagbuf, 0) }, { DRDATA (TRLCTR, ptr_trlcnt, 8), REG_HRO }, { DRDATA (TRLLIM, ptr_trllim, 8), PV_LEFT }, { DRDATA (POS, ptr_unit.pos, T_ADDR_W), PV_LEFT }, { DRDATA (TIME, ptr_unit.wait, 24), PV_LEFT }, { FLDATA (STOP_IOE, ptr_stopioe, 0) }, { ORDATA (SC, ptr_dib.select_code, 6), REG_HRO }, { ORDATA (DEVNO, ptr_dib.select_code, 6), REG_HRO },
void dp_done (uint32 flg); extern t_stat id_dboot (int32 u, DEVICE *dptr); /* DP data structures dp_dev DP device descriptor dp_unit DP unit list dp_reg DP register list dp_mod DP modifier list */ DIB dp_dib = { d_DPC, 0, v_DPC, dp_tplte, &dp, &dp_ini }; UNIT dp_unit[] = { { UDATA (&dp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+ UNIT_ROABLE+(TYPE_5440 << UNIT_V_DTYPE), SIZE_5440) }, { UDATA (&dp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+ UNIT_ROABLE+(TYPE_5440 << UNIT_V_DTYPE), SIZE_5440) }, { UDATA (&dp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+ UNIT_ROABLE+(TYPE_5440 << UNIT_V_DTYPE), SIZE_5440) }, { UDATA (&dp_svc, UNIT_FIX+UNIT_ATTABLE+UNIT_DISABLE+ UNIT_ROABLE+(TYPE_5440 << UNIT_V_DTYPE), SIZE_5440) } }; REG dp_reg[] = { { HRDATA (CMD, dp_cmd, 3) }, { HRDATA (STA, dp_sta, 8) }, { HRDATA (BUF, dp_db, 8) }, { HRDATA (PLAT, dp_plat, 1) }, { HRDATA (HDSC, dp_hdsc, 6) }, { HRDATA (CYL, dp_cyl, 9) },
t_stat dcs_reset (DEVICE *dptr); t_stat dcs_attach (UNIT *uptr, char *cptr); t_stat dcs_detach (UNIT *uptr); t_stat dcs_vlines (UNIT *uptr, int32 val, char *cptr, void *desc); void dcs_reset_ln (int32 ln); void dcs_scan_next (t_bool unlk); /* DCS data structures dcs_dev DCS device descriptor dcs_unit DCS unit descriptor dcs_reg DCS register list dcs_mod DCS modifiers list */ UNIT dcs_unit = { UDATA (&dcsi_svc, UNIT_ATTABLE, 0) }; REG dcs_reg[] = { { BRDATA (BUF, dcs_buf, 8, 8, DCS_LINES) }, { BRDATA (FLAGS, dcs_flg, 8, 1, DCS_LINES) }, { FLDATA (SCNF, iosta, IOS_V_DCS) }, { ORDATA (SCAN, dcs_scan, 5) }, { ORDATA (SEND, dcs_send, 5) }, { DRDATA (SBSLVL, dcs_sbs, 4), REG_HRO }, { NULL } }; MTAB dcs_mod[] = { { MTAB_XTD|MTAB_VDV, 0, "SBSLVL", "SBSLVL", &dev_set_sbs, &dev_show_sbs, (void *) &dcs_sbs }, { MTAB_XTD | MTAB_VDV, 0, "LINES", "LINES",
extern const int8 ascii_to_sds[128]; extern const int8 sds_to_ascii[64]; extern const int8 odd_par[64]; /* PTR data structures ptr_dev PTR device descriptor ptr_unit PTR unit ptr_reg PTR register list */ DIB ptr_dib = { CHAN_W, DEV_PTR, XFR_PTR, std_tplt, &ptr }; UNIT ptr_unit = { UDATA (&ptr_svc, UNIT_SEQ+UNIT_ATTABLE+UNIT_ROABLE, 0), SERIAL_IN_WAIT }; REG ptr_reg[] = { { ORDATA (BUF, ptr_unit.buf, 7) }, { FLDATA (XFR, xfr_req, XFR_V_PTR) }, { FLDATA (SOR, ptr_sor, 0) }, { DRDATA (POS, ptr_unit.pos, T_ADDR_W), PV_LEFT }, { DRDATA (TIME, ptr_unit.wait, 24), REG_NZ + PV_LEFT }, { FLDATA (STOP_IOE, ptr_stopioe, 0) }, { NULL } }; MTAB ptr_mod[] = { { MTAB_XTD|MTAB_VDV, 0, "CHANNEL", "CHANNEL",
uint32 CONS_CAN_PRINT[2] = { 01000, 00400 }; uint32 CONS_HAS_INPUT[2] = { 04000, 02000 }; /* Command line buffers for TELNET mode. */ char vt_cbuf [CBUFSIZE] [LINES_MAX+1]; char *vt_cptr [LINES_MAX+1]; void tt_print(); void consul_receive(); t_stat vt_clk(UNIT *); extern const char *get_sim_sw (const char *cptr); int attached_console; UNIT tty_unit [] = { { UDATA (vt_clk, UNIT_DIS|UNIT_IDLE, 0) }, /* fake unit, clock */ { UDATA (NULL, UNIT_SEQ, 0) }, { UDATA (NULL, UNIT_SEQ, 0) }, { UDATA (NULL, UNIT_SEQ, 0) }, { UDATA (NULL, UNIT_SEQ, 0) }, { UDATA (NULL, UNIT_SEQ, 0) }, { UDATA (NULL, UNIT_SEQ, 0) }, { UDATA (NULL, UNIT_SEQ, 0) }, { UDATA (NULL, UNIT_SEQ, 0) }, { UDATA (NULL, UNIT_SEQ, 0) }, { UDATA (NULL, UNIT_SEQ, 0) }, { UDATA (NULL, UNIT_SEQ, 0) }, { UDATA (NULL, UNIT_SEQ, 0) }, { UDATA (NULL, UNIT_SEQ, 0) }, { UDATA (NULL, UNIT_SEQ, 0) }, { UDATA (NULL, UNIT_SEQ, 0) },
t_stat cdr_svc (UNIT *uptr); t_stat cdr_boot (int32 unitno, DEVICE *dptr); t_stat cdr_attach (UNIT *uptr, char *cptr); t_stat cd_reset (DEVICE *dptr); int32 bcd2asc (int32 c, UNIT *uptr); char colbin_to_bcd (uint32 cb); /* Card reader data structures cdr_dev CDR descriptor cdr_unit CDR unit descriptor cdr_reg CDR register list */ UNIT cdr_unit = { UDATA (&cdr_svc, UNIT_SEQ+UNIT_ATTABLE+UNIT_ROABLE+UNIT_TEXT, 0), 100 }; REG cdr_reg[] = { { FLDATA (LAST, ind[IN_LST], 0) }, { FLDATA (ERR, ind[IN_READ], 0) }, { FLDATA (S1, s1sel, 0) }, { FLDATA (S2, s2sel, 0) }, { DRDATA (POS, cdr_unit.pos, T_ADDR_W), PV_LEFT }, { DRDATA (TIME, cdr_unit.wait, 24), PV_LEFT }, { BRDATA (BUF, rbuf, 8, 8, CDR_WIDTH) }, { NULL } }; DEVICE cdr_dev = { "CDR", &cdr_unit, cdr_reg, NULL,
static int32 current_disk = NUM_OF_DSK; static int32 warnLevelDSK = 3; static int32 warnAttached [NUM_OF_DSK] = {0, 0, 0, 0, 0, 0, 0, 0}; static int32 warnDSK11 = 0; /* 88DSK Standard I/O Data Structures */ typedef struct { PNP_INFO pnp; /* Plug and Play */ } FIF_INFO; FIF_INFO fif_info_data = { { 0x0000, 0, 0xFD, 1 } }; FIF_INFO *fif_info = &fif_info_data; static UNIT fif_unit[] = { { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, MAX_DSK_SIZE) }, { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, MAX_DSK_SIZE) }, { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, MAX_DSK_SIZE) }, { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, MAX_DSK_SIZE) }, { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, MAX_DSK_SIZE) }, { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, MAX_DSK_SIZE) }, { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, MAX_DSK_SIZE) }, { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, MAX_DSK_SIZE) } }; #define FIF_NAME "IMSAI" static const char* fif_description(DEVICE *dptr) { return FIF_NAME; }
#define UNIT_V_DISK3_VERBOSE (UNIT_V_UF + 1) /* verbose mode, i.e. show error messages */ #define UNIT_DISK3_VERBOSE (1 << UNIT_V_DISK3_VERBOSE) #define DISK3_CAPACITY (C20MB_NTRACKS*C20MB_NHEADS*C20MB_NSECTORS*C20MB_SECTSIZE) /* Default Disk Capacity */ static t_stat disk3_reset(DEVICE *disk3_dev); static t_stat disk3_attach(UNIT *uptr, char *cptr); static t_stat disk3_detach(UNIT *uptr); static void raise_disk3_interrupt(void); static int32 disk3dev(const int32 port, const int32 io, const int32 data); /* static uint8 DISK3_Read(const uint32 Addr); */ static uint8 DISK3_Write(const uint32 Addr, uint8 cData); static UNIT disk3_unit[] = { { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, DISK3_CAPACITY) }, { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, DISK3_CAPACITY) }, { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, DISK3_CAPACITY) }, { UDATA (NULL, UNIT_FIX + UNIT_ATTABLE + UNIT_DISABLE + UNIT_ROABLE, DISK3_CAPACITY) } }; static REG disk3_reg[] = { { DRDATAD (NTRACKS, ntracks, 10, "Number of tracks"), }, { DRDATAD (NHEADS, nheads, 8, "Number of heads"), }, { DRDATAD (NSECTORS, nsectors, 8, "Number of sectors per track"), }, { DRDATAD (SECTSIZE, sectsize, 11, "Sector size not including pre/postamble"), }, { HRDATAD (SEL_DRIVE, disk3_info_data.sel_drive, 3,