I was motivated enough :-)
--> Success !!!
I realized how easy it would be to fix the corruption.
while studying the CP/M-68K executable format in the hope
to find a quick way to automate the process.
1) Only 01ah bytes were deleted
2) Only the last position in an 128 byte block was affected
Finding the positions was relatively easy by converting every file
into a single byte per line form with "xxd -c1", then using the
byte pattern 4eh as a guide
68000 is big endian, 4e75h is the opcode for "RTS", and
the first byte of it is found often enough in binaries.
If the pattern appeares on an odd address, then a deletion
must have happend on one of the few block boundaries before.
I started with the files in "ERG_68K_Fortran_2p1a" with very
few deletions, and a few hours later ...
I made the following diffs by converting every file with
"xxd -p -c1", the line numbers also are byte offsets.
As noted above, every 1ah is inserted as the last
byte of an 128 byte block.
diff CODE0.REL.xxd CODE.REL.xxd
10879a10880
> 1a
39934a39936
> 1a
diff FORTRAN0.REL.xxd FORTRAN.REL.xxd
57471a57472
> 1a
diff FTNLIB0.OBJ.xxd FTNLIB.OBJ.xxd
47103a47104
> 1a
diff PASLIB0.OBJ.xxd PASLIB.OBJ.xxd
45311a45312
> 1a
diff ULINKER0.REL.xxd ULINKER.REL.xxd
6143a6144
> 1a
13822a13824
> 1a
Here is a session compiling and running "example.for".
$ ./cpmsim -a transfer.img
Read 32768 bytes from boot track
CP/M-68K(tm) Version 1.2 03/20/84
Copyright (c) 1984 Digital Research, Inc.
CP/M-68K BIOS Version 1.0
Simulated system of April 2014
TPA =16251 K
C>AUTOST.SUB
C>INIT.REL M
Do you really want to init disk M ?
C>a:
A>dir
A: EXAMPLE FOR : F SUB
A>
A>
A>type f.sub
c:fortran.rel $1.for
c:code.rel $1.i
c:ulinker.rel -l $1.o $1.obj c:ftnlib.obj c:paslib.obj
era $1.obj
c:lo68 -s -o $1.68k -t10100 c:s.o $1.o c:clib
A>f example
A>C:FORTRAN.REL EXAMPLE.FOR
MC68000 Fortran77 Compiler V2.1 01-Dec-83
(C) Copyright 1983 Silicon Valley Software, Inc.
EXAMPL [16522260 bytes]
{16521484 bytes}
0 errors. 25 lines. File example.for
Smallest available space: 16522260 bytes.
A>C:CODE.REL EXAMPLE.I
MC68000 Code Generator V2.1 01-Dec-83
(C) Copyright 1983 Silicon Valley Software, Inc.
EXAMPL - EXAMPL Code size = 570
Total code size = 570
A>C:ULINKER.REL -L EXAMPLE.O EXAMPLE.OBJ C:FTNLIB.OBJ C:PASLIB.OBJ
MC68000 CPM Object Code Formatter V2.1 01-Dec-83
(C) Copyright 1983 Silicon Valley Software, Inc.
A>ERA EXAMPLE.OBJ
A>C:LO68 -S -O EXAMPLE.68K -T10100 C:S.O EXAMPLE.O C:CLIB
A>example
[...]
***********************************************
***********************************************
** **
** FORTRAN-77 is correctly installed !! **
** **
***********************************************
***********************************************
[...]
A>c:bbye
CP/M-68K terminating normally