" " Begin include file ...... fdmp.incl.alm " Modified on 5/19/75 by Noel I. Morris " Modified 11/75 by NIM for NSS " Last modified by Sherman D. Sprague 02/11/81 for DPS8 support. " These are the DUMP partition management routines. " The format of the dump partition is given below. The header is one page " long. The DataNet 355 dump is 16K long. The segment dumps " may begin or end in the middle of a Multics page. They will always " be dumped in muliples of sector-sized blocks. " " _____________________________________________________________ " | | " | HEADER | " | | " _|____________________________________________________________| " | | " | DataNet 355 CORE IMAGE | " | | " _|____________________________________________________________| " | | " | SEGMENT DUMP | " | | " . . . " . . . " . . . " | | " | SEGMENT DUMP | " | | " _|____________________________________________________________| " The format of the header is: " " _____________________________________________________________ " | | " | HEADER INFO | " | | " _|____________________________________________________________| " | | " | SEGMENT ARRAY | " | | " _|____________________________________________________________| " | | " | FIRST PAGE OF BOS COMMON | " | | " _|____________________________________________________________| " The segment array contains an entry for each segment dumped. Each entry is " one word. " Format of segment array entry: " _____________________________________________________________ " | 0 | 18 | " | SEGMENT NUMBER | NUM SECTORS DUMPED | " | | | " _|______________________________|______________________________| equ page_size,1024 Number of words in a page. equ page_power,10 Page size as a power of 2. equ sector_size,64 Size of a secondary storage sector. equ sector_power,6 This size as a power of 2. " Number of sector size blocks in a page. equ num_sectors_page,page_size/sector_size equ dmpbufl,page_size Size of the apnd buffer. " " The FDUMP header follows. It contains three parts. The first contains " header information. The second is the segment array which contains " an entry for each segment dumped. The third is the machine condition " which is a copy of the first part of BOS common. The header is written " into the first record of the DUMP partition. equ hdr_lth,2048 length of entire header equ hdr_sects,(hdr_lth-storlen)/sector_size # of sectors in first two parts of header equ d355_lth,16384*4 length of four DataNet 355 core images mod 16 " This is part one of the header. It is the information section. It must not be longer " than 16 words. header: hdr.words_dumped: oct 0 number of words in dump image hdr.valid: oct 0 Flag denoting whether or not the dump has been processed. " 0 => that it has. even hdr.time: oct 0,0 Time of the dump. hdr.erfnum: oct 0 Error Report Form Number. hdr.num_segs: oct 0 Number of segments dumped. hdr.d355_valid: oct 0 Flag denoting whether or not 355 dump has been processed. hdr.which_355: oct 0 4 bit flag indicating which 355s were dumped. even hdr.d355_time: oct 0,0 Time DataNet 355 dump was taken. hdr.version: dec 2 FDUMP version # " Next is part two of the header - the segment array. It must begin at word 16 of " the header. mod 16 equ seg_array_size,header+hdr_lth-*-storlen size of segment array hdr.seg_array: bss seg_array,seg_array_size " " FDMP_READ_HEADER - Initialize variables and read the dump header. " " tsx2 fdmp_read_header " arg q = 0 => fdump " = 1 => fd355 " tra error fdmp_read_header: lda 0,2* grab argument sta fdmp_switch save for later checks eax2 1,2 step over argument stx2 fdx2 save return " Get limits of dump partition from PART DUMP card. lda =adump Find dump partition. tsx2 find_part .. arg devt Fill in device type. tra fdmp_erret sta first_rnum Save first record number. adq first_rnum Compute last record number. stq last_rnum And save. " Now read in the first sector of the current dump header. We must check to " see if there is still a valid dump out there. lda first_rnum Get num of first record in partition. tsx2 mulbos Convert Multics device address to BOS address. arg devt Device ID. tra error_config_card Error implies config card contained error. sta head_sectn_nsect Save sector number of first page of partition. ana =o777777770000 Zero out sector count field. ora hdr_sects,dl Insert number of sectors to read. tsx2 rdev Read in the header. arg devt nop pgm|header tra error_io " " The header is now in core. Test the flags which indicate whether or not " the dump has been processed. Compute new ERF number. ldx2 fdx2 restore X2 szn fdmp_switch fdmp or fd355? tnz *+3 TRA if fd355 szn hdr.valid Has previous fdump been picked up? tra *+2 szn hdr.d355_valid Has previous fd355 been picked up? tze steperf If so, go to step ERF # tsx2 erpt Tell operator about situation. acc 'previous dump (erf # ^d) has not been picked up' arg hdr.erfnum tsx2 erpt Ask him what to do. acc 'should it be overwritten' tsx2 readtty Read answer: either "yes or "no". tra *-1 Keep reading until we get answer. tsx2 scan scan the input line lda arg and grab first argument cmpa =h yes Is it "yes"? tnz fdmp_erret No, it is "no". Just return steperf: lda hdr.valid Has ERF # been incremented? ora hdr.d355_valid .. tnz *+2 If not, aos hdr.erfnum increment it now. fdrhrtn: ldx2 fdx2 restore X2 tra 1,2 and return " " FDMP_WRITE_DATA - Write blocks of data into the dump parition. " " eax7 no_sectors number of sectors to be written " tsx2 fdmp_write_data " tra error " stx7 no_sectors_written " fdmp_write_data: stx2 fdx2 Save return address. stx0 fdx0 Save X0. eax0 fdmp_buff X0 points to beginning of buffer. stz num_sectors_written clear number of sectors written this call eaa 0,7 sector count in AU arl 18 shift to AL write_next: stz num_ovfl_sects Initialize sector overflow count. stca sectn_nsect,03 Initially assume that this is the number of " sectors that will be written. adla num_sectors Add to number of sectors from start of record. sbla num_sectors_page,dl Are we crossing a Multics record boundary? tmoz write Tra if NO. Info will fit into this record. " We have encountered a Multics record boundary. Not all of the data we must write " can be written with one call to "wdev". We will fill out this Multics record and " then compute the physical location of the next Multics record. We will iterate " to write out the remaining data. sta num_ovfl_sects Save number of sectors which overflow record boundary. lda sectn_nsect Get total number of sectors to write. ana =o7777,dl .. sbla num_ovfl_sects Get number that can be written into current record. stca sectn_nsect,03 Set number to be written in this call in device " data word. tze set_next_write If none, skip this write. " We can now write into the current record without fear of crossing a " cylinder boundary. write: stx0 buff_ptr+1 Set offset of data in ITS pointer. lda sectn_nsect Get num of 1st sector and num of sectors. tsx2 wdev arg devt nop pgm|buff_ptr,* tra error_io " Now that we have written the data we must update the first sector number in the device data " word (sectn_nsect) and we must increment the number of sectors dumped for this segment. lda sectn_nsect Get number of sectors written. ana =o7777,dl mask asa num_sectors_written Add to number of sectors written for this segment. asa num_sectors Add to sector within page. als 12 shift to sector address position asa sectn_nsect Add to number of first sector to write. szn num_ovfl_sects Are there any overflow sectors? tnz set_next_write If so, compute next device address. " No overflow sectors so return. fdx2: eax2 * Restore return address. fdx0: eax0 * Restore X0. lxl7 num_sectors_written Return the number of sectors written this call. tra 1,2 Return. " We come here when we hit a Multics record boundary. We recompute the physical address " for the next Multics record in case we are crossing a disk cylinder boundary. set_next_write: lda next_rnum Get number of the 1st record of the new area. cmpa last_rnum Are we at the end of the dump partition? tpl error_out_of_part Tra if YES. tsx2 mulbos NO, get 1st sector number and device number arg devt for this area. tra error_config_card stca sectn_nsect,74 Save first sector number. stz num_sectors Set sector number within record back to zero. aos next_rnum Step next record number. ldq sectn_nsect Get number of sectors written previously. anq =o7777,dl Mask out the sector number. qls sector_power+18 Compute number of words written stq fdtemp Store number of words written adx0 fdtemp Bump the offset. lda num_ovfl_sects Number of sectors remaining to be written in X7. tra write_next Write out remaining information. " " FDMP_WRITE_HEADER - Write out the header. If fdump, write out machine conditions, too. " " tsx2 fdmp_write_header " tra error " fdmp_write_header: stx2 fdx2 save X2 lda 2,dl set FDUMP version number sta hdr.version .. " Write the first part of header. Device addresses were saved from when first sector of " the header was read. lda head_sectn_nsect Get header device data word. ana =o777777770000 Mask out the length. ora hdr_sects,dl Insert number of sectors to write. tsx2 wdev Write first page of header. arg devt nop pgm|header tra error_io " Now we will write the rest of of the header directly from BOS common. szn fdmp_switch is this fdump? tnz fdwhrtn if not, just return lda head_sectn_nsect Get disk address of header again adla =v24/hdr_sects Increment address by length of header ana =o777777770000 Mask out the sector count. ora num_sectors_page-hdr_sects,dl Fill out the rest of a page. tsx2 wdev Write BOS common. arg devt nop com|0 tra error_io fdwhrtn: ldx2 fdx2 restore X2 tra 1,2 and return " err_no_records: tsx2 erpt acc 'no records in dump partition' tra fdmp_erret error_out_of_part: tsx2 erpt acc 'dump is larger than dump partition' tra fdmp_erret error_config_card: tsx2 erpt acc 'bad dump configuration card' tra fdmp_erret error_io: tsx2 erpt acc 'fatal i/o error in fdump' fdmp_erret: lda com|inputsw Cause next input to come from tty. arl 6 .. sta com|inputsw .. ldx2 fdx2 Restore X2. lxl7 num_sectors_written Return number written successfully. tra 0,2 Take error return. " " The following three words are used to keep track of record numbers in the " dump partition. first_rnum: bss ,1 Num of the first record in the dump partition. next_rnum: bss ,1 Num of the next record in the dump partition. last_rnum: bss ,1 Num of the last record in the dump partition. " The following words are used when reading or writing the FDUMP header " or when writing a page of a segment dump. devt: bss ,1 Device ID. sectn_nsect: bss ,1 Device data word. (0-23) = num of 1st sector. " (24-35) = number of sectors. even buff_ptr: its pgm,0 Pointer to data to be written. head_sectn_nsect: bss ,1 Device data word for first page of header. num_sectors: zero 0,num_sectors_page num_ovfl_sects: bss ,1 Number of sectors that overflow the write area. num_sectors_written: bss ,1 # of sectors written in this call " to fdmp_write_data fdtemp: bss ,1 fdmp_switch: bss ,1 = 0 => fdump " = 1 => fd355 " End of include file ...... fdmp.incl.alm " " " ----------------------------------------------------------- " " " " 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 " "