Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

STRANGE COMPILER ERROR PROSPERO FORTRAN CP/M-80

651 views
Skip to first unread message

plo...@gmail.com

unread,
Mar 6, 2023, 7:15:40 PM3/6/23
to
Hi all, I installed the Vdos emulator on my pc (Windows 10 pro 64b) and the Z80EMU emulator inside Vdos to have a CP/M-80 environment. It all works fine. I then created a directory C:\PROSPERO in Z80EMU and copied all the Prospero PRO Fortran v. compiler files. zz 1.2 (cp/m-80 version). I tried compiling various .FOR sources and everything worked fine. I then created a simple COMPLEX.FOR program where I defined 3 variables A, B, Z of type complex and then I made the simple sum Z=A+B and then printed the result. When I launch the PROFOR compiler COMPLEX.FOR appears after Pass 1 without errors, Pass2 which gives me "Error C at address 1D5F" Continue Y/N?. This happens only if in the program there are arithmetic operations (+,-,*,/) between complex variables, if in the program operations of addition, subtraction, multiplication or division are not performed between complex variables, but all the other mathematical operations and trigronometric functions on complex variables everything compiles fine. The error appears only if there are basic arithmetic operations. Any help and suggestion is welcome from all.
PROGRAM COMPLE
IMPLICIT REAL (A-H,O-Z)
COMPLEX A,B,Z
Z = (0.0, 0.0)
A = (3.5, 3.5)
B = (4.0, 5.0)
Z = B + A
WRITE(1,10) A, B, Z
10 FORMAT(1H ,2F11.3,2H ,2F11.3,2H ,2F11.3)
PAUSE
STOP
END

Nils M Holm

unread,
Mar 7, 2023, 5:26:10 AM3/7/23
to
plo...@gmail.com <plo...@gmail.com> wrote:
> 10 FORMAT(1H ,2F11.3,2H ,2F11.3,2H ,2F11.3)

It is probably unrelated, but I see two 2H with only one
subsequent blank here.

--
Nils M Holm < n m h @ t 3 x . o r g > http://t3x.org

plo...@gmail.com

unread,
Mar 8, 2023, 4:23:21 AM3/8/23
to
Thanks Nils,
But that's just my transcription error of the source. The strange thing is that in the package there is an executable file FCHECK.com which is used to check all the files in the package and when I run it, all the files are OK! that is, intact... It is very strange.

Андрей Никитин

unread,
Mar 11, 2023, 2:39:13 PM3/11/23
to
среда, 8 марта 2023 г. в 12:23:21 UTC+3, plo...@gmail.com:
Is it possible to download this compiler from the Internet. If possible please send me a link to where I can do it.

Best regards
Andrey Nikitin

plo...@gmail.com

unread,
Mar 14, 2023, 8:22:07 PM3/14/23
to

plo...@gmail.com

unread,
Mar 14, 2023, 8:23:54 PM3/14/23
to
Il giorno sabato 11 marzo 2023 alle 16:39:13 UTC-3 Андрей Никитин ha scritto:
https://drive.google.com/drive/folders/1ms1yidXdQswVCvs0yU63sCnLTX6HhzKr?usp=sharing

Андрей Никитин

unread,
Mar 15, 2023, 9:12:57 AM3/15/23
to
среда, 15 марта 2023 г. в 03:23:54 UTC+3, plo...@gmail.com:
Thanks for the link to the compiler.
This compiler is less common among CP/M users and almost unavailable. It is a pity that there is no user manual for it.
I was able to compile the test programs and get object files, but I could not get executable files out of them. When I run the linker and specify an object file name and then a library name, the program crashes. Maybe you have solved this problem in some other way, and generate an executable file. I will be happy to get any information on this matter.

regards,
Andrey

Plo

unread,
Mar 16, 2023, 7:22:41 AM3/16/23
to
Hi Andrey,
I want to verify that the files I uploaded in the folder are correct...then I'll let you know...

Plo

unread,
Mar 16, 2023, 10:32:44 AM3/16/23
to
I have inserted the ProsFor.rar file which contains the complete compiler and linker files. To compile:>PROFOR and follow compiler prompts. For the LINKER :>Prolink and follow the linker requests (xxx1.rel,xxx2.rel....,FORLIB.rel) The COMPLEX.FOR source generates an incomprehensible error during the PASS 2 of the compiler and if you always confirm to go to the end of the compilation and then do the LINK you will notice that when you run the complex.com executable which sums A+B=C and prints , it doesn't calculate the sum... very strange...

fridtjof.ma...@gmail.com

unread,
Mar 16, 2023, 1:06:52 PM3/16/23
to
Andrey

