|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 14592 (0x3900) Types: TextFile Names: »tinitboot«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt. └─⟦0364f57e3⟧ └─⟦87223b8a0⟧ »kkrcmonfil« └─⟦00964e8f7⟧ Bits:30007478 RC8000 Dump tape fra HCØ. └─⟦b2ec5d50f⟧ └─⟦87223b8a0⟧ »kkrcmonfil« └─⟦this⟧
initboot version: 18 date: 26.03.81 begin <* pej 03.11.77 initboot page 1 bks 23.11.78 initboot -------- the program is used for installing the bootstrap part of an rc8000 disc by moving bootstrap loader, rc8000 monitor, the name of the command file to s, rc3600 and rc3500 systems to areas on disc identified by absolute segment numbers. the modules are taken from magnetic tape or backing storage files. example ------- the following command installs a bootstrap on disc11 taking the modules from magnetic tape file 2 - 5: disc11=initboot mto.mtpip loader.2 monitor.3 fe1.4 fe2.5 the rc3600 system may be installed on segment 130 and foreward with input from the file s3600 by the following command which also specifies that the rc3600 system must not exceed 168 segments: disc11=initboot sys3600.s3600.168.130 autostart.initfile futher the name of an command file to s was specified. the last example creates the peripheral process 'disc7' on de- vice 27, installs the bootstrap loader and monitor and clears the name of an command file to s : disc27=initboot device.27 loader.bload monitor.m8000 autostart.0 call ---- * <discname> = initboot <param> 0 <param> ::= <devicespec>!<mtspec>!<bootspec>!<autospec> <devicespec> ::= <s> device.<devicenumber> <mtspec> ::= <s> <magtapemode> <magtapename> 1 <bootspec> ::= <s> <bootpartname>.<file> <segments> 0 <magtapemode> ::= mto ! nrz ! mt <bootpartname> ::= loader ! monitor ! sys3600 ! sys3500 ! fe1 ! fe2 ! fe3 ! fe4 ! fe5 <file> ::= <discfilename> ! <magtapefileno> 1 <segments> ::= .<no of segments> <first segment> 0 <first segment> ::= .<first segment no> <autospec> ::= autostart.<namespec> <namespec> ::= number!name *> \f <* pej 03.11.77 initboot page 2 bks 23.11.78 function -------- the program installs one or more modules on the bootstrap part of an rc8000 disc identified by <discname> being the name of a disc- driver. if <devicespec> is specified the program creates a peri- pheral process named <discname> to the device. the files to be installed are defined in the <bootspec> parame- ters. default values for <no of segments> and <first segment> are: loader : no of segments 4 first segment 0 monitor: 100 4 sys3600: 168 168 sys3500: 168 336 fe1 : 168 168 fe2 : 168 336 fe3 : 168 504 fe4 : 168 672 fe5 : 168 840 if <mtspec> parameter is supplied the modules may be taken from magnetic tape (mto or nrz) from the files identified by <magtapefileno>. the tape must have been written with a blocklength of 768 charac- ters per block. if <discfilename> parameter is used, the module is taken from the backing storage file <discfilename>. the program produces a printout reflecting the installation. the text '(eof not encountered)' means that the length of the input file exceeds the allowable number of segments and that only the allowable number of segments have been output. error messages -------------- syntax <paramno> syntax error at parameter number <paramno>. create <result> create peripheral process error, <result> = monitor result. reserve <result> not possible to reserve <discname> due to monitor result <result>. *> \f <* pej 03.11.77 initboot page 3 *> <* bks 23.11.78 *> integer dockind, space_separator, point_separator, integer_kind, name_kind, deviceno, i, k, p, index, newline_separator, magtape_mode, maxsize, firstsegm; boolean magtape, disc, eof; integer array integer_params(0:8,2:3), dummy(1:1); real array autofilename, discname, magfilename, arr(1:2), paramname(1:2); zone discfile(128,1,stderror), magfile(128,1,infileerror), bsfile(128,1,infileerror); procedure syntax(no); integer no ; begin write(out,<:<10>*** initboot: syntax :>,<<ddd>,no,<:<10>:>); goto stop; end; procedure monitor_error(text,no); integer text,no ; begin write(out,<:<10>*** initboot: :>); if text = 1 then write(out,<:create, :>, case no of ( <:function forbidden in calling process:>, <:calling proc not user; catalog i/o error:>, <:name conflict:>, <:device no does not exist:>, <:device is reserved by another user:>, <:name format illegal:>),<:<10>:>) else write(out,<:reserve, :>, case no of ( <:reserved by another process:>, <:calling proc not user; proc cannot be reserved:>, <:process does not exist:>),<:<10>:>); goto stop; end; procedure infileerror(z,s,b); zone z ; integer s,b ; if s shift (-16) extract 1 = 1 or s shift (-18) extract 1 = 1 then begin if (-, disc and b <> 0) or disc then begin eof:= true; b:= 512; end; end else stderror(z,s,b); \f <* pej 03.11.77 initboot page 4 *> <* bks 23.11.78 *> newline_separator := 2; space_separator := 4; point_separator := 8; integer_kind := 4; name_kind := 10; <*maxsize*> <*first segm*> integer_params(0,2):= 4; integer_params(0,3):= 0; <*loader*> integer_params(1,2):= 164; integer_params(1,3):= 4; <*monitor*> integer_params(2,2):= 168; integer_params(2,3):= 168; <*sys3600*> integer_params(3,2):= 168; integer_params(3,3):= 336; <*sys3500*> integer_params(4,2):= 168; integer_params(4,3):= 168; <*fe1*> integer_params(5,2):= 168; integer_params(5,3):= 336; <*fe2*> integer_params(6,2):= 168; integer_params(6,3):= 504; <*fe3*> integer_params(7,2):= 168; integer_params(7,3):= 672; <*fe4*> integer_params(8,2):= 168; integer_params(8,3):= 840; <*fe5*> deviceno:=-1; <* <devicespec> not entered *> magtape:=false; <* <mtspec> not entered *> magtapemode:=0; <* mto *> dockind:=0; <* internal kind used for disc process *> autofilename(1):= -1 ; <********** check <discname> **********> k:= system(4,0,discname); if k extract 12 <> name_kind then syntax(0); <********** check <params> **********> p := 2; <* parameter no of next param *> for k:= system(4,p,paramname) while k <> 0 do begin if k <> space_separator shift 12 add name_kind then syntax(p); p:= p + 1; k:= system(4,p,arr); if k shift (-12) <> point_separator then syntax(p); if paramname(1) = real <:test:> then begin if arr(1) = real <:yes:> then dockind:= 4; <* simulate in bs area *> end else if paramname(1) = real <:devic:> add 101 and k extract 12 = integer_kind then begin <* check <devicenumber> , set deviceno *> if deviceno=-1 then deviceno:=arr(1) else syntax(p-1); end else if paramname(1) = real <:autos:> add 116 then begin <* autostart*> if k extract 12 = integer_kind then autofilename(1) := autofilename(2) := real<::> else begin autofilename(1) := arr(1) ; autofilename(2) := arr(2) ; end end else if (paramname(1) = real <:mto:> or paramname(1) = real <:nrz:> or paramname(1) = real <:mt:>) and k extract 12 = name_kind then begin <* check <magtapename> , set magtapemode *> if magtape then syntax(p-1); if paramname(1)=real <:nrz:> then magtape_mode:=4 else magtapemode:=0; magtape:= true; magfilename(1):= arr(1); magfilename(2):= arr(2); end else \f <* pej 03.11.77 initboot page 5 *> <* bks 23.11.78 *> begin <* check parameter <bootpartname> *> if paramname(1) <> real <:loade:> add 114 and paramname(1) <> real <:monit:> add 111 and paramname(1) <> real <:sys36:> add 48 and paramname(1) <> real <:sys35:> add 48 and paramname(1) <> real <:fe1:> and paramname(1) <> real <:fe2:> and paramname(1) <> real <:fe3:> and paramname(1) <> real <:fe4:> and paramname(1) <> real <:fe5:> then syntax(p-1); <* check if parameter .<file> is ok *> if k extract 12 = integer_kind then begin if -, magtape then magtapemode:=-1; end else if k extract 12 <> name_kind then syntax(p); <* check if <maxsize> and <firstsegment> are entered *> for i:= 2 step 1 until 3 do begin <* 2 == <maxsize>, 3 == <firstsegment> *> k:= system(4,p+1,arr); if k shift (-12) = point_separator then begin if k extract 12 <> integer_kind then syntax(p-1); p:= p + 1; end else i:= 4; end; end; p:= p + 1; end; if magtapemode=-1 then begin write(out,<:<10>*** initboot: magtape is missing<10>:>); goto stop; end; \f <* pej 03.11.77 initboot page 6 *> <* bks 23.11.78 *> <********** open discfile, create and reserve discprocess **********> i:= 1; open(discfile,dockind,string discname(increase(i)),0); if deviceno > -1 then begin i:= monitor(54)create_peripheral:(discfile,deviceno,dummy); if i <> 0 and i <> 3 then monitor_error(1,i); end; if dockind = 0 then begin i:= monitor(8)reserve_process:(discfile,0,dummy); if i <> 0 then monitor_error(2,i); end; <* open eventual magtape *> if magtape then begin i:= 1; open(magfile,magtapemode shift 12 + 18,string magfilename(increase(i)),1 shift 16); end; <* print heading of printout *> i:= 1; write(out,<:<10><10>initboot, disc: :>, string discname(increase(i)), <:<10><10>:>, false add 32,17, <:1st segm no of segms inputfile<10>:>); \f <* pej 03.11.77 initboot page 7 *> <* bks 23.11.78 *> <********** move modules to bootstrap part **********> p:=2; for k:=system(4,p,paramname) while k<>0 do begin if paramname(1)=real <:loade:> add 114 then index:=0 else if paramname(1)=real <:monit:> add 111 then index:=1 else if paramname(1)=real <:sys36:> add 48 then index:=2 else if paramname(1)=real <:sys35:> add 48 then index:=3 else if paramname(1)=real <:fe1:> then index:=4 else if paramname(1)=real <:fe2:> then index:=5 else if paramname(1)=real <:fe3:> then index:=6 else if paramname(1)=real <:fe4:> then index:=7 else if paramname(1)=real <:fe5:> then index:=8 else index:=-1; if index>-1 then begin disc:=false; write(out,case index + 1 of (<:loader :>, <:monitor :>, <:sys3600 :>, <:sys3500 :>, <:1. front end :>, <:2. front end :>, <:3. front end :>, <:4. front end :>, <:5. front end :>), <: : :>); p:=p+1; k:=system(4,p,paramname); if k extract 12 = name_kind then begin i:=1; open(bsfile,4,string paramname(increase(i)),1 shift 18); disc:=true; end else begin i:=paramname(1); setposition(magfile,i,0); end; k:=system(4,p+1,arr); if k extract 12 = integer_kind then begin maxsize:=arr(1); p:=p+1; k:=system(4,p+1,arr); if k extract 12 = integer_kind then begin firstsegm:=arr(1); p:=p+1; end else firstsegm:=integerparams(index,3); end else begin maxsize:=integerparams(index,2); firstsegm:=integerparams(index,3); end; eof:=false; setposition(discfile,0,firstsegm); if disc then begin inrec6(bsfile,512); i:=-1; for i:=i+1 while (-, eof and i < maxsize) do begin outrec6(discfile,512); tofrom(discfile,bsfile,512); inrec6(bsfile,512); end; end else begin inrec6(magfile,512); i:=-1; for i:=i+1 while (-, eof and i < maxsize) do begin outrec6(discfile,512); tofrom(discfile,magfile,512); inrec6(magfile,512); end; end; k:=1; write(out,<<ddd>,firstsegm, false add 32,9,i,false add 32,8, if disc then string paramname(increase(k)) else string magfilename(increase(k))); if -, disc then write(out,<:.:>,<<d>,paramname(1)); if -, eof then write(out,<: (eof not encountered):>); if disc then close(bsfile,true); write(out,<:<10>:>); setposition(out,0,0); end else begin <* index = -1 *> for k:=system(4,p+1,arr) while (k shift (-12) <> space_separator and k <> 0) do p:=p+1; end; p:=p+1; end; write(out,<:<10>:>); if magtape then close(magfile,true); close(discfile,false); if autofilename(1) <> -1 then begin i:=1; write (out, <:autostart :>, if autofilename(1) =real<::> then <:0:> else string autofilename(increase(i)), <:<10>:>,1) ; setposition(out, 0,0); i:=1; open (discfile,4,string discname(increase(i)),0); swoprec6(discfile,6); swoprec6(discfile,8); discfile(1):=autofilename(1); discfile(2):= autofilename(2); close(discfile,true); end ; stop: end; ▶EOF◀