f77 and f90 are generally I/O compatible for binary I/O, since f90 links to the f77 compatibility library.
Such compatibility includes the following two situations:
In the same program, you can write some records in f90, then read them in f77.
An f90 program can write a file. Then an f77 program can read it.
The numbers read back in may or may not equal the numbers written out.
Unformatted
The numbers read back in do equal the numbers written out.
Floating-point formatted
The numbers read back in can be different from the numbers written out. This is caused by slightly different base conversion routines, or by different conventions for uppercase/lowercase, spaces, plus or minus signs, and so forth.
Examples: 1.0e12, 1.0E12, 1.0E+12
List-directed
The numbers read back in can be different from the numbers written out. This can be caused by various layout conventions with commas, spaces, zeros, repeat factors, and so forth.
Example: '0.0' as compared to '.0'
Example: ' 7' as compared to '7'
Example: '3, 4, 5' as compared to '3 4 5'
Example: '3*0' as compared to '0 0 0'
The above results are from: integer::v(3)=(/0,0,0/); print *,v
Example: '0.333333343' as compared to '0.333333'
The above results are from PRINT *, 1.0/3.0