head     56.3;
access   bayes jwh jws quist dew;
symbols  ;
locks    ; strict;
comment  @# @;


56.3
date     93.01.27.13.30.39;  author jwh;  state Exp;
branches ;
next     56.2;

56.2
date     93.01.27.12.07.43;  author jwh;  state Exp;
branches ;
next     56.1;

56.1
date     91.11.05.09.52.28;  author jwh;  state Exp;
branches ;
next     55.1;

55.1
date     91.08.25.10.27.46;  author jwh;  state Exp;
branches ;
next     54.1;

54.1
date     91.03.18.15.30.37;  author jwh;  state Exp;
branches ;
next     53.1;

53.1
date     91.03.11.19.30.30;  author jwh;  state Exp;
branches ;
next     52.1;

52.1
date     91.02.19.09.14.30;  author jwh;  state Exp;
branches ;
next     51.1;

51.1
date     91.01.30.16.14.27;  author jwh;  state Exp;
branches ;
next     50.1;

50.1
date     90.10.29.16.29.14;  author jwh;  state Exp;
branches ;
next     49.1;

49.1
date     90.08.14.14.13.10;  author jwh;  state Exp;
branches ;
next     48.1;

48.1
date     90.07.26.11.19.27;  author jwh;  state Exp;
branches ;
next     47.1;

47.1
date     90.05.14.11.03.24;  author dew;  state Exp;
branches ;
next     46.1;

46.1
date     90.05.07.08.50.31;  author jwh;  state Exp;
branches ;
next     45.1;

45.1
date     90.04.19.15.58.29;  author jwh;  state Exp;
branches ;
next     44.1;

44.1
date     90.04.01.22.15.34;  author jwh;  state Exp;
branches ;
next     43.1;

43.1
date     90.03.20.14.07.41;  author jwh;  state Exp;
branches ;
next     42.1;

42.1
date     90.01.23.17.52.20;  author jwh;  state Exp;
branches ;
next     41.1;

41.1
date     89.12.22.11.34.37;  author jwh;  state Exp;
branches ;
next     40.1;

40.1
date     89.09.29.11.55.53;  author jwh;  state Exp;
branches ;
next     39.1;

39.1
date     89.09.26.16.40.30;  author dew;  state Exp;
branches ;
next     38.1;

38.1
date     89.08.29.11.32.31;  author jwh;  state Exp;
branches ;
next     37.1;

37.1
date     89.05.12.11.45.56;  author dew;  state Exp;
branches ;
next     36.1;

36.1
date     89.02.06.10.23.41;  author dew;  state Exp;
branches ;
next     35.1;

35.1
date     89.02.02.13.39.03;  author dew;  state Exp;
branches ;
next     34.1;

34.1
date     89.01.23.16.14.21;  author jwh;  state Exp;
branches ;
next     33.2;

33.2
date     89.01.19.09.12.18;  author quist;  state Exp;
branches ;
next     33.1;

33.1
date     89.01.16.11.45.54;  author dew;  state Exp;
branches ;
next     32.2;

32.2
date     89.01.11.11.12.30;  author quist;  state Exp;
branches ;
next     32.1;

32.1
date     89.01.10.11.54.58;  author bayes;  state Exp;
branches ;
next     31.1;

31.1
date     88.12.14.18.16.03;  author bayes;  state Exp;
branches ;
next     30.1;

30.1
date     88.12.09.13.52.51;  author dew;  state Exp;
branches ;
next     1.2;

1.2
date     88.12.08.16.03.38;  author bayes;  state Exp;
branches ;
next     1.1;

1.1
date     88.12.06.14.24.57;  author quist;  state Exp;
branches ;
next     ;


desc
@first version of this module
@


56.3
log
@
pws2rcs automatic delta on Wed Jan 27 13:14:25 MST 1993
@
text
@$MODCAL$
$ALLOW_PACKED ON$
$RANGE OFF$ $STACKCHECK OFF$

MODULE SYS_BOOT;
EXPORT
  TYPE
    string12 = string[12];
  function sysboot(name,msus,lanid:string12):integer;
