From b1b9aa35103496f7d79e325b61948e72245bc1b7 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Thu, 5 Sep 2013 12:10:09 -0700 Subject: [PATCH] PDP11: Added help to RK device --- PDP11/pdp11_rk.c | 73 +++++++++++++++++++++++++++++++++--------------- PDP11/pdp11_rl.c | 1 - 2 files changed, 51 insertions(+), 23 deletions(-) diff --git a/PDP11/pdp11_rk.c b/PDP11/pdp11_rk.c index ebc1a378..4ce86f5c 100644 --- a/PDP11/pdp11_rk.c +++ b/PDP11/pdp11_rk.c @@ -203,6 +203,8 @@ void rk_go (void); void rk_set_done (int32 error); void rk_clr_done (void); t_stat rk_boot (int32 unitno, DEVICE *dptr); +t_stat rk_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, char *cptr); +char *rk_description (DEVICE *dptr); /* RK11 data structures @@ -239,33 +241,35 @@ UNIT rk_unit[] = { }; REG rk_reg[] = { - { ORDATA (RKCS, rkcs, 16) }, - { ORDATA (RKDA, rkda, 16) }, - { ORDATA (RKBA, rkba, 16) }, - { ORDATA (RKWC, rkwc, 16) }, - { ORDATA (RKDS, rkds, 16) }, - { ORDATA (RKER, rker, 16) }, - { ORDATA (INTQ, rkintq, 9) }, - { ORDATA (DRVN, last_drv, 3) }, - { FLDATA (INT, IREQ (RK), INT_V_RK) }, - { FLDATA (ERR, rkcs, CSR_V_ERR) }, - { FLDATA (DONE, rkcs, CSR_V_DONE) }, - { FLDATA (IE, rkcs, CSR_V_IE) }, - { DRDATA (STIME, rk_swait, 24), PV_LEFT }, - { DRDATA (RTIME, rk_rwait, 24), PV_LEFT }, - { FLDATA (STOP_IOE, rk_stopioe, 0) }, + { ORDATAD (RKCS, rkcs, 16, "control/status") }, + { ORDATAD (RKDA, rkda, 16, "disk address") }, + { ORDATAD (RKBA, rkba, 16, "memory address") }, + { ORDATAD (RKWC, rkwc, 16, "word count") }, + { ORDATAD (RKDS, rkds, 16, "drive status") }, + { ORDATAD (RKER, rker, 16, "error status") }, + { ORDATAD (INTQ, rkintq, 9, "interrupt queue") }, + { ORDATAD (DRVN, last_drv, 3, "last r/w drive") }, + { FLDATAD (INT, IREQ (RK), INT_V_RK, "interrupt pending flag") }, + { FLDATAD (ERR, rkcs, CSR_V_ERR, "error flag (CSR<15>)") }, + { FLDATAD (DONE, rkcs, CSR_V_DONE, "device done flag (CSR<7>)") }, + { FLDATAD (IE, rkcs, CSR_V_IE, "interrupt enable flag (CSR<6>)") }, + { DRDATAD (STIME, rk_swait, 24, "seek time, per cylinder"), PV_LEFT }, + { DRDATAD (RTIME, rk_rwait, 24, "rotational delay"), PV_LEFT }, + { FLDATAD (STOP_IOE, rk_stopioe, 0, "stop on I/O error flag") }, { ORDATA (DEVADDR, rk_dib.ba, 32), REG_HRO }, { ORDATA (DEVVEC, rk_dib.vec, 16), REG_HRO }, { NULL } }; MTAB rk_mod[] = { - { UNIT_HWLK, 0, "write enabled", "WRITEENABLED", NULL }, - { UNIT_HWLK, UNIT_HWLK, "write locked", "LOCKED", NULL }, - { MTAB_XTD|MTAB_VDV, 020, "ADDRESS", "ADDRESS", - &set_addr, &show_addr, NULL }, - { MTAB_XTD|MTAB_VDV, 0, "VECTOR", "VECTOR", - &set_vec, &show_vec, NULL }, + { UNIT_HWLK, 0, "write enabled", "WRITEENABLED", + NULL, NULL, NULL, "Write enable disk drive" }, + { UNIT_HWLK, UNIT_HWLK, "write locked", "LOCKED", + NULL, NULL, NULL, "Write lock disk drive" }, + { MTAB_XTD|MTAB_VDV|MTAB_VALR, 010, "ADDRESS", "ADDRESS", + &set_addr, &show_addr, NULL, "Bus address" }, + { MTAB_XTD|MTAB_VDV|MTAB_VALR, 0, "VECTOR", "VECTOR", + &set_vec, &show_vec, NULL, "Interrupt vector" }, { 0 } }; @@ -274,7 +278,9 @@ DEVICE rk_dev = { RK_NUMDR, 8, 24, 1, 8, 16, NULL, NULL, &rk_reset, &rk_boot, NULL, NULL, - &rk_dib, DEV_DISABLE | DEV_UBUS | DEV_Q18 + &rk_dib, DEV_DISABLE | DEV_UBUS | DEV_Q18, 0, + NULL, NULL, NULL, &rk_help, NULL, NULL, + &rk_description }; /* I/O dispatch routine, I/O addresses 17777400 - 17777416 @@ -758,3 +764,26 @@ M[BOOT_CSR >> 1] = (rk_dib.ba & DMASK) + 012; saved_PC = BOOT_ENTRY; return SCPE_OK; } + +t_stat rk_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, char *cptr) +{ +fprintf (st, "RK11/RKV11 cartridge disk (RK05) controller (RK)\n\n"); +fprintf (st, "Options include the ability to set units write enabled or write locked,\n"); +fprint_set_help (st, dptr); +fprint_show_help (st, dptr); +fprintf (st, "\nThe RK11 supports the BOOT command. The RK11 is disabled in a Qbus\n"); +fprintf (st, "system with more than 256KB of memory.\n"); +fprint_reg_help (st, dptr); +fprintf (st, "\nError handling is as follows:\n\n"); +fprintf (st, " error STOP_IOE processed as\n"); +fprintf (st, " not attached 1 report error and stop\n"); +fprintf (st, " 0 disk not ready\n\n"); +fprintf (st, " end of file x assume rest of disk is zero\n"); +fprintf (st, " OS I/O error x report error and stop\n"); +return SCPE_OK; +} + +char *rk_description (DEVICE *dptr) +{ +return "RK11/RKV11 cartridge disk controller"; +} diff --git a/PDP11/pdp11_rl.c b/PDP11/pdp11_rl.c index 625a51ca..219c59e9 100644 --- a/PDP11/pdp11_rl.c +++ b/PDP11/pdp11_rl.c @@ -336,7 +336,6 @@ static const MTAB rl_mod[] = { &rl_set_load, NULL, NULL, "Unload drive" }, { MTAB_XTD|MTAB_VUN|MTAB_NMO, 0, "DSTATE", NULL, NULL, &rl_show_dstate, NULL, "Display drive state" }, - { UNIT_WLK, 0, "write enabled", "WRITEENABLED", NULL, NULL, NULL, "Write enable disk drive" }, { UNIT_WLK, UNIT_WLK, "write locked", "LOCKED",