{$A+,B-,D+,E+,F-,G+,I+,L+,N-,P-,Q-,R-,S+,T-,V-,X+,Y+}
{$M 16384,0,0}
uses
 dos;

function blockload(var f:file;var target;n:word):boolean;
type
 a=array[0..0] of byte;
var
 r:word;
 i:word;
begin
 if n<>0 then begin
  {$i-}
  if ioresult=0 then;
  blockread(f,target,n,r);
  blockload:=(r=n)and(ioresult=0);
  for i:=0 to n-1 do a(target)[i]:=a(target)[i] xor lo(i) xor $be;
  {$i+}
 end else blockload:=true;
end;

function blocksave(var f:file;var target;n:word):boolean;
type
 a=array[0..0] of byte;
var
 i,
 r:word;
begin
 if n<>0 then begin
  {$i-}
  if ioresult=0 then;
  for i:=0 to n-1 do a(target)[i]:=a(target)[i] xor lo(i) xor $be;
  blockwrite(f,target,n,r);
  for i:=0 to n-1 do a(target)[i]:=a(target)[i] xor lo(i) xor $be;
  blocksave:=(r=n)and(ioresult=0);
  {$i+}
 end else blocksave:=true;
end;

function RomSumme:longint;
var
 seg:word;
 t:longint;
 i:word;
begin
 t:=0;
 seg:=sega000+selectorinc*6;
 for i:=0 to 4095 do t:=t xor meml[seg:$8000+i*4];
 RomSumme:=t;
end;

var
 p,n,x:string;
 f:file;
 rs:longint;
begin
 fsplit(paramstr(0),p,n,x);
 assign(f,p+'\planets.exe');
 reset(f,1);
 seek(f,filesize(f)-4);
 blockload(f,n[1],4);
 n[0]:=#4;
 if n<>'BiOs' then begin
  n:='BiOs';
 end else begin
  seek(f,filesize(f)-8);
 end;
 rs:=romsumme;
 blocksave(f,rs,4);
 blocksave(f,n[1],4);
 writeln('Planets.EXE wurde mit neuer ROM-Summe versehen.');
end.