From 7a5867b4d64a3abb66213856c0aaa61134d7fa70 Mon Sep 17 00:00:00 2001 From: Richard Cornwell Date: Sun, 23 Apr 2017 22:38:01 -0400 Subject: [PATCH] I7000: Updated help commands. --- I7000/i7000_cdp.c | 39 ++++++++++++++++++++++++++++++++------- I7000/i7000_cdr.c | 7 +++---- I7000/i7000_chan.c | 36 ++++++++++++++++++++++++++++++++++++ I7000/i7000_chron.c | 12 ++++++++---- I7000/i7000_com.c | 3 +-- I7000/i7000_defs.h | 3 +++ I7000/i7000_dsk.c | 3 ++- I7000/i7000_ht.c | 1 + I7000/i7000_lpr.c | 12 +++++++----- I7000/i7000_mt.c | 13 +++++++++++-- I7000/i7010_chan.c | 13 ++++++++++++- I7000/i7010_cpu.c | 6 ++---- I7000/i7010_sys.c | 4 ++-- I7000/i701_chan.c | 7 +++++-- I7000/i7070_chan.c | 16 ++++++++++++++-- I7000/i7070_cpu.c | 23 +++++++++++++++++++++++ I7000/i7080_chan.c | 16 +++++++++++++++- I7000/i7080_cpu.c | 2 +- I7000/i7080_drum.c | 3 +++ I7000/i7090_cdp.c | 15 ++++++++++++++- I7000/i7090_cdr.c | 14 ++++++++++---- I7000/i7090_chan.c | 10 ++++++++-- I7000/i7090_drum.c | 14 ++++++++++++-- I7000/i7090_hdrum.c | 6 ++++++ I7000/i7090_lpr.c | 17 ++++++++++++++--- 25 files changed, 245 insertions(+), 50 deletions(-) diff --git a/I7000/i7000_cdp.c b/I7000/i7000_cdp.c index f98ab0b..88bb4bb 100644 --- a/I7000/i7000_cdp.c +++ b/I7000/i7000_cdp.c @@ -73,6 +73,8 @@ t_stat cdp_attach(UNIT *, CONST char *); t_stat cdp_detach(UNIT *); t_stat cdp_help(FILE *, DEVICE *, UNIT *, int32, const char *); const char *cdp_description(DEVICE *dptr); +t_stat stk_help(FILE *, DEVICE *, UNIT *, int32, const char *); +const char *stk_description(DEVICE *dptr); UNIT cdp_unit[] = { {UDATA(cdp_srv, UNIT_S_CHAN(CHAN_CHUREC) | UNIT_CDP, 0), 600}, /* A */ @@ -133,7 +135,9 @@ UNIT stack_unit[] = { DEVICE stack_dev = { "STKR", stack_unit, NULL, NULL, NUM_DEVS_CDP * 10, 10, 31, 1, 8, 7, - NULL, NULL, NULL, NULL, &sim_card_attach, &sim_card_detach + NULL, NULL, NULL, NULL, &sim_card_attach, &sim_card_detach, + NULL, DEV_DISABLE | DEV_DEBUG, 0, crd_debug, + NULL, NULL, &stk_help, NULL, NULL, &stk_description }; #endif @@ -306,15 +310,36 @@ cdp_detach(UNIT * uptr) return sim_card_detach(uptr); } +#ifdef STACK_DEV +t_stat +stk_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) +{ + fprintf (st, "%s\n\n", stk_description(dptr)); + fprintf (st, "Allows stack control functions to direct cards to specific\n"); + fprintf (st, "bins based on stacker selection.Attach cards here if you \n"); + fprintf (st, "wish this specific stacker select to recieve this group of cards.\n"); + fprintf (st, "If nothing is attached cards will be punched on the default punch\n\n"); + sim_card_attach_help(st, dptr, uptr, flag, cptr); + fprint_set_help(st, dptr); + fprint_show_help(st, dptr); + return SCPE_OK; +} + +const char * +stk_description(DEVICE *dptr) +{ + return "Card stacking device"; +} +#endif + t_stat cdp_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { fprintf (st, "%s\n\n", cdp_description(dptr)); - sim_card_attach_help(st, dptr, uptr, flag, cptr); #ifdef STACK_DEV - fprintf (st, "If the punch device is not attached and instead the %s", stack_dev.name); - fprintf (st, "device is attached, the cards\n will be sent out to the"); - fprintf (st, "given stacker based on the flag set by the processor."); + fprintf (st, "If the punch device is not attached and instead the %s ", stack_dev.name); + fprintf (st, "device is attached,\nthe cards will be sent out to the "); + fprintf (st, "given stacker based on the flag set by\nthe processor.\n\n"); #endif #ifdef I7070 fprintf (st, "Unit record devices can be configured to interrupt the CPU on\n"); @@ -322,9 +347,9 @@ cdp_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) fprintf (st, " sim> set cp attena to set device to raise Atten A\n\n"); #endif #ifdef I7010 - fprintf (st, "The card punch could be attached to either channel\n\n"); - fprintf (st, " sim> set cp chan=1 to set the punch on channel 1\n\n"); + help_set_chan_type(st, dptr, "Card punches"); #endif + sim_card_attach_help(st, dptr, uptr, flag, cptr); fprint_set_help(st, dptr); fprint_show_help(st, dptr); return SCPE_OK; diff --git a/I7000/i7000_cdr.c b/I7000/i7000_cdr.c index cd94346..6fd3647 100644 --- a/I7000/i7000_cdr.c +++ b/I7000/i7000_cdr.c @@ -368,7 +368,6 @@ t_stat cdr_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { fprintf (st, "%s\n\n", cdr_description(dptr)); - sim_card_attach_help(st, dptr, uptr, flag, cptr); fprintf (st, "The system supports up to two card readers.\n"); #ifdef I7070 fprintf (st, "Unit record devices can be configured to interrupt the CPU on\n"); @@ -380,9 +379,9 @@ cdr_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) fprintf (st, " sim> set cp lcol=72 sets column to select load mode\n\n"); #endif #ifdef I7010 - fprintf (st, "The card punch could be attached to either channel\n\n"); - fprintf (st, " sim> set cp chan=1 to set the punch on channel 1\n\n"); + help_set_chan_type(st, dptr, "Card reader"); #endif + sim_card_attach_help(st, dptr, uptr, flag, cptr); fprint_set_help(st, dptr); fprint_show_help(st, dptr); return SCPE_OK; @@ -392,7 +391,7 @@ const char * cdr_description(DEVICE *dptr) { #ifdef I7010 - return "1402 Card Punch"; + return "1402 Card Reader"; #endif #ifdef I7070 return "7500 Card Reader"; diff --git a/I7000/i7000_chan.c b/I7000/i7000_chan.c index 00bfaec..fb71274 100644 --- a/I7000/i7000_chan.c +++ b/I7000/i7000_chan.c @@ -126,6 +126,42 @@ chan_set_devs(DEVICE * dptr) return SCPE_OK; } +/* Print help for "SET dev CHAN" based on allowed types */ +void help_set_chan_type(FILE *st, DEVICE *dptr, char *name) +{ +#if NUM_CHAN > 1 + DIB *dibp = (DIB *) dptr->ctxt; + int ctype = dibp->ctype; + int i; + int m; + + fprintf (st, "Devices can be moved to any channel via the command\n"); + fprintf (st, " sim> SET %s CHAN=x\n\n where x is", dptr->name); + if (ctype & 3) { + if (ctype == 1 || ctype == 2) + fprintf(st, " only"); + fprintf (st, " %s", chname[0]); + if ((ctype & ~3) != 0) + fprintf(st, " or"); + } + if ((ctype & ~3) != 0) + fprintf(st, " %s to %s", chname[1], chname[NUM_CHAN-1]); + fprintf (st, "\n%s can be attached to ", name); + m = 1; + for(i = 0; ctype != 0; i++) { + if (ctype & m) { + fprintf(st, "%s", chan_type_name[i]); + ctype &= ~m; + if (ctype != 0) + fprintf(st, ", or "); + } + m <<= 1; + } + fprintf(st, " channel\n"); +#endif +} + + /* Sets the device onto a given channel */ t_stat set_chan(UNIT * uptr, int32 val, CONST char *cptr, void *desc) diff --git a/I7000/i7000_chron.c b/I7000/i7000_chron.c index 421069c..00aadde 100644 --- a/I7000/i7000_chron.c +++ b/I7000/i7000_chron.c @@ -268,10 +268,14 @@ chron_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) fprintf (st, "Chronoclock\n\n"); fprintf (st, "The Chronoclock replaces one of your tape drives, and is\n"); fprintf (st, "for CTSS operation\n\n"); - fprintf (st, " sim> SET CHRON ENABLE to enable chronoclock\n"); - fprintf (st, "The chronoclock replaces one of your tape drives, and by"); - fprintf (st, "reading the tape drive, it will return a short record with"); - fprintf (st, "the current date and time, no year is returned\n"); + fprintf (st, " sim> SET %s ENABLE to enable chronoclock\n", dptr->name); + fprintf (st, " sim> SET %s UNIT=# sets unit to override\n\n", dptr->name); + help_set_chan_type(st, dptr, "Chrono clock"); + fprintf (st, "You must disable the corrosponding tape drive in order for\n"); + fprintf (st, "the chronoclook to be seen. The chronoclock replaces one of\n"); + fprintf (st, "your tape drives, and by reading the tape drive, it will\n"); + fprintf (st, "return a short record with the current date and time, no year\n"); + fprintf (st, "is returned\n"); fprint_set_help (st, dptr) ; fprint_show_help (st, dptr) ; diff --git a/I7000/i7000_com.c b/I7000/i7000_com.c index 6c7f115..cc693d5 100644 --- a/I7000/i7000_com.c +++ b/I7000/i7000_com.c @@ -1279,8 +1279,7 @@ com_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) fprintf (st, "IBM 7750 terminal controller, this is required for CTSS to run.\n"); fprintf (st, "The ATTACH command specifies the port to be used:\n\n"); tmxr_attach_help (st, dptr, uptr, flag, cptr); -fprintf (st, "The device must be attached to a specific channel this can be done with\n"); -fprintf (st, " sim> SET COM CHAN=a\n\n"); +help_set_chan_type(st, dptr, "IBM 7750"); #ifndef I7010 fprintf (st, "Each device on the channel can be at either select 0 or 1, this is set\n"); fprintf (st, "with the\n set SET COM SELECT=n\n\n"); diff --git a/I7000/i7000_defs.h b/I7000/i7000_defs.h index 2a3ca59..2c4b7eb 100644 --- a/I7000/i7000_defs.h +++ b/I7000/i7000_defs.h @@ -613,5 +613,8 @@ extern int cycle_time; extern const char mem_to_ascii[64]; +extern const char *cpu_description(DEVICE *dptr); +extern char *chan_type_name[]; +extern void help_set_chan_type(FILE *st, DEVICE *dptr, char *name); #endif /* _I7000_H_ */ diff --git a/I7000/i7000_dsk.c b/I7000/i7000_dsk.c index be6bcf2..236587a 100644 --- a/I7000/i7000_dsk.c +++ b/I7000/i7000_dsk.c @@ -1844,7 +1844,7 @@ t_stat dsk_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, fprintf (st, "IBM 7631 Disk File Controller\n\n"); fprintf (st, "The IBM 7631 Disk File Controller supports several types of "); fprintf (st, "disk drives and\ndrums. The drive must be formatted for use "); -fprintf (st, "of the system. This is handled by utilities provided by the "); +fprintf (st, "of the system. This is handled\nby utilities provided by the "); fprintf (st, "operating system. This will write a special format track.\n"); fprintf (st, "Use:\n"); fprintf (st, " sim> SET DKn TYPE=type\n"); @@ -1873,6 +1873,7 @@ fprintf (st, "\nTo do this:\n"); fprintf (st, " sim> SET DKn FORMAT HA2\n"); fprintf (st, "To prevent accidental formating of the drive use:\n"); fprintf (st, " sim> SET DKn NOFORMAT NOHA2\n"); +help_set_chan_type(st, dptr, "IBM 7631 Disk File"); fprint_set_help (st, dptr); fprint_show_help (st, dptr); return SCPE_OK; diff --git a/I7000/i7000_ht.c b/I7000/i7000_ht.c index 2878bd7..ac72630 100644 --- a/I7000/i7000_ht.c +++ b/I7000/i7000_ht.c @@ -977,6 +977,7 @@ t_stat ht_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { fprintf (st, "IBM 7340 Hypertape unit\n\n"); + help_set_chan_type(st, dptr, "IBM 7340 Hypertape"); fprint_set_help(st, dptr); fprint_show_help(st, dptr); return SCPE_OK; diff --git a/I7000/i7000_lpr.c b/I7000/i7000_lpr.c index 1d2e2a3..e1c5fa5 100644 --- a/I7000/i7000_lpr.c +++ b/I7000/i7000_lpr.c @@ -497,12 +497,15 @@ lpr_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) fprintf (st, "%s\n\n", lpr_description(dptr)); fprintf (st, "The line printer output can be echoed to the console to check the \n"); fprintf (st, "progress of jobs being run. This can be done with the\n"); - fprintf (st, " sim> SET LPn ECHO\n\n"); + fprintf (st, " sim> SET %s ECHO\n\n", dptr->name); fprintf (st, "The Line printer can be configured to any number of lines per page with the:\n"); - fprintf (st, " sim> SET LPn LINESPERPAGE=n\n\n"); + fprintf (st, " sim> SET %s LINESPERPAGE=n\n\n", dptr->name); fprintf (st, "The default is 59 lines per page. \n"); #ifdef I7080 - fprintf (st, "Spacing control\n"); + fprintf (st, "The 716 printer can operate in one of three spacing modes\n"); + fprintf (st, " sim> SET %s SINGLE for single spacing\n", dptr->name); + fprintf (st, " sim> SET %s DOUBLE for double spacing\n", dptr->name); + fprintf (st, " sim> SET %s PROGRAM for program control of spacing\n\n", dptr->name); #endif #ifdef I7070 fprintf (st, "Unit record devices can be configured to interrupt the CPU on\n"); @@ -510,8 +513,7 @@ lpr_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) fprintf (st, " sim> set cp attena to set device to raise Atten A\n\n"); #endif #ifdef I7010 - fprintf (st, "The card punch could be attached to either channel\n\n"); - fprintf (st, " sim> set cp chan=1 to set the punch on channel 1\n\n"); + help_set_chan_type(st, dptr, "Line printer"); #endif fprint_set_help(st, dptr); fprint_show_help(st, dptr); diff --git a/I7000/i7000_mt.c b/I7000/i7000_mt.c index fedab0b..15747ef 100644 --- a/I7000/i7000_mt.c +++ b/I7000/i7000_mt.c @@ -1307,11 +1307,20 @@ mt_detach(UNIT * uptr) t_stat mt_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { - fprintf (st, "IBM 729 Magnetic tape unit\n\n"); + fprintf (st, "%s\n\n", mt_description(dptr)); fprintf (st, "The magnetic tape controller assumes that all tapes are 7 track\n"); fprintf (st, "with valid parity. Tapes are assumed to be 555.5 characters per\n"); fprintf (st, "inch. To simulate a standard 2400foot tape, do:\n"); - fprintf (st, " sim> SET MTn LENGTH 15\n\n"); + fprintf (st, " sim> SET %s LENGTH 15\n\n", dptr->name); +#ifdef I7090 + fprintf (st, "Devices can be moved to any channel via the command\n"); + fprintf (st, " sim> SET %s CHAN=x\n\n", dptr->name); + fprintf (st, " where x is A to G\n"); + fprintf (st, "Mag tapes can only be attached to 7607 channels\n\n"); +#endif + fprintf (st, "The mag tape drives support the BOOT command\n\n"); + help_set_chan_type(st, dptr, "Mag tape"); + sim_tape_attach_help (st, dptr, uptr, flag, cptr); fprint_set_help(st, dptr); fprint_show_help(st, dptr); return SCPE_OK; diff --git a/I7000/i7010_chan.c b/I7000/i7010_chan.c index 6f566fb..d158e90 100644 --- a/I7000/i7010_chan.c +++ b/I7000/i7010_chan.c @@ -79,6 +79,10 @@ extern uint8 urec_irq[NUM_CHAN]; #define CHAN_DSK_RD 0100 /* Command is read command */ #define CHAN_OVLP 0200 /* Channel ran overlaped */ +char *chan_type_name[] = { + "Polled", "Unit Record", "7010", "7010", "7010"}; + + /* Map commands to channel commands */ /* Commands are reversed to be way they are sent out */ uint8 disk_cmdmap[16] = { 0xff, 0x82, 0x84, 0x86, 0x00, 0x89, 0x88, 0x83, @@ -671,7 +675,14 @@ chan9_set_error(int chan, uint32 mask) t_stat chan_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { -return SCPE_OK; + fprintf (st, "%s\n\n", chan_description(dptr)); + fprintf (st, "The 7010 supports up to 4 channels. Channel models include\n\n"); + fprintf (st, " Channel * is for unit record devices.\n"); + fprintf (st, " Channels 1-4 are 7010 multiplexor channel\n"); + fprintf (st, "Channels are fixed on the 7010.\n\n"); + fprint_set_help(st, dptr); + fprint_show_help(st, dptr); + return SCPE_OK; } const char * diff --git a/I7000/i7010_cpu.c b/I7000/i7010_cpu.c index d7fd5e6..d944a21 100644 --- a/I7000/i7010_cpu.c +++ b/I7000/i7010_cpu.c @@ -3903,10 +3903,8 @@ fprintf (st, " sim> SET CPU FLOAT enables Floating Point\n"); fprintf (st, " sim> SET CPU NOFLOAT disables Floating Point\n\n"); fprintf (st, " sim> SET CPU PROT enables memory protection feature\n"); fprintf (st, " sim> SET CPU NOPROT disables memory protection feature\n\n"); -fprintf (st, "The CPU can maintain a history of the most recently executed instructions.\n" -); -fprintf (st, "This is controlled by the SET CPU HISTORY and SHOW CPU HISTORY commands:\n\n" -); +fprintf (st, "The CPU can maintain a history of the most recently executed instructions.\n"); +fprintf (st, "This is controlled by the SET CPU HISTORY and SHOW CPU HISTORY commands:\n\n"); fprintf (st, " sim> SET CPU HISTORY clear history buffer\n"); fprintf (st, " sim> SET CPU HISTORY=0 disable history\n"); fprintf (st, " sim> SET CPU HISTORY=n{:file} enable history, length = n\n"); diff --git a/I7000/i7010_sys.c b/I7000/i7010_sys.c index f0c20a8..d103bcb 100644 --- a/I7000/i7010_sys.c +++ b/I7000/i7010_sys.c @@ -107,10 +107,10 @@ DIB mt_dib = { CH_TYP_76XX|CH_TYP_UREC, NUM_UNITS_MT, 02400, 07700, &mt_cmd, &m DIB chron_dib = { CH_TYP_76XX|CH_TYP_UREC, 1, 02400, 07700, &chron_cmd, NULL }; #endif #ifdef NUM_DEVS_DSK -DIB dsk_dib = { CH_TYP_79XX|CH_TYP_UREC, 0, 06600, 07700, &dsk_cmd, &dsk_ini }; +DIB dsk_dib = { CH_TYP_79XX, 0, 06600, 07700, &dsk_cmd, &dsk_ini }; #endif #ifdef NUM_DEVS_COM -DIB com_dib = { CH_TYP_79XX|CH_TYP_UREC, 0, 04200, 07700, &com_cmd, NULL }; +DIB com_dib = { CH_TYP_79XX, 0, 04200, 07700, &com_cmd, NULL }; #endif diff --git a/I7000/i701_chan.c b/I7000/i701_chan.c index ded8af3..542c6f2 100644 --- a/I7000/i701_chan.c +++ b/I7000/i701_chan.c @@ -54,6 +54,9 @@ t_uint64 assembly[NUM_CHAN]; /* Assembly register */ uint32 chan_flags[NUM_CHAN]; /* Unit status */ uint8 bcnt[NUM_CHAN]; /* Character count */ +char *chan_type_name[] = { + "Polled", "", "", "", ""}; + /* Delay device for IOD instruction */ DIB dly_dib = @@ -401,8 +404,8 @@ chan9_set_error(int chan, uint32 mask) t_stat chan_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { fprintf(st, "IBM 701 Channel\n\n"); - fprintf(st, "Psuedo device to manage IBM 701 I/O. The IBM 701 used polled"); - fprintf(st, "I/O, however the simulated devices want to talk to a channel."); + fprintf(st, "Psuedo device to manage IBM 701 I/O. The IBM 701 used polled\n"); + fprintf(st, "I/O, however the simulated devices want to talk to a channel.\n"); fprintf(st, "The assembly register and the flags can be displayed\n"); return SCPE_OK; } diff --git a/I7000/i7070_chan.c b/I7000/i7070_chan.c index 2bc8012..23cfcf3 100644 --- a/I7000/i7070_chan.c +++ b/I7000/i7070_chan.c @@ -84,6 +84,10 @@ extern uint16 pri_latchs[10]; #define CHAN_START 0x200000 /* Channel has just started */ #define CHAN_OCTAL 0x400000 /* Octal conversion */ +char *chan_type_name[] = { + "Polled", "Unit Record", "7604", "7907", ""}; + + UNIT chan_unit[] = { /* Puesdo channel for PIO devices */ {UDATA(NULL, CHAN_SET|CHAN_S_TYPE(CHAN_UREC)|UNIT_S_CHAN(CHAN_CHUREC),0)}, @@ -667,7 +671,7 @@ chan_trap: /* Check for record mark */ if ((cmd[chan] & CHN_RECORD) && - (assembly[chan] & DMASK) == ASIGN && + (assembly[chan] & SMASK) == ASIGN && (assembly[chan] & 0xFF) == RM_CHAR) { if (cmd[chan] & CHN_LAST) { chan_flags[chan] &= ~(STA_ACTIVE); @@ -1573,7 +1577,15 @@ chan9_set_error(int chan, uint32 mask) t_stat chan_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { -return SCPE_OK; + fprintf (st, "%s\n\n", chan_description(dptr)); + fprintf (st, "The 7070 supports up to 8 channels. Channel models include\n\n"); + fprintf (st, " 7604 standard multiplexor channel\n"); + fprintf (st, " 7907 advanced capabilities channel\n\n"); + fprintf (st, "Channels are fixed on the 7070.\n\n"); + fprintf (st, "Channel * is a puesdo channel for unit record devices.\n"); + fprint_set_help(st, dptr); + fprint_show_help(st, dptr); + return SCPE_OK; } const char * diff --git a/I7000/i7070_cpu.c b/I7000/i7070_cpu.c index 879bdb9..95433c9 100644 --- a/I7000/i7070_cpu.c +++ b/I7000/i7070_cpu.c @@ -2961,6 +2961,29 @@ cpu_show_hist(FILE * st, UNIT * uptr, int32 val, CONST void *desc) t_stat cpu_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { +fprintf (st, "The CPU can be set to a IBM 7070 or IBM 7074\n"); +fprintf (st, "The type of CPU can be set by one of the following commands\n\n"); +fprintf (st, " sim> set CPU 7070 sets IBM 7070 emulation\n"); +fprintf (st, " sim> set CPU 7074 sets IBM 7074 emulation\n"); +fprintf (st, "These switches are recognized when examining or depositing in CPU memory:\n\n"); +fprintf (st, " -c examine/deposit characters, 5 per word\n"); +fprintf (st, " -l examine/deposit half words\n"); +fprintf (st, " -m examine/deposit IBM 7070 instructions\n"); +fprintf (st, "The memory of the CPU can be set in 5K incrememts from 5K to 30K with the\n\n"); +fprintf (st, " sim> SET CPU xK\n\n"); +fprintf (st, "For the IBM 7070 the following options can be enabled\n\n"); +fprintf (st, " sim> SET CPU FLOAT enables Floating Point\n"); +fprintf (st, " sim> SET CPU NOFLOAT disables Floating Point\n\n"); +fprintf (st, " sim> SET CPU EXTEND enables extended memory\n"); +fprintf (st, " sim> SET CPU NOEXTEND disables extended memory\n\n"); +fprintf (st, " sim> SET CPU CLOCK enables timer clock\n"); +fprintf (st, " sim> SET CPU NOCLOCK disables timer clock\n\n"); +fprintf (st, "The CPU can maintain a history of the most recently executed instructions.\n"); +fprintf (st, "This is controlled by the SET CPU HISTORY and SHOW CPU HISTORY commands:\n\n"); +fprintf (st, " sim> SET CPU HISTORY clear history buffer\n"); +fprintf (st, " sim> SET CPU HISTORY=0 disable history\n"); +fprintf (st, " sim> SET CPU HISTORY=n{:file} enable history, length = n\n"); +fprintf (st, " sim> SHOW CPU HISTORY print CPU history\n"); return SCPE_OK; } diff --git a/I7000/i7080_chan.c b/I7000/i7080_chan.c index 0cb05f9..c6fe47a 100644 --- a/I7000/i7080_chan.c +++ b/I7000/i7080_chan.c @@ -101,6 +101,9 @@ extern uint8 inquiry; #define READ_WRD 1 #define WRITE_WRD 2 +char *chan_type_name[] = { + "Polled", "Unit Record", "7621", "7908", "754"}; + UNIT chan_unit[] = { {UDATA(NULL, CHAN_SET | CHAN_S_TYPE(CHAN_UREC), 0)}, @@ -1216,7 +1219,18 @@ chan9_set_error(int chan, uint32 mask) t_stat chan_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { -return SCPE_OK; + fprintf(st, "%s\n", chan_description(dptr)); + fprintf(st, "The 7080 supports up to 10 channels. Channel 0 is for unit\n"); + fprintf(st, "record devices. Channels 1 through 4 are for tape drives.\n\n"); + fprintf (st, " 7261 tapes on Data Synchronizer\n"); + fprintf (st, " 754 Standard 705 tape drives\n\n"); + fprintf (st, "Channels are fixed on the 7080.\n\n"); + fprintf (st, "Channel * is a puesdo channel for unit record devices.\n"); + + fprintf(st, "\n"); + fprint_set_help(st, dptr); + fprint_show_help(st, dptr); + return SCPE_OK; } const char * diff --git a/I7000/i7080_cpu.c b/I7000/i7080_cpu.c index 814b19c..b851347 100644 --- a/I7000/i7080_cpu.c +++ b/I7000/i7080_cpu.c @@ -1693,7 +1693,7 @@ stop_cpu: break; while ((cr1 = ReadP(MA, MCHCHK)) != CHR_RM || cr1 != CHR_GM) - Next(MA); + { Next(MA); } } while(cr1 != CHR_GM); MAC2 = MA; break; diff --git a/I7000/i7080_drum.c b/I7000/i7080_drum.c index 5ab4d01..7ba55ec 100644 --- a/I7000/i7080_drum.c +++ b/I7000/i7080_drum.c @@ -177,6 +177,9 @@ drm_ini(UNIT *uptr, t_bool f) { t_stat drm_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { + fprintf(st, "Drum device for IBM 702 and 705\n\n"); + fprintf(st, "The Drum had 1000 tracks with the capacity of %d digits per", DRMCHARTRK); + fprintf(st, "per track\n"); return SCPE_OK; } diff --git a/I7000/i7090_cdp.c b/I7000/i7090_cdp.c index 334dbfc..a3b9b63 100644 --- a/I7000/i7090_cdp.c +++ b/I7000/i7090_cdp.c @@ -274,7 +274,20 @@ cdp_detach(UNIT * uptr) t_stat cdp_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { - fprintf (st, "Card Punch\n\n"); + const char *cpu = cpu_description(&cpu_dev); + + fprintf (st, "%s\n\n", cdp_description(dptr)); +#if NUM_DEVS_CDP > 3 + fprintf (st, "The %s supports up to four card punches\n", cpu); +#elif NUM_DEVS_CDP > 2 + fprintf (st, "The %s supports up to three card punches\n", cpu); +#elif NUM_DEVS_CDP > 1 + fprintf (st, "The %s supports up to two card punches\n", cpu); +#elif NUM_DEVS_CDP > 0 + fprintf (st, "The %s supports one card punch\n", cpu); +#endif + help_set_chan_type(st, dptr, "Card punches"); + sim_card_attach_help(st, dptr, uptr, flag, cptr); fprint_set_help(st, dptr); fprint_show_help(st, dptr); return SCPE_OK; diff --git a/I7000/i7090_cdr.c b/I7000/i7090_cdr.c index 73efa32..c4e67e3 100644 --- a/I7000/i7090_cdr.c +++ b/I7000/i7090_cdr.c @@ -316,14 +316,20 @@ cdr_detach(UNIT * uptr) t_stat cdr_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { - fprintf (st, "Card Reader\n\n"); + const char *cpu = cpu_description(&cpu_dev); + + fprintf (st, "%s\n\n", cdr_description(dptr)); #if NUM_DEVS_CDR > 3 - fprintf (st, "The system supports up to three card readers\n"); + fprintf (st, "The %s supports up to four card readers\n", cpu); #elif NUM_DEVS_CDR > 2 - fprintf (st, "The system supports up to two card readers\n"); + fprintf (st, "The %s supports up to three card readers\n", cpu); #elif NUM_DEVS_CDR > 1 - fprintf (st, "The system supports up to one card reader\n"); + fprintf (st, "The %s supports up to two card readers\n", cpu); +#elif NUM_DEVS_CDR > 0 + fprintf (st, "The %s supports one card reader\n", cpu); #endif + help_set_chan_type(st, dptr, "Card readers"); + sim_card_attach_help(st, dptr, uptr, flag, cptr); fprint_set_help(st, dptr); fprint_show_help(st, dptr); return SCPE_OK; diff --git a/I7000/i7090_chan.c b/I7000/i7090_chan.c index 0c7967c..7261f32 100644 --- a/I7000/i7090_chan.c +++ b/I7000/i7090_chan.c @@ -136,6 +136,11 @@ uint8 chan_irq[NUM_CHAN]; /* Channel has a irq pending */ ((dualcore) ? (0100000 & caddr[chan]) : 0) | \ ((caddr[chan] + 1) & MEMMASK); +/* Globally visible flags */ + +char *chan_type_name[] = { + "Polled", "Unit Record", "7607", "7909", "7289"}; + /* Delay device for IOD instruction */ DIB dly_dib = #ifdef I701 @@ -1674,8 +1679,9 @@ chan9_set_error(int chan, uint32 mask) t_stat chan_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { -#ifdef I7090 -#endif + fprintf(st, "%s\n\n", chan_description(dptr)); + fprint_set_help(st, dptr); + fprint_show_help(st, dptr); return SCPE_OK; } diff --git a/I7000/i7090_drum.c b/I7000/i7090_drum.c index 34c8b67..01cdd6d 100644 --- a/I7000/i7090_drum.c +++ b/I7000/i7090_drum.c @@ -248,7 +248,6 @@ drm_attach(UNIT * uptr, CONST char *file) if ((r = attach_unit(uptr, file)) != SCPE_OK) return r; -// sim_activate(uptr, DRMWORDTIME); return SCPE_OK; } @@ -262,10 +261,21 @@ drm_detach(UNIT * uptr) t_stat drm_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { + const char *cpu = cpu_description(&cpu_dev); + DIB *dibp = (DIB *) dptr->ctxt; + int ctype = dibp->ctype; + + fprintf (st, "%s\n\n", drm_description(dptr)); + fprintf (st, "Up to %d units of drum could be used\n", NUM_UNITS_DR); + fprintf (st, " sim> set %s UNITS=n to set number of units\n", dptr->name); + help_set_chan_type(st, dptr, "Drums"); + fprintf (st, "Drums could be booted\n"); + fprint_set_help(st, dptr); + fprint_show_help(st, dptr); + return SCPE_OK; } - const char * drm_description (DEVICE *dptr) { diff --git a/I7000/i7090_hdrum.c b/I7000/i7090_hdrum.c index d764e74..f52461b 100644 --- a/I7000/i7090_hdrum.c +++ b/I7000/i7090_hdrum.c @@ -233,6 +233,12 @@ hsdrm_detach(UNIT * uptr) t_stat hsdrm_help (FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { + fprintf (st, "%s\n\n", hsdrm_description(dptr)); + fprintf (st, "The High speed drum supports up to %d units of storage\n", NUM_UNITS_HD); + fprintf (st, "Each unit held 265k words of data\n"); + help_set_chan_type(st, dptr, "High speed drum"); + fprint_set_help(st, dptr); + fprint_show_help(st, dptr); return SCPE_OK; } diff --git a/I7000/i7090_lpr.c b/I7000/i7090_lpr.c index 972163b..7f00fb0 100644 --- a/I7000/i7090_lpr.c +++ b/I7000/i7090_lpr.c @@ -603,14 +603,25 @@ lpr_detach(UNIT * uptr) t_stat lpr_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr) { - fprintf (st, "Line Printer\n\n"); - fprintf (st, "The system supports one line printer\n"); + const char *cpu = cpu_description(&cpu_dev); + + fprintf (st, "%s\n\n", lpr_description(dptr)); +#if NUM_DEVS_LPR > 3 + fprintf (st, "The %s supports up to four line printers\n", cpu); +#elif NUM_DEVS_LPR > 2 + fprintf (st, "The %s supports up to three line printers\n", cpu); +#elif NUM_DEVS_LPR > 1 + fprintf (st, "The %s supports up to two line printers\n", cpu); +#elif NUM_DEVS_LPR > 0 + fprintf (st, "The %s supports one line printer\n", cpu); +#endif fprintf (st, "by default. The Line printer can be configured to any number of\n"); fprintf (st, "lines per page with the:\n"); - fprintf (st, " sim> SET LPn LINESPERPAGE=n\n\n"); + fprintf (st, " sim> SET %s LINESPERPAGE=n\n\n", dptr->name); fprintf (st, "The printer acted as the console printer therefore the default is\n"); fprintf (st, "echo to the console\n"); fprintf (st, "The default is 59 lines per page\n\n"); + help_set_chan_type(st, dptr, "Card readers"); fprint_set_help(st, dptr); fprint_show_help(st, dptr); return SCPE_OK;