" *********************************************************** " * * " * Copyright, (C) Honeywell Information Systems Inc., 1982 * " * * " * Copyright (c) 1972 by Massachusetts Institute of * " * Technology and Honeywell Information Systems, Inc. * " * * " *********************************************************** " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " BLAST - this bos program is used to force messages out to all " tty's that are currently dialed up. The " command takes the following arguments: " " fnp_tag - A, B, C, or D " " HANGUP - hangup all tty's by dropping dtr on all datasets " " CRASH - send standard message of the form " "MULTICS NOT IN OPERATION AT time" " " absence of either HANGUP or CRASH will cause blast to " type the message "type message" to the operator and then " will send the message typed by the operator to all tty's " " " Originally written by Stan Dunten for GIOC on some unknown date " Rewritten by R. Snyder for DataNet-355 on April 6, 1973 " Modified by Robert Coren for MCS/355 on April 8, 1975 " Largely rewritten by Robert Coren to send single mailbox on June 1, 1976 " Modified April, 1981, by Charlie Hornig to move the 355 mailbox " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " name blast include bosequ " mailbox opcodes and commands bool wcd,3 bool wtx,4 bool blast_op,011 bool disconnect_all,002 stx2 x2 save our return location tsx2 initint initialize for interrupts arg execint here if we get execute interrupt tsx2 init_io init io package tsx2 ttyinit set up to take interrupt from arg ttyrequest operators console here eax7 erbuf,i get pointer to erpt buffer stx7 erbp and save it ldx2 x2 ldx0 mem|0,2 get arg list aos all_sw default is all 355s arglp: eax0 1,0 get next arg lda mem|0,0 cmpa =-1 is there one? tze argend no cmpa =h crash yes, is it crash? tnz narg1 no, look for something else aos crash_sw yes, mark it tra arglp get next narg1: cmpa =hhangup not crash, is it hangup? tnz narg2 no, should be 355 tag aos hangup_sw yes, mark it tra arglp get next narg2: ldq 0,dl should be tag lrl 6 get last character in q(0-5) cmpa =o002020202020 is the rest blank? tnz argerr no, it's faulty stq *+3 put character in descriptor scm (),(du),mask(0) check for 355 tag desc6a which_list,max_no_355s arg 0 argument goes here arg temp_355n result goes here ttn argerr search failed lda temp_355n now we have number ada 1,dl increment so as to be 1 to 4 sta which_355 save it stz all_sw not doing all now aos conf355err so we'll want to see error message tra arglp next arg argerr: lda mem|0,0 get arg again sta badarg store it for printing tsx2 erpt complain acc '^g not recognized' arg badarg tra x2 return argend: szn hangup_sw did we say hangup? tze check_crash no szn crash_sw yes, did we say crash also? tze join no, okay tsx2 erpt mustn't try to do both acc 'cannot specify both crash and hangup' tra x2 forget it check_crash: szn crash_sw crash specified? tnz nio go set up message tsx2 erpt operator wants to send a message acc 'type message' tsx2 nextline go get it tra get_tally " " 'blast crash' -- format message " nio: tsx2 rdclock get the time stq hrmin append it to message tsx2 erpt print message to get it formated crash_msg: acc 'multics not in operation at ^g' arg hrmin " lda erbuf get descriptor for call to stripg sta erbp tsx2 stripg get real length erbp: desc6a 0,0 lrl 36 get tally into q epp xs2,0 get buffer address in xs2 aar xs2,erbp .. tra on clock_error: tsx2 erpt acc 'error reading calendar clock' tra x2 leave the command " " strip trailing blanks off input message " get_tally: tsx2 stripg look for last non-blank desc6a line,80 lrl 36 line length in Q epp xs2,line xs2 -> input line on: mvt (pr,rl),(rl) translate to ascii desc6a xs2|0,ql desc9a ascii_message(2),ql arg bcd_to_ascii mlr (),(ql) put in cr,lf at end desc9a cr_lf,2 desc9a ascii_message(2),2 mvt (rl),(rl) translate to ebcdic desc9a ascii_message(2),ql desc9a ebcdic_temp,ql arg ascii_to_ebcdic mvt (rl),(rl) and to correspondence desc9a ascii_message(2),ql desc9a corresp_temp,ql arg ascii_to_corresp stq message_len adq 12,dl cr, lf, 8 pads, cr, lf stq ascii_tally epp xs1,ebcdic_temp store shift chars in ebcdic message epp xs2,ebcdic_message tsx2 shifts stq ebcdic_tally epp xs1,corresp_temp and in correspondence message epp xs2,corresp_message tsx2 shifts stq corresp_tally join: lda which_355 select the correct 355 tsx2 conf355 search for fnp config card tra next_355 error - go to next " " Initialize 355 mailboxes to zero " ldq mbx_offset get offset for this 355's mailbox eax1 0,ql copy it to x1 qls 2 convert to characters eax0 0,ql get char offset in x0 mlr (),(pr,x0),fill(0) desc9a 0,0 desc9a mem|dn355_mbx.line_number,16*8*4 (16 8-word mailboxes worth of chars) stz mem|dn355_mbx.timw,1 stz mem|dn355_mbx.pcw,1 make sure pcw is zero stz mem|dn355_mbx.used,1 likewise all 'used' flags ldq iom_chan get channel number lda 4*3,dl get interrupt cell number cmpq 32,dl check channel number tmi *+2 ok, continue sba 4,dl fix interrupt cell no ada iom_no add in iom number sta norm_int_cell get it into lxl7 norm_int_cell index register 7 adlx7 com|iom_mxbase stz mem|0,7 clear normal interrupt bits stz mem|16,7 clear the emergency interrupt bits anq 31,dl get channel no mod 32 lda =o400000,du get a bit arl 0,ql put into its place sta int_bit " " We will now set up a submailbox for the FNP " lxl0 mbx_offset lda mbx_offset ada 8,dl point to mailbox 1 (mailbox 0 is used for checksum) eax1 0,al szn hangup_sw hangup or output message? tnz send_hangup absa ascii_buffer message, get absolute address of buffer area als 6 in high-order 18 bits sta mem|dn355_mbx.address,1 store it in submailbox lda blast_op,dl tra set_op_code " hangup, set op code accordingly send_hangup: lda disconnect_all,dl set_op_code: als 9 ora wcd,dl sta mem|dn355_mbx.opcode,1 " " now compute checksum " eaa dn355_mbx.line_number,1 get address of mbx in a reg ora =o3640,dl get tally and 9-bit char indicator sta mem|dn355_mbx.tally_temp store in mailbox 0 of 355 a stz checksum clear checksum cksm_loop: lda mem|dn355_mbx.tally_temp,sc get a 9 bit character asa checksum add 9 bits at a time ttf cksm_loop keep going lxl3 checksum put checksum in mbx sxl3 mem|dn355_mbx.cksm,1 lda 1,dl get number of mbx we just filled als 6 position it in pcw ora =o71,dl or in interrupt 355 op code odd no lockups please szn mem|dn355_mbx.pcw,0 make sure previous connect done tnz *-1 sta mem|dn355_mbx.pcw,0 store pcw in mbx gtb 0 calculate parity on pcw ana 1,dl test for odd or even tnz 3,ic odd lda =o020000,dl even - set parity bit orsa mem|dn355_mbx.pcw,0 lda int_bit get interrupt bit lxl7 norm_int_cell get cell number adlx7 com|iom_mxbase cana mem|16,7 look at emergency int bit tnz emergency_interrupt it died...so we have to too tsx2 connect_iom zero diapcw,0 poke the 355 " szn hangup_sw did we send hangup? tnz next_355 yes, skip this, 355 won't answer rscr 4*8 get time staq begin_wait save it lxl7 norm_int_cell get addr of cells adlx7 com|iom_mxbase add in base of iom mbx wait_for_int: lda int_bit pick up bit cana mem|0,7 was it regular interrupt? tnz next_355 yes, go on to next cana mem|16,7 was it emergency interrupt? tnz emergency_interrupt yes, print message rscr 4*8 read the clock sbaq begin_wait see if we have waited over 1 second yet cmpaq default_waittime .. tmi wait_for_int no - loop around some more " " waited too long, 355 must be down " lda which_355 get 355 number ada =o140,dl convert to letter als 27 put 3 blanks after it ora =o040040040 sta badarg store it for erpt tsx2 erpt must have crashed acc 'no response from FNP ^a' arg badarg tra next_355 " " Come here if we receive an emergency interrupt from 355 " emergency_interrupt: lda which_355 get 355 number ada =o140,dl convert to letter als 27 put 3 blanks after it ora =o040040040 sta badarg store it for erpt tsx2 erpt acc 'emergency interrupt from FNP ^a' arg badarg next_355: szn all_sw are we doing all of them? tze x2 no, we're done lda which_355 find out which one we just did aos which_355 increment stored value cmpa max_no_355s,dl did we just do the last one? tmi join no, go around again ttyrequest: execint: x2: eax2 * restore x2 lca =1,dl no next command to call tra mem|1,2 return to setup " " " Subroutine to insert shift characters in messages for IBM terminals " Inputs: " xs1 points to source string " xs2 points to first word of target string " Output: " q contains total message tally " " Translation has left 200 bit on in lowercase characters " and 400 bit on in uppercase characters. Characters with neither bit " on can be either case. " " shifts: eax6 0 initial source offset eax7 2 initial target offset (starts in midword) ldq message_len initial tally stq running_tally szn xs1|0 first character upper or lower? tmi shift_up upper, put in up-shift shift_down: eax0 0 get down-shift offset tra insert_shift shift_up: eax0 1 get up-shift offset insert_shift: mlr (x0),(pr,x7) desc9a shift_chars,1 desc9a xs2|0,1 aos running_tally count shift character adx7 1,du tra shift_test,0 go to correct scan instruction shift_test: tra look_for_upper tra look_for_lower look_for_upper: scm (pr,x6,rl),(du),mask(377) desc9a xs1|0,ql vfd o18/400000,18/0 arg shift_count tra move_chars look_for_lower: scm (pr,x6,rl),(du),mask(577) desc9a xs1|0,ql vfd o18/200000,18/0 arg shift_count move_chars: "move characters in most recent case lda shift_count mlr (pr,x6,rl),(pr,x7,rl) desc9a xs1|0,al desc9a xs2|0,al als 18 put length in upper half of a word sta add_to_x adx6 add_to_x update offsets adx7 add_to_x sbq shift_count reduce tally tmoz shift_finished if nothing left, wrap it up cmpx0 0,du what was last one? tze shift_up it was lower, put in up-shift tra shift_down or vice versa shift_finished: mlr (),(pr,x7),fill(ibmnl) put newline at end desc9a 0,0 desc9a xs2|0,1 aos running_tally ldq running_tally adq 18,dl nl and 17 pads tra 0,2 return " " " " storage, etc. for shifts subroutine " " shift_count: bss ,1 running_tally: bss ,1 shift_chars: vfd o9/down_shift,o9/up_shift add_to_x: bss ,1 message_len: bss ,1 bool cr,015 bool lf,012 bool ibmnl,055 bool ibmpad,075 bool up_shift,034 bool down_shift,037 " " The following bools describe the 355 mailbox " bool dn355_mbx,3400 bool dn355_mbx.pcw,dn355_mbx+0 first loc of mbx bool dn355_mbx.timw,dn355_mbx+2 term int mpx word bool dn355_mbx.used,dn355_mbx+5 used flags word in mbx header bool dn355_mbx.tally_temp,dn355_mbx+10 first mailbox used as workspace for checksum bool dn355_mbx.line_number,dn355_mbx+10 bool dn355_mbx.opcode,dn355_mbx+11 bool dn355_mbx.address,dn355_mbx+15 bool dn355_mbx.cksm,dn355_mbx+17 checksum: oct 0 even begin_wait: bss ,2 default_waittime: dec 0,1000000 1 second in microseconds norm_int_cell: oct 0 int_bit: oct 0 all_sw: oct 0 indicates whether to do all 355s crash_sw: oct 0 print crash message hangup_sw: oct 0 hang up lines which_list: bci 'abcd' used for finding 355 tag equ max_no_355s,4 temp_355n: bss ,1 which_355: oct 1 initially doing first one badarg: bss ,1 argument stored for error messages temp: oct 0 hrmin: oct 0 case: oct 0 " " ebcdic_temp: bss ,20 room for 80 characters corresp_temp: bss ,20 likewise " " " the following is the buffer area. It consists of three double-size (32-word) " buffers, one for ascii, one for ebcdic, one for correspondence. " The actual text of each message starts at the third character " of the word at the label LANG_message. " " ascii_buffer: ascii_tally: bss ,1 tally vfd o9/cr,o9/lf,18/0 oct 0 four more pads ascii_message: bss ,29 two more pads, and message ebcdic_tally: bss ,1 tally vfd o9/ibmnl,o9/ibmpad,o9/ibmpad,o9/ibmpad vfd o9/ibmpad,o9/ibmpad,o9/ibmpad,o9/ibmpad vfd o9/ibmpad,o9/ibmpad,o9/ibmpad,o9/ibmpad vfd o9/ibmpad,o9/ibmpad,o9/ibmpad,o9/ibmpad ebcdic_message: vfd o9/ibmpad,o9/ibmpad,o18/0 bss ,26 corresp_tally: bss ,1 tally vfd o9/ibmnl,o9/ibmpad,o9/ibmpad,o9/ibmpad vfd o9/ibmpad,o9/ibmpad,o9/ibmpad,o9/ibmpad vfd o9/ibmpad,o9/ibmpad,o9/ibmpad,o9/ibmpad vfd o9/ibmpad,o9/ibmpad,o9/ibmpad,o9/ibmpad corresp_message: vfd o9/ibmpad,o9/ibmpad,18/0 bss ,26 cr_lf: vfd o9/cr,o9/lf,18/0 " " translation tables " " translation table, bcd to ascii " bcd_to_ascii: aci '0123456789[#@:> ' aci ' ABCDEFGHI&.](<\' aci "|JKLMNOPQR-$*);'" aci '+/STUVWXYZ_,%="!' " " " translation table, ascii to ebcdic " ascii_to_ebcdic: vfd o9/075,o9/075,o9/075,o9/075,o9/075,o9/075,o9/075,o9/075 vfd o9/035,o9/057,o9/055,o9/075,o9/075,o9/075,o9/075,o9/075 vfd o9/075,o9/075,o9/075,o9/075,o9/075,o9/075,o9/075,o9/075 vfd o9/075,o9/075,o9/075,o9/076,o9/075,o9/075,o9/075,o9/075 vfd o9/000,o9/465,o9/464,o9/264,o9/265,o9/450,o9/203,o9/430 vfd o9/444,o9/424,o9/404,o9/403,o9/266,o9/201,o9/267,o9/242 vfd o9/224,o9/240,o9/220,o9/260,o9/210,o9/250,o9/230,o9/270 vfd o9/204,o9/244,o9/410,o9/460,o9/420,o9/440,o9/470,o9/442 vfd o9/202,o9/443,o9/423,o9/463,o9/413,o9/453,o9/433,o9/473 vfd o9/407,o9/447,o9/441,o9/421,o9/461,o9/411,o9/451,o9/431 vfd o9/471,o9/405,o9/445,o9/422,o9/462,o9/412,o9/452,o9/432 vfd o9/472,o9/406,o9/446,o9/075,o9/402,o9/075,o9/467,o9/401 vfd o9/075,o9/243,o9/223,o9/263,o9/213,o9/253,o9/233,o9/273 vfd o9/207,o9/247,o9/241,o9/221,o9/261,o9/211,o9/251,o9/231 vfd o9/271,o9/205,o9/245,o9/222,o9/262,o9/212,o9/252,o9/232 vfd o9/272,o9/206,o9/246,o9/075,o9/466,o9/075,o9/075,o9/075 " " " translation table, ascii to correspondence " ascii_to_corresp: vfd o9/075,o9/075,o9/075,o9/075,o9/075,o9/075,o9/075,o9/075 vfd o9/035,o9/057,o9/055,o9/075,o9/075,o9/075,o9/075,o9/075 vfd o9/075,o9/075,o9/075,o9/075,o9/075,o9/075,o9/075,o9/075 vfd o9/075,o9/075,o9/075,o9/076,o9/075,o9/075,o9/075,o9/075 vfd o9/000,o9/075,o9/411,o9/460,o9/404,o9/410,o9/450,o9/211 vfd o9/464,o9/444,o9/470,o9/423,o9/073,o9/267,o9/021,o9/207 vfd o9/244,o9/240,o9/220,o9/260,o9/204,o9/210,o9/230,o9/250 vfd o9/270,o9/264,o9/453,o9/253,o9/075,o9/223,o9/075,o9/407 vfd o9/420,o9/471,o9/466,o9/472,o9/452,o9/412,o9/463,o9/443 vfd o9/446,o9/431,o9/403,o9/432,o9/406,o9/441,o9/422,o9/405 vfd o9/413,o9/433,o9/451,o9/445,o9/402,o9/462,o9/461,o9/465 vfd o9/442,o9/447,o9/424,o9/075,o9/430,o9/075,o9/440,o9/467 vfd o9/075,o9/271,o9/266,o9/272,o9/252,o9/212,o9/263,o9/243 vfd o9/246,o9/231,o9/203,o9/232,o9/206,o9/241,o9/222,o9/205 vfd o9/213,o9/233,o9/251,o9/245,o9/202,o9/262,o9/261,o9/265 vfd o9/242,o9/247,o9/224,o9/075,o9/075,o9/075,o9/075,o9/075 " " include conf355 include bos_tv include bos_common end " " " ----------------------------------------------------------- " " " " Historical Background " " This edition of the Multics software materials and documentation is provided and donated " to Massachusetts Institute of Technology by Group Bull including Bull HN Information Systems Inc. " as a contribution to computer science knowledge. " This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, " Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell Bull Inc., Groupe Bull " and Bull HN Information Systems Inc. to the development of this operating system. " Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), " renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership " of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for " managing computer hardware properly and for executing programs. Many subsequent operating systems " incorporated Multics principles. " Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., " as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . " " ----------------------------------------------------------- " " Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without " fee is hereby granted,provided that the below copyright notice and historical background appear in all copies " and that both the copyright notice and historical background and this permission notice appear in supporting " documentation, and that the names of MIT, HIS, Bull or Bull HN not be used in advertising or publicity pertaining " to distribution of the programs without specific prior written permission. " Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. " Copyright 2006 by Bull HN Information Systems Inc. " Copyright 2006 by Bull SAS " All Rights Reserved " "