IMPLEMENT
IMPORT SYSGLOBALS,ASM,IODECLARATIONS;
  function sysboot(name,msus,lanid:string12):integer;
    CONST
      hp98643 = 21;
    TYPE
      msus_type = packed record
		    case integer of
		    1:(df       : 0..7;         { directory format }
		       dt       : 0..31;        { device type }
		       unum     : byte;         { unit number }
		       scode    : byte;         { select code }
		       baddr    : byte);        { bus address }
		    2:(pad1     : byte;
		       vol      : 0..15;    { volume number }
		       un       : 0..15);   { unit number }
		    3:(bytes    : packed array [1..4] of char);
		  end;
      name_type = packed array [1..10] of char;
      lanid_type= packed array [1..6] of char;
      lanid_ptr = ^lanid_type;
    VAR
      bootmsus [hex('FFFFFEDC')] : msus_type;
      sysname  [hex('FFFFFDC2')] : name_type;
      farea    [hex('FFFFFED4')] : lanid_ptr;
      bootrec : record
		  case boolean of
		  false :( boot : procedure);
		  true  :( op1,op2 : integer);
		end;
      newmsus : msus_type;
      newname : name_type;
      i,
      mlen,
      number  : integer;

      { input is pre-filtered to be 0..9, A..F, a..f }
      function chr_hex(c:char):integer;
	begin
	  if (c>='0') and (c<='9') then chr_hex := ord(c)-ord('0')
	  else
	  if (c>='A') and (c<='F') then chr_hex := ord(c)-ord('A')+10
				   else chr_hex := ord(c)-ord('a')+10
	end; { chr_hex }

      procedure fsunit_msus(fsunit : unitnum; var msus : msus_type);
	begin
	  if (fsunit<0) or (fsunit>maxunit) then escape(2);
	  with unitable^[fsunit] do
	  begin
	    msus.df    := 0;
	    msus.scode := sc;
	    msus.baddr := ba;
	    msus.unum  := du;
	    case letter of
	      'B':begin { BUBBLE }
		    msus.dt := 22;
		  end;
	      'E':begin { EPROM }
		    msus.dt := 20;
		    msus.unum := dv;
		  { bootrom uses unit, table uses volume }
		  end;
	      'F':begin { 9885 }
		    msus.dt := 6;
		  end;
	      'G':begin { SRM }
		    msus.df := 7; msus.dt := 1;
		  end;
	      'H':begin { 9895 }
		    msus.dt := 4;
		  end;
	      'J',{ PRINTER }
	      'R':{ RAM }
		  escape(2);
	      'M':begin { internal mini }
		    msus.dt := 0;
		  end;
	      'N':begin { 8290X }
		    msus.dt := 5;
		  end;
	      'Q':begin { C280 }
		    msus.vol := dv; msus.un := du;
		  { must force disc access to determine sector size }
		  { will hang system if intlevel is too high }
		    if intlevel>2 then escape(2);
		    call(dam,uvid,fsunit,getvolumename);
		    if (ioresult<>0) or
		       (strlen(uvid)=0) or
		       (dvrtemp2<8) then escape(2)
		    else
		    if dvrtemp2=8 then msus.dt := 16
				  else msus.dt := 17;
		  end;
	      'S':begin { SCSI }
		    msus.dt := 14;
		  end;
	      'U':begin { 913X_A }
		    msus.dt := 7;
		  end;
	      'V':begin { 913X_B }
		    msus.dt := 8;
		  end;
	      'W':begin { 913X_C }
		    msus.dt := 9;
		  end;
	      otherwise
		escape(2);
	    end; { case }
	  end;
	end; { fsunit_msus }

    BEGIN { SYSBOOT }
      try
	bootrec.op1 := hex('1C0'); bootrec.op2 := 0;

	{ process the system name }
	name := strrtrim(strltrim(name));
	if strlen(name)>10 then escape(1); { bad system name }
	if name<>'' then
	begin
	  newname := '          ';
	  for i := 1 to strlen(name) do
	    newname[i] := name[i];
	end
	else newname := sysname;

	{ process the MSUS }
	newmsus := bootmsus; {default the MSUS}
	msus := strrtrim(strltrim(msus)); { trim leading & trailing blanks }
	mlen := strlen(msus);

	try
	  if (mlen>0) then
	  begin
	    if msus[1]='#' then
	    begin { file system unit }
	      if (mlen=2) or (mlen=3) then strread(msus,2,i,number)
				      else escape(2);
	      fsunit_msus(number,newmsus);
	    end
	    else
	    if msus[1]='$' then
	    begin  { constructed MSUS }
	      if mlen<>9 then escape(2); { must have 8 digits }
	      for i := 2 to 9 do
	      if not(msus[i] in ['0'..'9','A'..'F','a'..'f'])
		then escape(2);
	      for i := 2 to 9 do
	      begin
		if odd(i) then
		begin
		  number := (number*16)+chr_hex(msus[i]);
		  newmsus.bytes[i div 2] := chr(number);
		end
		else number := chr_hex(msus[i]);
	      end;
	    end
	    else
	    escape(2);
	  end;
	recover
	  if (escapecode = -10) or
	     (escapecode = -8) then escape(2) { bad MSUS }
			       else escape(escapecode);
       { process the lanid }
	try
	  if strlen(lanid)>0 then
	  begin
	    if strlen(lanid)<>12 then escape(3);
	    for i := 1 to 12 do
	      if not(lanid[i] in ['0'..'9','A'..'F','a'..'f'])
		then escape(3);
	    for i := 1 to 12 do
	    begin
	      if not odd(i) then
	      begin
		number := (number*16)+chr_hex(lanid[i]);
		if i=2 then
		  if odd(number) then escape(3); { can't be multicast }
		farea^[i div 2] := chr(number);
	      end
	      else number := chr_hex(lanid[i]);
	    end;
	  end;
	recover
	  if (escapecode = -10) or
	     (escapecode = -8) then escape(3) { bad LAN address }
			       else escape(escapecode);

	sysname := newname;
	bootmsus := newmsus;
	ci_switch;
	cache_mode(false);      { setup bootrom environment }
	call(bootrec.boot);
      recover
	begin
	  if (escapecode>0) and
	     (escapecode<4) then sysboot := escapecode
			    else escape(escapecode);
	end;
    END; { SYSBOOT }

END. { MODULE SYS_BOOT }


@


56.2
log
@
pws2rcs automatic delta on Wed Jan 27 11:57:27 MST 1993
@
text
@d1 215
@


56.1
log
@Automatic bump of revision number for PWS version 3.25
@
text
@a0 215
$MODCAL$
$ALLOW_PACKED ON$
$RANGE OFF$ $STACKCHECK OFF$

MODULE SYS_BOOT;
EXPORT
  TYPE
    string12 = string[12];
  function sysboot(name,msus,lanid:string12):integer;
IMPLEMENT
IMPORT SYSGLOBALS,ASM,IODECLARATIONS;
  function sysboot(name,msus,lanid:string12):integer;
    CONST
      hp98643 = 21;
    TYPE
      msus_type = packed record
		    case integer of
		    1:(df       : 0..7;         { directory format }
		       dt       : 0..31;        { device type }
		       unum     : byte;         { unit number }
		       scode    : byte;         { select code }
		       baddr    : byte);        { bus address }
		    2:(pad1     : byte;
		       vol      : 0..15;    { volume number }
		       un       : 0..15);   { unit number }
		    3:(bytes    : packed array [1..4] of char);
		  end;
      name_type = packed array [1..10] of char;
      lanid_type= packed array [1..6] of char;
      lanid_ptr = ^lanid_type;
    VAR
      bootmsus [hex('FFFFFEDC')] : msus_type;
      sysname  [hex('FFFFFDC2')] : name_type;
      farea    [hex('FFFFFED4')] : lanid_ptr;
      bootrec : record
		  case boolean of
		  false :( boot : procedure);
		  true  :( op1,op2 : integer);
		end;
      newmsus : msus_type;
      newname : name_type;
      i,
      mlen,
      number  : integer;

      { input is pre-filtered to be 0..9, A..F, a..f }
      function chr_hex(c:char):integer;
	begin
	  if (c>='0') and (c<='9') then chr_hex := ord(c)-ord('0')
	  else
	  if (c>='A') and (c<='F') then chr_hex := ord(c)-ord('A')+10
				   else chr_hex := ord(c)-ord('a')+10
	end; { chr_hex }

      procedure fsunit_msus(fsunit : unitnum; var msus : msus_type);
	begin
	  if (fsunit<0) or (fsunit>maxunit) then escape(2);
	  with unitable^[fsunit] do
	  begin
	    msus.df    := 0;
	    msus.scode := sc;
	    msus.baddr := ba;
	    msus.unum  := du;
	    case letter of
	      'B':begin { BUBBLE }
		    msus.dt := 22;
		  end;
	      'E':begin { EPROM }
		    msus.dt := 20;
		    msus.unum := dv;
		  { bootrom uses unit, table uses volume }
		  end;
	      'F':begin { 9885 }
		    msus.dt := 6;
		  end;
	      'G':begin { SRM }
		    msus.df := 7; msus.dt := 1;
		  end;
	      'H':begin { 9895 }
		    msus.dt := 4;
		  end;
	      'J',{ PRINTER }
	      'R':{ RAM }
		  escape(2);
	      'M':begin { internal mini }
		    msus.dt := 0;
		  end;
	      'N':begin { 8290X }
		    msus.dt := 5;
		  end;
	      'Q':begin { C280 }
		    msus.vol := dv; msus.un := du;
		  { must force disc access to determine sector size }
		  { will hang system if intlevel is too high }
		    if intlevel>2 then escape(2);
		    call(dam,uvid,fsunit,getvolumename);
		    if (ioresult<>0) or
		       (strlen(uvid)=0) or
		       (dvrtemp2<8) then escape(2)
		    else
		    if dvrtemp2=8 then msus.dt := 16
				  else msus.dt := 17;
		  end;
	      'S':begin { SCSI }
		    msus.dt := 14;
		  end;
	      'U':begin { 913X_A }
		    msus.dt := 7;
		  end;
	      'V':begin { 913X_B }
		    msus.dt := 8;
		  end;
	      'W':begin { 913X_C }
		    msus.dt := 9;
		  end;
	      otherwise
		escape(2);
	    end; { case }
	  end;
	end; { fsunit_msus }

    BEGIN { SYSBOOT }
      try
	bootrec.op1 := hex('1C0'); bootrec.op2 := 0;

	{ process the system name }
	name := strrtrim(strltrim(name));
	if strlen(name)>10 then escape(1); { bad system name }
	if name<>'' then
	begin
	  newname := '          ';
	  for i := 1 to strlen(name) do
	    newname[i] := name[i];
	end
	else newname := sysname;

	{ process the MSUS }
	newmsus := bootmsus; {default the MSUS}
	msus := strrtrim(strltrim(msus)); { trim leading & trailing blanks }
	mlen := strlen(msus);

	try
	  if (mlen>0) then
	  begin
	    if msus[1]='#' then
	    begin { file system unit }
	      if (mlen=2) or (mlen=3) then strread(msus,2,i,number)
				      else escape(2);
	      fsunit_msus(number,newmsus);
	    end
	    else
	    if msus[1]='$' then
	    begin  { constructed MSUS }
	      if mlen<>9 then escape(2); { must have 8 digits }
	      for i := 2 to 9 do
	      if not(msus[i] in ['0'..'9','A'..'F','a'..'f'])
		then escape(2);
	      for i := 2 to 9 do
	      begin
		if odd(i) then
		begin
		  number := (number*16)+chr_hex(msus[i]);
		  newmsus.bytes[i div 2] := chr(number);
		end
		else number := chr_hex(msus[i]);
	      end;
	    end
	    else
	    escape(2);
	  end;
	recover
	  if (escapecode = -10) or
	     (escapecode = -8) then escape(2) { bad MSUS }
			       else escape(escapecode);
       { process the lanid }
	try
	  if strlen(lanid)>0 then
	  begin
	    if strlen(lanid)<>12 then escape(3);
	    for i := 1 to 12 do
	      if not(lanid[i] in ['0'..'9','A'..'F','a'..'f'])
		then escape(3);
	    for i := 1 to 12 do
	    begin
	      if not odd(i) then
	      begin
		number := (number*16)+chr_hex(lanid[i]);
		if i=2 then
		  if odd(number) then escape(3); { can't be multicast }
		farea^[i div 2] := chr(number);
	      end
	      else number := chr_hex(lanid[i]);
	    end;
	  end;
	recover
	  if (escapecode = -10) or
	     (escapecode = -8) then escape(3) { bad LAN address }
			       else escape(escapecode);

	sysname := newname;
	bootmsus := newmsus;
	ci_switch;
	cache_mode(false);      { setup bootrom environment }
	call(bootrec.boot);
      recover
	begin
	  if (escapecode>0) and
	     (escapecode<4) then sysboot := escapecode
			    else escape(escapecode);
	end;
    END; { SYSBOOT }

END. { MODULE SYS_BOOT }


@


55.1
log
@Automatic bump of revision number for PWS version 3.25A
@
text
@@


54.1
log
@Automatic bump of revision number for PWS version 3.24
@
text
@@


53.1
log
@Automatic bump of revision number for PWS version 3.24B
@
text
@@


52.1
log
@Automatic bump of revision number for PWS version 3.24A
@
text
@@


51.1
log
@Automatic bump of revision number for PWS version 3.24d
@
text
@@


50.1
log
@Automatic bump of revision number for PWS version 3.23c
@
text
@@


49.1
log
@Automatic bump of revision number for PWS version 3.24b
@
text
@@


48.1
log
@Automatic bump of revision number for PWS version 3.24a
@
text
@@


47.1
log
@Automatic bump of revision number for PWS version 3.23
@
text
@@


46.1
log
@Automatic bump of revision number for PWS version 3.23
@
text
@@


45.1
log
@Automatic bump of revision number for PWS version 3.23C
@
text
@@


44.1
log
@Automatic bump of revision number for PWS version 3.23B
@
text
@@


43.1
log
@Automatic bump of revision number for PWS version 3.23aA
@
text
@@


42.1
log
@Automatic bump of revision number for PWS version 3.23e
@
text
@@


41.1
log
@Automatic bump of revision number for PWS version 3.23d
@
text
@@


40.1
log
@Automatic bump of revision number for PWS version 3.23c
@
text
@@


39.1
log
@Automatic bump of revision number for PWS version 3.23b
@
text
@@


38.1
log
@Automatic bump of revision number for PWS version 3.23a
@
text
@@


37.1
log
@Automatic bump of revision number for PWS version 3.3a
@
text
@@


36.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@@


35.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@@


34.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@@


33.2
log
@change from SYSPROG to MODCAL and moved the IMPORT to
the IMPLEMENT section to hide it from users
19 jan 89
RDQ

@
text
@@


33.1
log
@Automatic bump of revision number for PWS version 3.22D
@
text
@d1 1
a1 1
$SYSPROG$
a5 1
IMPORT SYSGLOBALS,ASM,IODECLARATIONS;
d11 1
@


32.2
log
@fixed scan/conversion of LAN address parameter.
changed cache turn off calls to use a new procedure
cache_mode so that TT0 is set correctly
RDQ 11 jan 89

@
text
@@


32.1
log
@Automatic bump of revision number for PWS version 3.22C
@
text
@d180 1
a180 1
	    for i := 2 to 13 do
d183 1
a183 1
	    for i := 2 to 13 do
d185 1
a185 1
	      if odd(i) then
d188 1
a188 1
		if i=3 then
d203 1
a203 2
	cache_off;
	icache_off;
@


31.1
log
@Automatic bump of revision number for PWS version 3.22B
@
text
@@


30.1
log
@Automatic bump of revision number for PWS version 3.22A
@
text
@@


1.2
log
@
pws2rcs automatic delta on Thu Dec  8 15:31:09 MST 1988
@
text
@@


1.1
log
@Initial revision
@
text
@d17 11
a27 11
                    case integer of
                    1:(df       : 0..7;         { directory format }
                       dt       : 0..31;        { device type }
                       unum     : byte;         { unit number }
                       scode    : byte;         { select code }
                       baddr    : byte);        { bus address }
                    2:(pad1     : byte;
                       vol      : 0..15;    { volume number }
                       un       : 0..15);   { unit number }
                    3:(bytes    : packed array [1..4] of char);
                  end;
d36 4
a39 4
                  case boolean of
                  false :( boot : procedure);
                  true  :( op1,op2 : integer);
                end;
d45 1
a45 1
      
d48 7
a54 7
        begin
          if (c>='0') and (c<='9') then chr_hex := ord(c)-ord('0')
          else
          if (c>='A') and (c<='F') then chr_hex := ord(c)-ord('A')+10
                                   else chr_hex := ord(c)-ord('a')+10
        end; { chr_hex }
      
d56 66
a121 66
        begin
          if (fsunit<0) or (fsunit>maxunit) then escape(2);
          with unitable^[fsunit] do
          begin
            msus.df    := 0;
            msus.scode := sc;
            msus.baddr := ba;
            msus.unum  := du;
            case letter of
              'B':begin { BUBBLE }
                    msus.dt := 22;
                  end;
              'E':begin { EPROM }
                    msus.dt := 20;
                    msus.unum := dv;
                  { bootrom uses unit, table uses volume }
                  end;
              'F':begin { 9885 }
                    msus.dt := 6;
                  end;
              'G':begin { SRM }
                    msus.df := 7; msus.dt := 1;
                  end;
              'H':begin { 9895 }
                    msus.dt := 4;
                  end;
              'J',{ PRINTER }
              'R':{ RAM }
                  escape(2);
              'M':begin { internal mini }
                    msus.dt := 0;
                  end;
              'N':begin { 8290X }
                    msus.dt := 5;
                  end;
              'Q':begin { C280 }
                    msus.vol := dv; msus.un := du;
                  { must force disc access to determine sector size }
                  { will hang system if intlevel is too high }
                    if intlevel>2 then escape(2);
                    call(dam,uvid,fsunit,getvolumename);
                    if (ioresult<>0) or
                       (strlen(uvid)=0) or
                       (dvrtemp2<8) then escape(2)
                    else
                    if dvrtemp2=8 then msus.dt := 16
                                  else msus.dt := 17;
                  end;
              'S':begin { SCSI }
                    msus.dt := 14;
                  end;
              'U':begin { 913X_A }
                    msus.dt := 7;
                  end;
              'V':begin { 913X_B }
                    msus.dt := 8;
                  end;
              'W':begin { 913X_C }
                    msus.dt := 9;
                  end;
              otherwise
                escape(2);
            end; { case }
          end;
        end; { fsunit_msus }
        
d124 51
a174 51
        bootrec.op1 := hex('1C0'); bootrec.op2 := 0;
        
        { process the system name }
        name := strrtrim(strltrim(name));
        if strlen(name)>10 then escape(1); { bad system name }
        if name<>'' then
        begin
          newname := '          ';
          for i := 1 to strlen(name) do
            newname[i] := name[i];
        end
        else newname := sysname;
        
        { process the MSUS }
        newmsus := bootmsus; {default the MSUS}
        msus := strrtrim(strltrim(msus)); { trim leading & trailing blanks }
        mlen := strlen(msus);
       
        try
          if (mlen>0) then
          begin
            if msus[1]='#' then
            begin { file system unit }
              if (mlen=2) or (mlen=3) then strread(msus,2,i,number)
                                      else escape(2);
              fsunit_msus(number,newmsus);
            end
            else
            if msus[1]='$' then
            begin  { constructed MSUS }
              if mlen<>9 then escape(2); { must have 8 digits }
              for i := 2 to 9 do
              if not(msus[i] in ['0'..'9','A'..'F','a'..'f'])
                then escape(2);
              for i := 2 to 9 do
              begin
                if odd(i) then
                begin
                  number := (number*16)+chr_hex(msus[i]);
                  newmsus.bytes[i div 2] := chr(number);
                end
                else number := chr_hex(msus[i]);
              end;
            end
            else
            escape(2);
          end;
        recover
          if (escapecode = -10) or
             (escapecode = -8) then escape(2) { bad MSUS }
                               else escape(escapecode);
d176 30
a205 30
        try
          if strlen(lanid)>0 then
          begin
            if strlen(lanid)<>12 then escape(3);
            for i := 2 to 13 do
              if not(lanid[i] in ['0'..'9','A'..'F','a'..'f'])
                then escape(3);
            for i := 2 to 13 do
            begin
              if odd(i) then
              begin
                number := (number*16)+chr_hex(lanid[i]);
                if i=3 then
                  if odd(number) then escape(3); { can't be multicast }
                farea^[i div 2] := chr(number);
              end
              else number := chr_hex(lanid[i]);
            end;
          end;
        recover
          if (escapecode = -10) or
             (escapecode = -8) then escape(3) { bad LAN address }
                               else escape(escapecode);
           
        sysname := newname;
        bootmsus := newmsus;
        ci_switch;
        cache_off;
        icache_off;
        call(bootrec.boot);
d207 5
a211 5
        begin
          if (escapecode>0) and
             (escapecode<4) then sysboot := escapecode
                            else escape(escapecode);
        end;
@