Played with this: (on CP/M emulator -- haven't tried on "real" CP/M 2.2 yet):

: fred@llana prospero $; cpm profor

Pro Fortran Compiler - Version zz 1.2
Copyright (C) 1983 Prospero Software
Serial No: 63

Source filename - maze.for

Source listing ? (Y/N/.) Y
Map ? (Y/N/.) Y
Compact object code ? (Y/N/.) N
Restricted-width integer arithmetic ? (Y/N/.) N
Maintain source line numbers at run time ? (Y/N/.) Y
Range checks on subscripts ? (Y/N/.) N
Range checks on assignments ? (Y/N/.) N
Hold before .REL output ? (Y/N/.) Y
Accept only ANSI Standard Fortran ? (Y/N/.) N
Console output to .LOG file ? (Y/N/.) Y

NOTE: looks like just running the profor.com without command line arguments prompts for arguments.

Pass 1

Unit MAZE
17726 bytes free at end

Pass 2

Holding for REL - press any key to continue


Unit: Code: Data:

MAZE 3372 1385

Total source lines: 226

23378 bytes free at end

NOTE: Two compile passes! Yeah us!

: fred@llana prospero $; dir
copytx.for forlib.rel maze.for maze.prn profor2.com prolib.com
fcheck.com g1lib.mac maze.log maze.rel profor.com prolink.com
fconfig.com g2lib.mac maze.map prime.for profor.err read.me

NOTE: and we see maze.log, maze.map maze.prn and maze.rel have been generated. If we display maze.log:

: fred@llana prospero $; cat maze.log

Options: LMNHG

Pass 1

Unit MAZE
17726 bytes free at end

Pass 2

Holding for REL - press any key to continue

Unit: Code: Data:

MAZE 3372 1385

Total source lines: 226

23378 bytes free at end
�: fred@llana prospero $;

NOTE: We see that the compiler likely supports LMNHG switches.
Most likely one letter for each question... by running 10 times we could find out which switch is for each question!

NOTE: Now, we link. The compiler supports MAC files, so Microsoft M80, and comes with FORLIB.REL (not the same as Microsoft FORLIB.REL). So, I decided to try to link with L80:
: fred@llana prospero $; l80

Link-80 3.44 09-Dec-81 Copyright (c) 1981 Microsoft

*maze
Data 0103 1398 < 4757>

-$BMUL 095B -$DENT 06AC -$DEXI 06D5
-$DIN 06DE -$DSLIN 1394 -$EFMT 1383
-$EIRF 08BE -$EIWF 1386 -$ERFI1 08C5
-$ETRF 08C8 -$ETWF 1389 -$EUNIT 137C
-$EWFR 1339 -$GCGT 0E61 -$GINIT 06DB
-$HBNG 0BF7 -$HBPS 069A -$HBZR 12A9
-$HINVS 136D -$HST4T 12F1 -$LDEC 0B8E
-$LINC 1027 -$RFLT 06C6 -$RMUL 06C9
-$TRUNC 06CE -$WWMUL 1295 -RANDOM 06BA
27 Undefined Global(s)
48837 Bytes Free

*forlib/s

*maze/n/e

Data 0103 3248 <12613>

39888 Bytes Free
[06D7 3248 50]

NOTE: And we end up with MAZE.COM!!! Yeah us!

NOTE: And, the COM file is runnable:

: fred@llana prospero $; cpm maze


THIS PROGRAM WILL PRINT OUT A DIFFERENT MAZE EVERY TIME IT
IS RUN AND GUARANTEES ONLY ONE PATH THROUGH. YOU CAN
CHOOSE THE DIMENSIONS OF THE MAZE, I.E. THE NUMBER OF
SQUARES LONG AND THE NUMBER OF SQUARES WIDE.
A 25 BY 25 MAZE IS THE MAXIMUM, AND ANY DIMENSIONS UP TO
THESE LIMITS ARE O.K.

LENGTH: 10
...SNIP...

Notes: The PRN (listing) file correlates line number with object code address -- useful if
we want the code productions. The MAP file produces a variable map - name/kind/type/offset
These could be very useful if debugging.

Questions:

1 - Can Prospero be linked with Microsoft FORLIB.REL? If this is done, what is the result?
2 - Related to (1), Microsoft never supported COMPLEX, could this be the root of the problem?
3 - I do not see names for compiler aid functions that make sense (from a Microsoft perspective.
This leads me to think that Microsoft FORLIB.REL and Prospero FORLIB.REL are not compatible.
4 - From file PROFOR.ERR, we see:

223Illegal type mixture with COMPLEX
224COMPLEX expression in arithmetic IF
225COMPLEX operand in relational expression
234DATA: illegal occurrence of COMPLEX type
236Assignment: illegal use of COMPLEX type
320Error in COMPLEX constant

So,COMPLEX support appears somewhat special (error 223). *When/If* I get time, I will scratch further
(Note that I am not bothering with PROLINK or PROLIB)

Андрей Никитин

unread,
Mar 16, 2023, 2:09:25 PM3/16/23
to
четверг, 16 марта 2023 г. в 20:06:52 UTC+3, fridtjof.ma...@gmail.com:
I tried to run Pro Fortran Compiler - Version zz 1.2 under several CP/M emulators:
1.cpm
2.iz-cpm
3.zxcc
4. tnylpo
5. RunCPM

Initially, I decided to check the correctness of the distribution files from the point of view of the FCHECK.COM program.
Only two emulators (iz-cpm and zxcc) were able to execute the program and both reported that all files were checked successfully.

Previously, I have successfully used these emulators to run programs for CP / M and did not encounter obvious errors in their work. From the results, I concluded that Pro Fortran Compiler programs are more picky about the runtime environment and, if they work, then only under the control of some of the emulators.

I tested further with iz-cpm. It emulated the CP/M environment better than others, and there were fewer errors when running programs to compile source codes.

In the absence of a user manual, it is difficult to find the necessary command line options expected by the compiler. Compilation takes place in several passes. The PROFOR.COM program reads the source file and starts processing it, creating intermediate files as output. This is the first pass. After completion of this stage, the program of the second pass PROFOR2.COM is automatically called, which reads the intermediate files created on the first pass and tries to create an object file from them with the code of the program to be compiled. The extension of the object file is .REL, and the file name corresponds to the name of the file with the source code of the program being compiled. At this point in my research, I've only tried to compile one Fortran file. Moreover, a very simple file that the compiler has to deal with. I used the source code of the COMPLEX.FOR program in which I changed the type of variables A, B and Z from COMPLEX to REAL, assigned values to variables A and B, and adjusted the FORMAT statement with label 10 to display variables of type REAL.
After that, I started compiling the modified file using the following command:

bash-3.2$ iz-cpm profor.com

Pro Fortran Compiler - Version zz 1.2
Copyright (C) 1983 Prospero Software
Serial No: 63

Source filename - complex1.for

Source listing ? (Y/N/.) y
Map ? (Y/N/.) y
Compact object code ? (Y/N/.) n
Restricted-width integer arithmetic ? (Y/N/.) n
Maintain source line numbers at run time ? (Y/N/.) n
Range checks on subscripts ? (Y/N/.) n
Range checks on assignments ? (Y/N/.) n
Hold before .REL output ? (Y/N/.) n
Accept only ANSI Standard Fortran ? (Y/N/.) n
Console output to .LOG file ? (Y/N/.) y


Pass 1

Unit COMPLE
16675 bytes free at end

Pass 2

Unit: Code: Data:

COMPLE 146 12

Total source lines: 17

22050 bytes free at end

Link ? (Y/N) y

Pro Pascal Linker - Version zz 1.6
Copyright (C) 1982 Prospero Software
Serial No: 63

Linking:
complex1.REL
FORLIB.REL

Data: 0103 18D1
Program: 0103 18D1
Start address: 010F

Executable file: complex1.COM
bash-3.2$

The PROFOR.COM program asked me for the name of the program to be compiled, performed the first and second passes, and asked me if I should link the executable program. After an affirmative answer, the linker program was called and created an executable file from the object file and the FORLIB.REL library. As a result, an executable file of the program was created, which added the values of variables A and B, assigned the result to variable Z, and successfully printed this data.

With a very simple program, the compiler coped quite successfully.

The next program to be tested was the MAZE.FOR file from the compiler distribution kit. Although the source file was successfully checked by the FCHECK.COM program, running the PROFOR.COM program only resulted in two compilation passes and only the creation of the MAZE.REL object file. For some unknown reason, the link request for the executable was not received.

I decided to test the compiler with the other two Fortran programs from the distribution.

Compiling the COPYTX.FOR program completed all the necessary steps and created an executable file that, when run, asked for an input file name, then an output file name, and successfully copied the input file into a new file.

When the PRIME.FOR program was compiled, again only the object file was created. To create MAZE.COM and PRIME.COM executables, will most likely need to invoke the linker program separately.
However, at this stage, luck turned away from me. Calling the PROLINK.COM program and specifying the object and library files as input resulted in an error message:

bash-3.2$ iz-cpm prolink.com

Pro Pascal Linker - Version zz 1.6
Copyright (C) 1982 Prospero Software
Serial No: 63

Separate program and data areas ? (Y/N) n
Map ? (Y/N) n
Filename(s) - prime.rel
Linking:
prime.rel
Filename(s) - forlib.rel
Linking:
forlib.rel
$GIRST : Multiply-defined entry
bash-3.2$

First intermediate conclusions and results obtained

1. For some reason, the compiler on my computer works more or less normally only with the iz-cpm emulator.
2, When generating the executable code, the instructions of the z80 processor are used.
3. Not every program automatically calls the executable linker.
4. To create an executable program, it may be necessary to specify the library name forlib.rel in some other form.
5. The forlib.rel library is not compatible with the one from the MicroSoft compiler.
6. Object files with the .rel extension use a structure and format similar to that of MicroSoft.
7. Perhaps instead of the prolink.com and prolib.com programs, you can use similar programs from the MicroSoft compiler.
8. The Pro Fortran compiler does not support the BYTE data type, but it is partially able to use variables with the COMPLEX type.
9. Compared to the compiler, MicroSoft has more advanced options for checking the program operation at the execution stage.

Andrey Nikitin

fridtjof.ma...@gmail.com

unread,
Mar 16, 2023, 2:22:40 PM3/16/23
to
I confirm your error:

Error C at address 1D5F
Continue ? (Y/N) y

FCHECK seems to like the compiler parts
: fred@llana prospero $; cpm fcheck

PROFOR2.COM - checks OK

PROFOR.ERR - checks OK

FORLIB.REL - checks OK

FCONFIG.COM - checks OK

G1LIB.MAC - checks OK

G2LIB.MAC - checks OK

PRIME.FOR - checks OK

COPYTX.FOR - checks OK

MAZE.FOR - checks OK


Is it possible that COMPLEX support is simply "not there"?

: fred@llana prospero $; cat complex.map
Pro Fortran Compiler - Version zz 1.2

Map of: complex.FOR



****************
* Unit COMPLE *
****************

Name Kind Type Area Offset

A Variable Comp Data 0008 (8)
B Variable Comp Data 0010 (16)
Z Variable Comp Data 0000 (0)


Sizes:-

Data 0018 (24)


So, the MAP file indicates that complex is there... 8 bytes is correct. I thought that maybe the IMPLICIT was interfering, and that's not it. Nor is it the variable layout - commenting out Z = makes A 0, B 8 and Z 16 (offset). Same error.

Plo

unread,
Mar 16, 2023, 3:19:41 PM3/16/23
to
Why doesn't the compiler (PROFOR2) give an error with exponential complex function? In the algebraic sum Z=A+B it gives the error!! I can't understand this...
PROGRAM COMPLE
IMPLICIT REAL (A-H,O-Z)
COMPLEX A,B,Z
C Z = CMPLX(0.0, 0.0)
A = CMPLX(3.5, 3.5)
B = CMPLX(4.0, 5.0)
Z = B**2
WRITE(1,10) A, B, Z
10 FORMAT(1H ,2F11.3,2H ,2F11.3,2H ,2F11.3)
PAUSE
STOP
END
No compiler error!!!
++++++++++++++++++++++++++++++
Pass 2
Unit: Code: Data:
COMPLE 153 24
Total source lines 12
Prolink.........
Linking:
COMPLEX.REL
FORLIB.REL
Data:.......
...............
..............
Executable File: COMPLEX.COM

>COMPLEX
3.500 3.500 4.000 5.000 -9.000 40.000
A complex B complex Z=B**2 EXACT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Why??????????????????????

Plo

unread,
Mar 16, 2023, 3:23:43 PM3/16/23
to
C Z = CMPLX(0.0, 0.0) Comment in column 1 ==>>...... C Z=CMPLX(0.0, 0.0)

fridtjof.ma...@gmail.com

unread,
Mar 16, 2023, 4:13:37 PM3/16/23
to
And, just for fun - the error is in both COMPLEX + COMPLEX *and* COMPLEX + REAL. Now, I am "nerd-sniped"

Plo

unread,
Mar 16, 2023, 7:32:48 PM3/16/23
to
Strangely, the compile error "pass 2" DOES NOT APPEAR only when there is only one intrinsic function of a only complex variable i.e. Csin(z), Ccos(z), z**constant, etc. etc, when there are two or more complex operands, then the error appears!!!!

Plo

unread,
Mar 16, 2023, 7:39:01 PM3/16/23
to
I'm going crazy!!!!! And I'm sorry because it's the only Fortran Compiler under CP/M-80 with COMPLEX data Type

ladislau szilagyi

unread,
Mar 17, 2023, 3:10:27 AM3/17/23
to
Perhaps this would help: I found a link for the PROSPERO PROFORTRAN manual : http://www.dilwyn.me.uk/language/ProsperoQlFortran77UM3.pdf

Ladislau

Plo

unread,
Mar 17, 2023, 5:44:37 AM3/17/23
to
Thank-You!!!

fridtjof.ma...@gmail.com

unread,
Mar 17, 2023, 11:49:17 AM3/17/23
to
The SuperSoft FORTRAN (version 3.2) supports COMPLEX as well. But I would love to see the Prospero FORTRAN "brought back to life"

Mark Lougheed

unread,
Mar 18, 2023, 1:59:18 PM3/18/23
to

> > I'm going crazy!!!!! And I'm sorry because it's the only Fortran Compiler under CP/M-80 with COMPLEX data Type
> The SuperSoft FORTRAN (version 3.2) supports COMPLEX as well. But I would love to see the Prospero FORTRAN "brought back to life"

+1 with regard to SuperSoft FORTRAN - For Z-80. I don't recall an 8080 targeted CP/M-80 FORTRAN compiler that had COMPLEX data types - certainly not Microsoft F-80 or Nevada FORTRAN.
http://www.z80.eu/for-compiler.html

Plo

unread,
Mar 19, 2023, 6:43:00 PM3/19/23
to
There is also a version of Prospero PRO Fortran CP/m-80 specific for Amstrad CPC9512 which is distributed with the same files and which works perfectly without any compilation errors under CP/M-80. But if I try to use the compiler in my Z80 CP/m emulator it tells me that the pc is not Amstrad PC!!!! and exits compilation. The files are the same as the generic CP/M-80 distribution. If you want to have fun, install the Amstrad Jocelyne emulator and after booting with the CP/M image disks and loading the PRO FORTRAN fortran compiler on disk B: and run the compilation of the same source COMPLEX.FOR everything works!!! But only for Amstrad !!!!
You can find everything in my previous link..... https://drive.google.com/drive/folders/1ms1yidXdQswVCvs0yU63sCnLTX6HhzKr?usp=share_link

ladislau szilagyi

unread,
Mar 20, 2023, 3:34:31 AM3/20/23
to
(@Plo)

Hi,

it seems that the Amstrad Fortran runs only on CPM 3...

A quick check of the code ( PROFOR.COM ) shows that there is code that checks this:

sub_8aadh:
ld c,00ch ;8aad GET CP/M VERSION
call 00005h ;8aaf
cp 030h ;8ab2 COMPARE WITH 3
jr c,l8ac8h ;8ab4 IF LESS, ISSUE ERROR MESSAGE: "This is Amstrad version"

l8ac8h:
ld c,009h ;8ac8
ld de,l8ad3h ;8aca SEE BELOW THE ERROR MESSAGE
call 00005h ;8acd
jp 00000h ;8ad0

8AD0 : C3 00 00 54 68 69 73 20 69 73 20 41 6D 73 74 72 : ...This is Amstr
8AE0 : 61 64 20 76 65 72 73 69 6F 6E 24 00 00 00 00 00 : ad version$.....

Ladislau

Plo

unread,
Mar 20, 2023, 6:04:19 AM3/20/23
to
Wonderful analysis!!!
Is it possible to disassemble Amstrad's PROFOR.COM and remove the version check? It would be a resounding success to be able to use it also on other platforms and versions of CP/M-80!!!

Josef Möllers

unread,
Mar 20, 2023, 6:15:10 AM3/20/23
to
You can always replace at least the "jr c,l8ac8h" with two NOPs to
neverever jump to the error message. BTDT(*)

Josef

(*) When I got my SB180FX, I wanted to add a hard disk (10MB!!!!!
Yeah!") which I bought second-hand from my employer. Unfortunately the
formatting program refused to format the disk, so I assumed it was
defective and gave it back in exchange for another one, which ... also
did not work. An analysis of the formatting program revealed that it
first checked the existing format and refused to format the disk it it
didn't have 512 byte sectors ;-) I then just over-wrote the check with
NOPs and ... voila ... the disk was successfully formatted to 512
bytes/sector.

ladislau szilagyi

unread,
Mar 20, 2023, 7:08:50 AM3/20/23
to
Hi,

I tried to patch the PROFOR.COM, the message "This is Amstrad version" is not more displayed...

... but another message is displayed instead: "Bad copy of program".

It seems that the authors of the code used some sort of checksum control...

The only correct way to fix this is to disassemble all and remove the unwanted code... but this is not so simple as it looks.

Ladislau

Plo

unread,
Mar 20, 2023, 3:28:09 PM3/20/23
to
Since it is the PROFOR2.com file that generates the error on algebraic operations with the COMPLEX data type i.e. Pass 2, and the error is always at the same address: Pass 2 error C at address 1D5F perhaps comparing the two versions of PROFOR2.com at that address you could correct the error... Since I'm ignorant of assembly language... and maybe therefore I'm talking nonsense... but I think that the 1D5F address could be the key to the solution to the problem

Plo

unread,
Mar 20, 2023, 3:34:21 PM3/20/23
to
Or is this address referred to the MAP file of the relocatable obj file?

Plo

unread,
Mar 27, 2023, 2:44:43 PM3/27/23
to
Hi all, finally the problem is solved...The member of these two forums, Martin Hepperle, found a brilliant and perfectly working solution, here are the two links to the solution...
https://forum.vcfed.org/index.php?threads/strange-compiler-error-prospero-fortran-cp-m-80.1241152/
https://forum.classic-computing.de/forum/index.php?thread/28785-strange-compiler-error-prospero-fortran-cp-m-80/&postID=406897#post407059
Greetings to all...

Mark Lougheed

unread,
Mar 27, 2023, 3:32:06 PM3/27/23
to
> Hi all, finally the problem is solved...The member of these two forums, Martin Hepperle, found a brilliant and perfectly working solution, here are the two links to the solution...
> https://forum.vcfed.org/index.php?threads/strange-compiler-error-prospero-fortran-cp-m-80.1241152/
> https://forum.classic-computing.de/forum/index.php?thread/28785-strange-compiler-error-prospero-fortran-cp-m-80/&postID=406897#post407059
> Greetings to all...


Pardon me for the brief diversion...

Martin Hepperle? THE Martin Hepperle of JavaFoil and JavaProp fame, legend and song?

My hat is off!

MDL

Plo

unread,
Mar 27, 2023, 4:24:39 PM3/27/23
to
I don't know him personally, but I can tell you that he is a very knowledgeable and professional person in machine language programming and high level languages...

fridtjof.ma...@gmail.com

unread,
Mar 29, 2023, 5:03:04 PM3/29/23
to
With new new profor2.com, fcheck.com fails. Find attached a new fcheck.com that takes the new profor2.com

fridtjof.ma...@gmail.com

unread,
Mar 29, 2023, 5:06:00 PM3/29/23
to
On Monday, March 27, 2023 at 4:24:39 PM UTC-4, Plo wrote:
And I failed to attach: here it is - save as fcheck.hex then "load fcheck" to make new fcheck.com

:10010000C36D06D4191C1A2C1B641A084D415A459C
:100110002E464F524F524D0000DA0E001A7723132D
:1001200049DE260228000000000000000000000058
:1001300000000000000000000000000B50524F467D
:100140004F52322E434F4D0000001C01269C4C1F85
:100150000A50524F464F522E455252000000002C7A
:1001600000F490AA030A464F524C49422E52454C85
:10017000000000004C011BEC5A1D0B46434F4E463D
:1001800049472E434F4D0000003800A3AF990509A1
:1001900047314C49422E4D414300000000001600FB
:1001A000BF915B010947324C49422E4D414300004B
:1001B00000000026000DB73D02095052494D452E62
:1001C000464F520000000000080029F47D000A4359
:1001D0004F505954582E464F520000000008001B43
:1001E000447B00084D415A452E464F520000000006
:1001F0000000280049DE2602000000000000000088
:1002000000000000000000000000000000000000EE
:1002100000000000000000000000000000000000DE
:1002200000000000000000000000000000000000CE
:1002300000000000000000000000000000000000BE
:1002400000000000000000000000000000000000AE
:10025000000000000000000000000000000000009E
:10026000000000000000000000000000000000008E
:10027000000000000000000000000000000000007E
:10028000000000000000000000000000000000006E
:10029000000000000000000000000000000000005E
:1002A000000000000000000000000000000000004E
:1002B000000000000000000000000000000000003E
:1002C000000000000000000000000000000000002E
:1002D000000000000000000000000000000000001E
:1002E0000900CDD914FE08010000210000CD23151E
:1002F0002001210000222401210701E5218000E5E1
:10030000210B01CD7F07CD3B09210701E5218000AD
:10031000E5CDDA082A0701E5CD470BEE011F305283
:100320003E000640DD7082DD7783ED4B20012A22FE
:1003300001E5C52A0701E5CDA20BE5DD7E836F1738
:100340009F6729D1195E2356EB444D26006CCD2EB4
:1003500011ED432001222201DD7E833CDD3582C286
:1003600027032A2401232224012A0701E5CD9B0A21
:1003700018A2C30815CDD914FD09CDBD07CDF307CB
:10038000DD3684012A0901E5CD470BEE011FD2D8E5
:1003900004CDB6072A0901E5CDE907210B01E53EA9
:1003A00014F5CD3D08CDF3073A0B01F53E00C1B879
:1003B0003E0017F53A0C01FE20CDC014C1A01F303D
:1003C0000F210B01E53E01F53E01F5CDA01218D835
:1003D000CDB007210B01CD7F073E0EF5CD8908CDAD
:1003E000F307210B01CD7F07CD0F091FD2AC04CD40
:1003F000E202DD7E846F179F67011500CD30121178
:10040000260119DD7582DD7483E5210B01CD7F079F
:10041000CD4C14E13E0ECD3814DD6E82DD668311C5
:100420000F0019E52A2401EBE1732372DD6E82DDF2
:10043000668311110019E5CD12152001CD2C15CDC3
:10044000BD072A2401444DCB14ED62E5C53E05F5F8
:10045000CD2307CD12152001E5C53E0CF5CD2307B0
:10046000CDF307DD7E8432E002DD7E84FE14ECB83D
:1004700014F27D04DD7E843CDD7784182DCDBD072C
:10048000CD9B04546F6F206D616E79206E616D6538
:100490007320666F72206172726179CD7A07183E9F
:1004A00000F5CD8908CDF307182E1823CDBD07CD53
:1004B000C20420202D20206E6F7420707265736539
:1004C0006E74CD7A07103E00F5CD8908CDF307CDC7
:1004D000BD07CDF307C38403C30815CDD914FE0AA5
:1004E000DD7E856F179F67011500CD301211260143
:1004F00019DD7582DD7483CD7F07210B013E14CD9C
:100500003814CDB007210B01CD7F073E0EF5CD8904
:1005100008CDF307210B01CD7F07CD0F091FD24175
:1005200006CDE202DD6E82DD6683110F00194E23D7
:10053000462A2401B7ED42CDC014F5CD1215200195
:10054000E5C5DD6E82DD668311110019CD1915CD6B
:10055000B711CDC014C1A01F3024CDBD07CD6E058D
:1005600020202D2020636865636B73204F4BCD7A6C
:10057000070E3E00F5CD8908CDF307C33F06CDBD7C
:1005800007CD990520202D2020646F6573206E6FA4
:100590007420636F6D70757465CD7A07153E00F534
:1005A000CD8908CDF307CDBD07CDBC0553746F725F
:1005B00065642076616C7565733A2020CD7A0710EA
:1005C0003E00F5CD8908DD6E82DD6683110F0019CE
:1005D0005E2356EB444DCB14ED62E5C53E05F5CDEB
:1005E0002307DD6E82DD668311110019CD1915E533
:1005F000C53E0CF5CD2307CDF307CDBD07CD1406C1
:1006000043616C63756C617465642076616C7565BB
:10061000733A2020CD7A07143E00F5CD89082A24AC
:1006200001444DCB14ED62E5C53E05F5CD2307CD64
:1006300012152001E5C53E0CF5CD2307CDF30718B3
:1006400023CDBD07CD570620202D20206E6F7420AE
:1006500070726573656E74CD7A07103E00F5CD89B2
:1006600008CDF307CDBD07CDF307C30815217306E9
:10067000C3AC153AE002B72074210B01E53E15F535
:10068000CD8D073A0B01F53E00C1B83E0017F53A93
:100690000C01FE20CDC014C1A01F300F210B01E5BD
:1006A0003E01F53E01F5CDA01218D8210901E52142
:1006B0000000E5210B01CD7F07CD3B09210901E5B4
:1006C000210000E5CDDA08CD7503CDBD07CDDE06EE
:1006D000526561647920666F722053415645CD7A28
:1006E000070E3E00F5CD8908CDF3071827CDBD07CD
:1006F000CDF3073AE002473E01CD8212381621E1E0
:10070000027032DF02F5CDDB043ADF023C21E10268
:1007100035C20207C3471808333631303137303518
:10072000370000E1F1B7281EC1E3F5E5C511170751
:10073000D53E0BF5CD2F13F121170746B8300178C0
:10074000E5F5CDAC08C93E01F5E53E570E02CDB248
:100750001718D0FDE10600FD4E00FD23180AE10642
:10076000004E23E5FDE1FD09EB26FF792F6F39F9F6
:100770007123EBEDB0FDE5C3FB14FDE1E118D6FDFF
:10078000E17E2306004FB720DFF533FDE9E1C1E349
:10079000EB218000480600EDB0C9001C1A020000E1
:1007A000000000000000000000002A0301AF181242
:1007B0002A0501AF180C2A03013E0118052A05017C
:1007C0003E02E5F53A9A07B72812FE042846010CC6
:1007D00000219D0709EB21FDFF19EDB83C329A0776
:1007E000F1E1229B07329D07C9CDF10BDD229B076A
:1007F000DDE1C93A9D07FE01CCB10B3A9D07FE022F
:10080000CCCF0B219A0735C8219E07119B07010CFD
:1008100000EDB0C9D1D13E46061B0E00112208CD15
:10082000B217526561642F7772697465206E6573C3
:1008300074696E6720746F6F2064656570E1C1E351
:10084000E53600E5C5CD930AC1E1FD2A9B07FDCB46
:1008500005A6FDCB054E200EFD7E172377E334E37E
:10086000FDCB05E610DDE1C9E1F1B72806C10E01B7
:10087000C5181E3E01F5E53E570E02CDB21718E829
:10088000E1C10E01C53E011808E1F1C1C5B7200163
:100890007947CDCE08E5210200397EB72809237EAD
:1008A000CDBF080D10F80923D1F9EBE9E1F1E34ED2
:1008B000477EB7C8CDCE08237ECDBF0810F9C9E565
:1008C000C5FD2A9B07FD7717CD210BC1E1C979B87A
:1008D000D03E20CDBF080518F5163E1618023E0B77
:1008E00032D908E1225517CD6216E5DDE31FDC0E93
:1008F0000D3E01CD7E183AD908DD7705DD6E0ADDA3
:10090000660BCD0A09DDE12A5517E901AF18023E51
:1009100001320B09E12255173E01CD790CFE013E53
:100920000020133A0B09B7280B0E0F115C00CD5BAA
:10093000173C28023E012A5517E901E12255173ECE
:1009400002CD790C323A09CD6216E5DDE3AFCD7EFA
:1009500018DDCB04AE3A3A09FE02281DCD0E0DDD9E
:10096000E5E111240019EB215C00010C00EDB0DD84
:10097000CB04E6DDE12A5517E9DDCB049E3A5D00A4
:1009800021F0091109000606BE281E1910FA3E4E74
:10099000060F0E05119A09CDB217426164206465F5
:1009A00076696365206E616D653A5E0023BE20DE68
:1009B0003A5F0023BE20D723EBDDE5E10106000905
:1009C000EB010600EDB0EB114D0A732372DDCB0491
:1009D000462017DD7E18D601DDB6192049DDE5E198
:1009E00011170019DD7510DD7411DDE12A5517E9C5
:1009F000434F4E01173A173E0A4B4244640A260AF7
:100A00004D0A4C5354260A7F0A4D0A4E554C260A6D
:100A10004D0A4D0A50554E260A780A4D0A52445244
:100A20006F0A260A4D0A3E4411320A060C0E05CD05
:100A3000B217446576696365206572726F72DDCBAB
:100A40000446C0214E0ADD7506DD7407C9C90E01D2
:100A5000CD5B17DD7717FE03CA0000FE0DC01E0A2E
:100A60000E0218200E061EFFCD5B17DD7717C90E8C
:100A700003CD5B17DD7717C90E04DD5E1718050E71
:100A800005DD5E17CD5B17C91600DDE5E1195E23B4
:100A900056EBE92A9B07E5DDE31803CDF10BCDBA50
:100AA0000ACD060CDDCB05E6DDE1C9DD7E05E60CF1
:100AB000CA240CDDCB0566C8180BDD7E05CB57CAF2
:100AC000200CCB67C8DDCB0576204DDD6E06DD66DC
:100AD00007CD920ADDCB05A6DDCB0446C8DD7E1727
:100AE000FE1A282AFE0A280CDDCB058EFE0DC0DD7D
:100AF000771A1811DDCB054E280BDD7E1AFE0D2866
:100B0000C4DD361A0ADD361720DDCB05CEC9DDCBB4
:100B100005F6DDCB054E28EDDDCB05B6DDCB05C6F4
:100B2000C92A9B07E5DDE31803CDF10BCD2B0CDDC6
:100B30006E08DD6609CD920ADDCB058EDDE1C92A9E
:100B40000301E5DDE31803CDF10BCDAB0ADD7E0536
:100B5000E601DDE1C92A0301E5DDE31803CDF10B70
:100B6000CDAB0ADDCB0546C2140CDD7E051FE601C8
:100B7000DDE1C92A0501E5DDE31803CDF10BCD2B3D
:100B80000CDD36170D1E08CD880ADD36170C1E0841
:100B9000CD880ADDCB05CEDDE1C92A9B07E5DDE383
:100BA0001803CDF10BCDAB0ADD6E10DD6611DDE172
:100BB000C92A9B07E5DDE3CDBA0ACD060CDDCB05DE
:100BC0004E2005CDC50A18F2DDCB05E6DDE1C92AC8
:100BD0009B07E5DDE3CD2B0CDD36170D1E08CD8818
:100BE0000ADD36170A1E08CD880ADDCB05CEDDE109
:100BF000C9FDE1E1E3E5DDE37CB72828BE2025233C
:100C00007DBE2020FDE9DDCB0546C83E4511420CE6
:100C1000060B1823DDE13E450E02CDB2173E01C999
:100C2000060818020610114D0C180ADDCB055EC02F
:100C3000115D0C060A3E460E01DDCB05FEDDE1C36B
:100C4000B217456E642D6F662D66696C654E6F2018
:100C500072657365742F726577726974654E6F2063
:100C6000726577726974650200084D415A452E46D7
:100C70004F524F524D00000000FDE132670CE17C05
:100C8000FE2020097DB728053DF53318F1E5210048
:100C9000003906004E11690C3E0EBEDAE40CC503A5
:100CA000EDB0C1F9FDE5116A0CD5C5215C00E5CDBB
:100CB0007510216800360021670C461001C9B7285D
:100CC0000CFE0328331001C9FE01202CC911D40CDD
:100CD000061018323F2028656D7074792073747285
:100CE000696E6729360FE509E30E10EDB0E1F9FDF5
:100CF000E53A670C3D3E00C821680CE5363F237E8F
:100D00003620C60247D13E4E0E05CDB21714CDB7E0
:100D10000D214C0D010900EDB021A0157E3C274F9F
:100D200077237ECE002777E60FF6301213791F1F48
:100D30001F1FE60FF6301279E60FF630131221CAA4
:100D40000DDD750ADD740BDDCB04DEC90050524F9A
:100D50002454454D24DD6E18DD66197DE6C0B428A7
:100D600009017F000929DD7414C9EB217E00973C3D
:100D7000B7ED52F26F0D3DDD7715DD361401DDCB99
:100D800004F6C921D50E11270FDDCB044620122110
:100D9000F30E11450FDDCB04762006211D0F1165E2
:100DA0000FDD7506DD7407DD7308DD7209218E0E17
:100DB000DD750CDD740DC9DDE5E311240019EBE1EF
:100DC000C91180000E1ACD5B17C9DDCB0446CC5586
:100DD0000DDD7E12DDB61320152A4F17DD7512DDED
:100DE0007413DD46140E00CB38CB19CD6717CDB781
:100DF0000DD5210C0019061836002310FBDDCB2B76
:100E0000BEDDCB055E200B3AA215FE012804DDCB2A
:100E10002BFEDDCB055628110E0FCD5B173C20199C
:100E2000DDCB055E2008C319100E13CD5B17D1D59D
:100E30000E16CD5B173CCAF40FE1DD361601DDCB93
:100E4000055EC44E0ECD830DDD361700AFC9DD360D
:100E50001600DD6E12DD6613DDCB04462008DD755D
:100E600010DD74111806DD7518DD7419DD7E1406A9
:100E70008036002310FB3D20F6C9DD6E12DD6613BF
:100E8000017F0009DD7E16772BDD7E1877C9F5DD41
:100E9000CB055E2823DDCB0476200DDDCB04462870
:100EA00017DD36171ACD2E0FDD7E16B7280ADDCBDB
:100EB0000476C47A0ECD700FCDB70D0E10CD5B1732
:100EC0003CC1CADA0F781FD8CDB70D0E13DDCB04A5
:100ED00066CC5B17C9DD6E18DD661923DD3516207B
:100EE00007CD6C0FDD361680DD7518DD74197EDDDB
:100EF0007717C9DD6E10DD6611DD4E18060009DDBD
:100F00003516201CCD6C0FE5FDE1FD7E7EE63FDD54
:100F1000BE18C2BC0FFD7E7FDD77161803CD6C0FA7
:100F2000DD7510DD7411C9DDCB056EC43A17DD6EB9
:100F300018DD6619DD7E177723DD7518DD7419DD80
:100F40003416F01820DD6E10DD6611DD4E18060037
:100F500009DD7510DD7411DD7E163CDD7716DDBE12
:100F600015C0CD7A0ECD700FCD4E0EC93E141802AD
:100F70003E15320D0DCDB70DDD6E12DD6613E5DDCC
:100F80007E14F5D5E5D1D50E1ACD5B17E1D1D5E5A7
:100F90003A0D0D4FCD5B17B7200FE1D1F101800065
:100FA000093D20DECDC10DE1C9E1E1E1CDC10DE199
:100FB0003A0D0DFE15283CDDCB05C6C9DDCB054637
:100FC000C2150FE111CB0F060F183057726F6E6705
:100FD0002066696C652074797065E111E20F061175
:100FE000181943616E6E6F7420636C6F73652066B1
:100FF000696C65E1E1E11106100613DDCB05FE3EEB
:10100000440E01CDB217446973632F64697265633E
:10101000746F72792066756C6CD13AAB15B73E016E
:10102000C8C1D5D5210B00191AB72807C6402377A8
:1010300023363A0608CD571023362E0603CD571017
:1010400020012BD1E5216910010C00EDB0E1D1B7F1
:10105000ED524504E118A44813231AE67F7710F8EF
:101060003E20BEC02B0D20FAC94E6F7420666F75EE
:101070006E643A2020E1FDE1C1E3EBFDE5E13600DD
:10108000060B23362010FB79B7C81AFE2020061362
:101090000D20F797C90CFDE5E12306090DCA2011C3
:1010A0001A13FE20287AFE3A284CFE2E2831FE2AFA
:1010B0002879FE2C2875FE3B3804FE40386DFE6012
:1010C0003802E65FFE5B2863FE5D285F772310CC65
:1010D000FDCB0076204AFD7E09FE202843184CFDFA
:1010E000CB00762046FDCB00F6FDE5E1C501090009
:1010F00009C1060318A6FDCB007E202F78FE082824
:1011000007FE0620263E02C9FD7E01D640381CFEA1
:10111000113018CBFFFD7700FD3601200DC395106F
:10112000FD7E00E61FFD77003E01C93E03C9FDE1DB
:10113000E309444DD1E1ED5AEA9511FDE9FDE1E302
:10114000B7ED42444DD1E1ED52EA9511FDE94F175B
:101150009F476F67C9444DCB14ED62C9FDE1EBE1D8
:10116000E5CB14ED62E3E5EBFDE9FDE1110000EBF9
:10117000E3E5EBFDE9CB7CC8EB210000B7ED424491
:101180004D210000ED52E0E3C5E53E4F0E02CDB229
:1011900017E1C1E3C9FDE518EE0CC004C02CC02462
:1011A000E018E479D6014F78DE0047110000ED52D7
:1011B000EA8711B1B5B4C9FDE1E3B7ED42D1E1F57C
:1011C000ED52D1EACE112004CBBBD5F1FDE93E4072
:1011D000FAD41117B7FDE9FDE1EB6069C1B7ED4243
:1011E000C1F5EBED42D1EACE1128DDFDE9E5C5D12F
:1011F000EBB7ED521804E5B7ED42444DEC1A12037B
:101200007C17E1C9EB6069B7ED521805545DB7ED85
:1012100042444D03EBC97CF67FF0EB210000B7EDB3
:1012200052C9FDE1D15A1600CB7B280115D5FDE945
:10123000EB210000794BCB3F300119CB23CB12B708
:1012400020F478B7C8511E00CB3F300119CB22B72C
:1012500020F6C921000078B728130610B7CB412823
:101260000119CB1CCB1D1FCB1910F147C90608B7BC
:10127000CB41280119CB1CCB1DCB1910F2456C2694
:1012800000C94F789118024F9047E28F12ED4479D0
:1012900037F804B7C94F789118024F90470479C9BD
:1012A000FDE1F1D15FE17AB7280A7E9238063C93DE
:1012B000300C72353E540E02FDE5CDB217C928122E
:1012C000F57E9377F106004A09EB2600194FEDB041
:1012D000FDE97235FDE9FDE1F1D1E15FC1C5B72856
:1012E0003A7E3CBB383579863831477AB8382C7924
:1012F000B738397E3C932813E5D5C55906004E0909
:10130000EB260019EB4FEDB8C1D1E17006001600D5
:1013100019EB21010039EDB0F9FDE9FDE53E540E70
:1013200002CDB217FDE1E1E5260039F933FDE9FD13
:10133000E1F1D1C1E1FDE5D5DDE3D5DD360000CB3E
:101340007C281EDD3400DD23DD36002D3DCA2D1442
:10135000EB210000B7ED42444D210000ED52FA1C94
:1013600014F5B7CB7820047CB52840C50100CA111C
:101370009A3BCDD613C50100E111F505CDD613C5B5
:10138000018096119800CDD613C5014042110F007F
:10139000CDD613C501A086110100CDD613C501100D
:1013A00027110000CDD61360691808606911102755
:1013B000CDF31311E803CDF313116400CDF3131132
:1013C0000A00CDF313D13E3085DD23DD7700DDE16A
:1013D000DD3400DDE1C9FDE13E3017E3B7ED42E366
:1013E000ED52FAEB131F373C1718F0E309E3ED5AFF
:1013F000C11812FDE13E3017B7ED52FA04141F3741
:101400003C1718F419B71F3011D1DD23DD7700DD4B
:10141000E3DD3400DDE3152814D5FDE9DD36002ACF
:10142000DD36012ADDE1DD34003E4F1803D13E54A4
:10143000DDE10E02CDB217C9FDE1EB21000039BE9E
:10144000DC841406004E03EDB0F9FDE9FDE1210056
:1014500000394E060003095E2356D5EB626B2B2B39
:101460000303EDB8E1FDE9FDE121000039BEDC84B4
:101470001496280E545D06004FB7ED42F9EB4E036B
:10148000EDB0FDE9D5F5E5FDE53E540E02CDB21710
:10149000FDE1E1F14E77E5060009EBE14F0903EDCF
:1014A000B8EBD1C123F9C5C9FDE1C1C52600693931
:1014B00023F906006068FDE93E40FABE1417B7C97B
:1014C0003E01C83DC93E01C03DC93E01F83DC93E8F
:1014D00001F03DC9B7F0ED44C9E1C15E2316FF7BC1
:1014E000B7200157EB39F9FDE5DDE5C5DD218400C5
:1014F000DD39EB5E231600EB39E5D52A511739D8D3
:101500003E53D50E00CDB217EBE1FDE1DDE1F9EB85
:10151000FDE9E15E235623E5EB4E2346235E235689
:1015200023EBC9E35E235623E3EB1803EBE1E371FE
:1015300023702373237223EBC9FDE1D1E3C5424B32
:10154000FDE9500000000000000000000000000065
:10155000000000000000000000000000000000008B
:10156000000000000000000000000000000000007B
:10157000000000000000000000000000000000006B
:10158000000000000000000000000000000000005B
:1015900000000000D41800008000941598157EDD2E
:1015A000100002000000391600D41801ED7B06007F
:1015B00006063B10FDE5DD218000DD39DD229E15AC
:1015C0002AA915229415224F17010001CD67172172
:1015D00000002296152A94150180007123702301C2
:1015E0000001712370218000229815219415229A00
:1015F00015219815229C15210000220301220501C6
:1016000022531722A01522A415CD3C1621391622EB
:10161000591722571722A615AF32A81521500022BC
:1016200042150E0CCD5B172E01FE2038012C22A294
:10163000150E1A118000CD5B17C9000021000011A2
:101640000501D5E5110301D5E5CD6216E5FDE1FD06
:10165000360516CD6216E5FDE1FD36050BAF329A73
:1016600007C9E1C1E35E23562BE57AB7281A2A534E
:1016700017E5FDE17CB52810ED522808FD6E02FD4E
:10168000660318EDEBD1AFC9ED5B4F17E173237221
:101690002BC5E5D5014800CD6717E1E57423752317
:1016A000064636002310FBD1D5FDE12A5317FD7500
:1016B00002FD7403ED535317C1FD710EFD700FFD54
:1016C000361401FD361580C178B12808FD7118FD6A
:1016D0007019181FFDCB04C621170019FD7510FDE8
:1016E0007411FD36172021060019EB21F9160108A7
:1016F00000EDB0FDE5E13E01C901173A1743174E71
:10170000172143157EB7280D352A3A167EDD771747
:1017100023223A16C91142150E0ACD5B1721421534
:1017200046237EB828DB3423223A1616005F19368A
:101730000DDD36170ACD3A1718C7DD5E170E02CD3C
:101740005B17C9DDCB0556C82143153600C9C9F45E
:101750001B0BE32C1B140339163916DDE5FDE5CD13
:101760000500FDE1DDE1C92A4F1709224F170100ED
:1017700001097C2F677D2F6F22511739D8D13E4840
:101780000E00CDB217C5E50E02CD5B17E1C1C94F02
:1017900006021F1F1F1FE60FC630FE3AFAA117C62A
:1017A000075FCD85177910EEC9E1F10E02E5CDB2E4
:1017B00017C9B72A5917CD51183008CB19CB19D8EA
:1017C000C34718F5CB193008EB5E23CD851710F908
:1017D000C50E09115218CD5B17C1F1C55FCD851734
:1017E0000E09115B18CD5B17C1D1E1E5D5C579E6CE
:1017F0000228032A55177CCD8F177DCD8F171E0D1C
:10180000CD85171E0ACD85172A5717CD5118C1CB84
:1018100019D247181168180E09CD5B170E01CD5B60
:1018200017FE592817FE792813FE4ECA4718FE6E78
:10183000CA4718117A18FE2030DD18E01E0DCD853C
:10184000171E0ACD8517C92A5317E5CDC018C30046
:1018500000E90D0A4572726F7220242061742061C4
:101860006464726573732024436F6E74696E75656A
:10187000203F2028592F4E2920240820082447DD06
:101880007E05CB7FC0E60CC8CB5F2824DDCB0446A9
:10189000281EDDCB054E2018C5DD6E08DD6609E586
:1018A000DD36170DCDBF18E1DD36170ACDBF18C1E3
:1018B000DD6E0CDD660D78CDBF18DD360510C9E98B
:1018C000E1E37CB7C8E5DDE1AFCD7E18DD6E02DD7A
:1018D000660318EE80000001000000000000000018
:1018E00000000000000000000000000000000000F8
:1018F00000000000000000000000000000000000E8
:00000001FF

fridtjof.ma...@gmail.com

unread,
Mar 29, 2023, 6:44:53 PM3/29/23
to
And as another note - the prospero fortran for cp/m is NOT fortran 77 -- it is fortran 66... pretty much the same as the microsoft, but with complex. Things like SAVE, PARAMETER, CHARACTER and BLOCK IF do not exist. Also, assigned goto requires a statement list (contents not important, needs the list). I am going to play with this compiler.
It uses z80 instructions... JR for one.

Андрей Никитин

unread,
Mar 29, 2023, 6:52:06 PM3/29/23
to
четверг, 30 марта 2023 г. в 01:44:53 UTC+3, fridtjof.ma...@gmail.com:
> And as another note - the prospero fortran for cp/m is NOT fortran 77 -- it is fortran 66... pretty much the same as the microsoft, but with complex. Things like SAVE, PARAMETER, CHARACTER and BLOCK IF do not exist. Also, assigned goto requires a statement list (contents not important, needs the list). I am going to play with this compiler.
> It uses z80 instructions... JR for one.

Several files are missing for AMSTRAD. If you add the following files from the distribution for CP/M:

GLIB.MAC,
G2LIB.MAC,
PRIME.FOR,
COPYTX.FOR,
MAZE.FOR

then the original file FCHECK.COM checks all files and reports that they are normal. This suggests that these files are no different and can be used.

New file fcheck.com it is smaller in size than the original one and gives the following information at startup:

PROFOR2.COM - checks OK

PROFOR.ERR - does not compute
Stored values: 44 61509876
Calculated values: 45 62205943

FORLIB.REL - does not compute
Stored values: 332 492497947
Calculated values: 340 507591874

FCONFIG.COM - does not compute
Stored values: 56 93958051
Calculated values: 56 94334026

fridtjof.ma...@gmail.com

unread,
Mar 29, 2023, 9:11:59 PM3/29/23
to
Interesting... here is what I get: I'll bundle up all the files I have... (into an lu library). Note that fcheck has size and checksum of each file within it. The issue then would be the actual compiler files...

: fred@llana p $; cpm fcheck.com

PROFOR2.COM - checks OK

PROFOR.ERR - checks OK

FORLIB.REL - checks OK

FCONFIG.COM - checks OK

G1LIB.MAC - checks OK

G2LIB.MAC - checks OK

PRIME.FOR - checks OK

COPYTX.FOR - checks OK

MAZE.FOR - checks OK


and, for compiler version:

: fred@llana p $; cpm profor

Pro Fortran Compiler - Version zz 1.2

Plo

unread,
Mar 30, 2023, 9:56:38 PM3/30/23
to
Perfect!
Thank's

fridtjof.ma...@gmail.com

unread,
Mar 31, 2023, 9:52:15 AM3/31/23
to
My corrected Prospero Fortran is at

https://github.com/ratboy666/profor

That includes the fixed FCHECK.COM.

Note that the command line for the compiler appears to be:

profor name.for /options

where options are the collection letters in the LOG file (G option). For example:/LMG makes a PRN file, a MAP file and a LOG file. Note that INTEGER is INTEGER*4 -- vs Microsoft F80 where INTEGER is INTEGER*2. BYTE is not supported, but INTEGER*1 is (and is supported in F80 as well). F80 supports I = 2HAB or I = 'AB', Prospero does not. I haven't had time to look at code generation much.... Note that option C (eg /C) is compact code. This changes code generation is use more compact code, even if it is slower. Not going to have time to play further for a bit. I will "port" my string library. Note that APU.REL does not work with Prospero... Is there any interest in that?

fridtjof.ma...@gmail.com

unread,
Mar 31, 2023, 9:53:55 AM3/31/23
to

Updated versions of STRING library and APU library (if I do that) will be put into the profor github repository.

fridtjof.ma...@gmail.com

unread,
Mar 31, 2023, 11:45:54 AM3/31/23
to
On Friday, March 31, 2023 at 9:53:55 AM UTC-4, fridtjof.ma...@gmail.com wrote:
> Updated versions of STRING library and APU library (if I do that) will be put into the profor github repository.
PROFOR FILE.FOR /OPTIONS

Note space before the /
OPTIONS can be:
L List (PRN file)
M Map (MAP file)
C Compact (less space)
R Restrict (not validated. I think this does INTEGER*1, *2, *4 to just the specified width)
N Source line numbers (for debugging, takes extra code space)
I Subscript range checking
A Assignment range checking
H Hold before REL (why? maybe to allow disk switch)
S ANSI only. Eg. 'ABCD' instead of 4HABCD generates warning.
G Console to log (LOG file)

Note that ASSIGNed GOTO needs the statement list... Even a dummy list works. Eg

ASSIGN 10 TO I
GO TO I,(1)
1 PAUSE 4321
STOP
10 PAUSE 1234
STOP

does work. The list does not appear to be checked... It just needs to be there.
ANSI FORTRAN 66 code will go easier with Prospero than with Microsoft F80. The biggest issue is that
Microsoft uses INTEGER*2 as default and REAL*4 as default, so INTEGER and REAL do not
EQUIVALENCE according to the standard. Prospero uses INTEGER*4 as INTEGER and REAL*4
as REAL, so things "work out properly". And... Prospero supports COMPLEX (as COMPLEX*8, note
that DOUBLE PRECISION COMPLEX - COMPLEX*16 isn't there).

I want to get my virtc working with Prospero, to allow micro-timing benchmarks to compare PROFOR
and F80.

Plo

unread,
Mar 31, 2023, 10:59:55 PM3/31/23
to
Perfect "autopsy" of the Prospero Fortran CP/M-80 version!... For CP/M-80 O.S. I believe it is the most complete among the various Fortran compilers, I played with all the other versions that I could find on the internet and the only two that support the TYPE COMPLEX (obviously the COMPLEX*8 only, due to the 8-bit 8080 Processor ..) are the Prospero Pro Fortran and the Super Soft SSS FORTRAN, but the latter I discovered has some bugs, especially in the LINKAGE phase...

Kurt Pieper

unread,
Apr 3, 2023, 7:43:19 AM4/3/23
to
Hi,
unfortunately I can't report any success.
My knowledge of Fortran is so-so.

The program is processed with profor prime.for.
But Prolink needs to be called and I get this
Messages:

P>prolink prime

Pro Pascal Linker - Version zz 1.6
Copyright (C) 1982 Prospero Software
Serial No: 63

Linking:
PRIME.REL

Unsatisfied external(s):
$EFMT $EIRF $EIWF $ERFI4 $ETRF $ETWF
$EUNIT $EWFI2 $EWFI4 $GINIT $GIRST $HINVS
$LCMPR $LMODF $RADD $RFLT $TRUNC SQRT

Terminate ? (Y/N)

Hardware is SC114 von S.Cousins.

Kurt

fridtjof.ma...@gmail.com

unread,
Apr 3, 2023, 8:41:42 AM4/3/23
to
Kurt
: fred@llana p $; cpm prolink

Pro Pascal Linker - Version zz 1.6
Copyright (C) 1982 Prospero Software
Serial No: 63

Separate program and data areas ? (Y/N) n
Map ? (Y/N) y
Map $names too ? (Y/N) n
Filename(s) - prime
Linking:
prime.REL
Filename(s) - forlib/s
Linking:
forlib.REL
Filename(s) -

External/Entry:
SQRT 02C1

Data: 0103 17F5
Program: 0103 17F5
Start address: 010F

Executable file: prime.COM

: fred@llana p $;

Or, you can use Microsoft L80:
: fred@llana p $; l80

Link-80 3.44 09-Dec-81 Copyright (c) 1981 Microsoft

*prime
Data 0103 02C1 < 446>

-$EFMT 02A8 -$EIRF 0178 -$EIWF 02AB
-$ERFI4 017F -$ETRF 0182 -$ETWF 02B5
-$EUNIT 02A1 -$EWFI2 02B2 -$EWFI4 01B4
-$GINIT 0113 -$HINVS 0259 -$LCMPR 0295
-$LMODF 023A -$RADD 0215 -$RFLT 01FC
-$TRUNC 021A -SQRT 020A
17 Undefined Global(s)
53228 Bytes Free

*forlib/s

*prime/n/y/e

Data 0103 17F5 < 5874>

46979 Bytes Free
[010F 17F5 23]



Note that you MUST use FORLIB.REL from Prospero FORTRAN, Microsoft FORLIB.REL will not work.

Kurt Pieper

unread,
Apr 3, 2023, 10:57:54 AM4/3/23
to
Hi,
thanks to the specialist Fred.

I created a
makfor.sub.
P>type makfor.sub
profor p:$1
l80 P:$1,forlib/s,p:$1/n/e
dir p:$1.*

P>

It works.

Before that I had worked with F80.
An attempt failed on KSAM80.
The KSAM80.REL etc for BASCOM don't work.
Prg crashes after CALL MKSAM .....
There is an F80 Fortran version. Not to be found.

Kurt

Plo

unread,
Apr 4, 2023, 9:21:24 AM4/4/23
to
HI,
Fred was faster than me in answering you...hehehe!!

0 new messages