absresolve_init: stx2 ar_initx lda =h apnd eaq apnd_org load append package tsx2 ldcom tra error_i error from ldcom tsx2 cvinit init address conversion ldaq com|dbr get dbr staq cmdbr set for get pack lda 64,du pass lth of apnd buffer tsx2 getinit init apnd lda =h sstn eaq sstn_org load filling-up package tsx2 ldcom THIS WILL WIPE OUT PRINTER PACK tra error_i tsx2 sstn_org fill up nametable if necessary tsx2 initsstnt set up pathname resolution lda sstsdw get sst abs addr arl sdw.add_shift sta sst_aa eaq sst.cmp+1 locate core map tsx2 apnd access lower wd of sst.cmp arg sstsdw from SST... tra error_i error from apnd lda fetchout,* get that word. arl 18 move to lower sta cm_relbase save rel to sst eaq sst.root_astep+1 get root_rel_astep tsx2 apnd arg sstsdw tra error_i lda fetchout,* sta root_astep ar_initx: tra *-* error_i: tsx2 erpt acc 'cant initialize variables from sst' tsx2 fatal " " " CONSTANTS " addr: oct 0 address being resolved cm_relbase: oct 0 rel base of core map sst_aa: oct 0 absolute sst base root_astep: oct 0 rel-astep of root astep: oct 0 rel-astep of segment ptw_aa: oct 0 abs addr of ptw ptw: oct 0 page table word segno: oct 0 seg number of interest sst_ptwp: oct 0 ptr to ptw, rel to sst eight ar_regs: bss ,8 save for user's registers aste: bss ,12 image of aste cme: bss ,4 copy of core map entry pdme: bss ,4 copy of pdme when cme rws'ing equ page_size,1024 equ for page-size equ page_power,10 pgno_t: oct 0 temp gt1: oct 0 fill_aste temp bool name_offset,10 there is no dir_entry.incl.alm bool ast_size,14 " " absresolve: " " lda absaddr " tsx2 absresolve " tra no_such_core " .. ok 'line' filled with resolution in BCD sreg ar_regs save registers ana =o77777774 adjust to 4 wd blk sta addr hold argument tsx2 space clear out line lda addr restore arg tsx2 verify_core get contents tra ar_x return if no go ldx2 ar_regs+1 incr return adr eax2 1,2 stx2 ar_regs+1 lda addr get address tsx2 octwd convert lls 6*4 get 4 chars out orq =h00 " fill out end sta line put address in line stq line+1 " " Try to access core map entry. " ldq addr get address sought qrl page_power get page number qls 2 make into cmap index adlq cm_relbase relativize to sst qls 18 to upper tsx2 get get the cme arg cmpsdw zero cme,4 tra f1_er " " If cme.ptwp exists, core is used in post-25-5 pc, " regardless of threadedness. " ldx0 cme+cme.ptwp tnz have_ptwp szn cme+cme.fp No ptw. Could be unpaged, unused or deconfigured. tmi unpaged_unclear "unused core", i.e., deconfigured. tze unpaged not threaded, not deconf. Try unpaged. tra unused "free page" " " If rws'ing, ptwp is really a pdmep " have_ptwp: " lxl1 cme+cme.flags support for PD removed 9/83 Sherman D. Sprague... " canx1 cme.rws,du " tze no_rws " " lda =hrws " get rws flag " sta line+4 move into line " ldq cme+cme.pdmep get pdme ptr " " tsx2 get get the pdme " arg sstsdw from the sst. " zero pdme,4 " tra f1_er " " " ldx0 pdme+pdme.ptwp get ptwp if active " tnz no_rws really is a ptwp " ldaq nacmes " sta line+6 " stq line+7 " tra ar_x exit " "nacmes: bci 'not active ' end remove-PD-support 9/83 no_rws: " " Have a real ptwp. Must be active. Get aste. " stx0 sst_ptwp save rel ptr to ptw ldq sst_ptwp set up in q. " " In post - 25-5 pc, we have aste in cme. " lxl0 cme+cme.astep tze old_cme oh well. eaq ast_size,0 old_cme: tsx2 fill_aste_given_ptwp find aste base sta astep " " If has a parent, must be a hierarchy segment, can do pathname. " lda aste+aste.par_astep get par pointer cana -1,dl see if par there tnz hierarchy do pathname deal " " If has no parent, could be the root. " lda astep is this root? cmpa root_astep tze hierarchy do pathname " " Paged non-hierarchy segment. Try for global hardcore. " lda astep get pt addr eaa ast_size,au arl 18 adla sst_aa tsx2 search_my_dseg_paged find it if there tra paged_unclear somebody elses DS or PRDS sta segno save seg number " " Known hardcore seg, not in hierarchy, or my DS or PRDS " tsx2 getsltname get slt name desc6a line+5,136-(6*5) tra error_1 error hard to accept here paged_data: " " Come here to print rel addrs for paged segs " lda sst_ptwp get sst-relative ptw addr sbla astep deduct aste sbla ast_size,du not to big, now. arl 18 lower sta pgno_t hold it right there tsx2 octwd convert it out lls 36 put in a tsx2 bzel blank leading zeros stca line+1,07 store page number ldq pgno_t get page number qls page_power stq pgno_t lda addr get desired addr ana page_size-1,dl get page offset adla pgno_t get full address any_data: " " Come here to print rel addr for any segment tsx2 octwd convert to octal lls 6*3 position stca line+2,07 move to line stcq line+3,70 ar_x: lreg ar_regs tra 0,2 return to caller paged_unclear: "Unidentifiable paged seg, prob DS or PRDS lda =hastep= sta line+5 print rel_astep on line lda astep arl 18 tsx2 octwd lls 36 move into a tsx2 bzel prettify it sta line+6 tra paged_data do rel addr printing " " " subroutine to get astep given ptwp " " eaq rel_ptwp " tsx2 get_astep_given_ptwp " sta rel_astep,upper " Also conveniently fills "aste" fill_aste_given_ptwp: stx2 gagp_x save return " Clever strategy by Noel M. fetches lower ast-candidates until they look right! anq =o777774,du ASTE's must be mod 4 eaq -ast_size,qu try this as an aste gp_loop: stq gt1 keep it if it turns out right tsx2 get arg sstsdw zero aste,ast_size fill the aste buffer tra f1_er lda aste+aste.marker_word test cana =o2,dl tnz gp_got this must be it! ldq gt1 try 4 lower eaq -4,qu tra gp_loop gp_got: lda gt1 return goodness gagp_x: tra *-* " " " Hierarchy segment. Get a pathname from the novel SSTN package. " " hierarchy: lda astep get the astep ana -1,du just to be safe. eaa ast_size,au pt base arl 6 shift to add place adla sstsdw make an sdw-first-half ldq =v15/1,3/sdw.read tsx2 getsstntname magic!!! desc6a line+5,136-(6*5) tra hierarchy_fail tra paged_data process this paged seg now. hierarchy_fail: mlr (),() desc6a hfailmess,21 desc6a line+5,136-(6*5) tra paged_data hfailmess: bci '- cannot get pathname ' " " " Search a dseg for a paged sdw " " " lda absaddr " tsx2 search_my_dseg_paged (absolute match req'd) " tra not_found " sta segno (upper) search_my_dseg_paged: sta dssr save searching quantity tsx7 smds trynext an sdw canq sdw.unpaged,dl see if unpaged tnz 0,7 dont like it- go back arl sdw.add_shift isolate addr cmpa dssr see if it is the one I seek tnz 0,7 no - go back lda segno get number wanted als 18 move to au ldx2 dssr_x get exit tra 1,2 " " " Search dseg for an unpaged address " unpaged: lda addr sta dssr save search quantity eax2 unpaged_unclear init return address if not found tsx7 smds try an sdw canq sdw.unpaged,dl see if paged tze 0,7 dont want paged, go back arl sdw.add_shift get sdw address cmpa dssr is it bgger than mine? tpnz 0,7 if so, dont like it sta ds_temp save base addr anq sdw.bound,du qrl 36-15 get bounds qls 4 adjust to real size adq ds_temp compute end adq 16,dl adjust for anomaly cmpq dssr is it in this seg? tmoz 0,7 dont like it if my addr bigger than seg end lda segno als 18 move to au tsx2 getsltname desc6a line+5,136-(6*5) tra error_1 lda addr get address sba ds_temp subtract seg base tra any_data print out rel offset dssr: oct 0 save for comparison quantity ds_temp: oct 0 save for seg base " " " This routine coroutines with its caller, whose first return address " is the routine used to determine if he likes a proposed descriptor. " Failure returns to this routine. " " " " tsx2 smds " (decide if sdw meets requirement) " tnz 0,7 if does not (SDW in AQ) " .. ok " smds: stx2 dssr_x save exit stx7 smd_call save comparison routine stz segno init seg number ldaq cmdbr get the dbr value ora sdw.df,dl make it look like something staq dbrt save for apnd eax1 0 count seg address eax3 0 count bufadr smd_lp: eaq 0,1 get seg address tsx2 apnd get some words arg dbrt sdw is dbr tra error_2 eax3 0 scan buffer smdl1: stx3 fetchout+1 ready to look.... ldaq fetchout,* cmpaq fraud_sdw ignore sdws for all of core tze ignore_fraud smd_call: tsx7 *-* propose it to caller ignore_fraud: aos segno didnt like it eax3 2,3 try next addr in dseg cmpx3 64,du see if new buf needed tmi smdl1 do more if more in this buffer eax1 64,1 increment address being sought cmpx1 =o2000,du stop after first page tmi smd_lp dssr_x: tra *-* exit if not found even dbrt: oct 0,0 temp for dbr fraud_sdw: oct 000000000004,777775300000 sdw for undefined segments error_1: tsx2 erpt acc 'cant get slt name, seg ^o' arg segno tsx2 fatal error_2: tsx2 erpt acc 'cant search ds, dbr ^w' arg cmdbr tsx2 fatal " unpaged_unclear: ldaq upuc sta line+6 stq line+7 tra ar_x unused: ldaq uu sta line+6 stq line+7 tra ar_x even upuc: bci 'unused core ' uu: bci 'free page ' " " f1_er: tsx2 erpt acc 'fetch/apnd error' tra cycle verify_core: stx2 vc_x als 12 to upper sta fetchin tsx2 fetch try to get words vc_x: tra *-* epp xs1,fetchout,* point at word ldaq xs1|0 staq contents ldaq xs1|2 staq contents+2 ldx2 vc_x tra 1,2 eight contents: bss ,4 bss patchroom,64 include sstn_equ include sstnt include bos_sstnt_man " " " ----------------------------------------------------------- " " " " 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 " "