- Integration with updated sim_card API - Addition of MT (Mag Tape) device - Addition of DSK (Disk) device - Build time simulator test
187 lines
6.2 KiB
Text
187 lines
6.2 KiB
Text
|
|
Restoration comments May/2018
|
|
By Roberto Sancho
|
|
|
|
Fortransit
|
|
From Bitsavers Manual CarnegieInternalTranslator.pdf (listings)
|
|
and fortransit.pdf (reference manual)
|
|
|
|
Fortansit comes in 4 versions: Fortransit I, I (S), II, II (S).
|
|
"(S)" means special character support on IBM 533 card read-punch.
|
|
"I" means basic IBM 650, "II" means IBM 650 + IBM 653 Storage Unit
|
|
that provides Floating Point and Index instructions.
|
|
We are using Version II (S).
|
|
|
|
In the original listing on IT for Fortransit II there an error
|
|
on lines 670, 671. These lines are in fact a bugfix replacement
|
|
for lines 660 and 661. The missing 670 and 671 lines has been
|
|
recovered for the IT for Fortransit I listing:
|
|
|
|
ALO 8001 1455 15 8001 1864 RSV: ADDED MISSING CARDS
|
|
ALO UBSR 1864 15 0664 1419
|
|
|
|
On the original manual, the following pieces of software are
|
|
missing:
|
|
|
|
SOAP-PACKAGE (SOAP II modified to be used by Fortransit)
|
|
Subroutines PACKAGE (with built in functions to be called
|
|
by object program in run-time)
|
|
Add function title program
|
|
|
|
The compilation and run procedure has been slightly modified
|
|
in its implementation in run_fortransit.ini script from what
|
|
it is stated in manual. This is to allow the use of standard
|
|
SOAP II assembler and the Subroutines package.
|
|
|
|
Also an Add function title program (fortransit_addfn_listing.txt)
|
|
has been rewritten to allow the usage of function title cards
|
|
as stated in manual, and to populate the standard fortransit
|
|
functions to be recognized by the translator.
|
|
|
|
The missing subroutines PACKAGE has been re-created adapting the
|
|
available IT run-time PACKAGES P1, P2, P3 and P4 to
|
|
FORTRANSIT. PUNCH and READ routines has been written from
|
|
scratch according to functional description from manual.
|
|
|
|
The PACKAGE provides the subroutines stated in fortransit.pdf
|
|
in page 36, and also provides a set of functions to be
|
|
used in fortransit source code:
|
|
|
|
A=LOGF(B) base 10 Logarithm: log 10
|
|
A=EXPF(B) base 10 exponent: 10^(B)
|
|
A=LNF(B) base e logarithm: neperian log e
|
|
A=EXPNF(B) base e exponent: e^(float)
|
|
A=COSF(B) cosine
|
|
A=SINF(B) sine
|
|
A=SQRT(B) square root
|
|
A=ABSF(B) absolute value
|
|
A=INTF(B) integer part
|
|
A=MAXF(B,C,...) returns maximum value of argument list
|
|
|
|
All functions has FLOAT arguments and returns FLOAT value.
|
|
If a FIXED argument is given, the program will stop with AR=9099
|
|
|
|
9099 ALARM FUNCTION ARG IS FIX BUT SHOULD BE FLOAT
|
|
|
|
There is no check on number nor type of MAXF arguments.
|
|
A maximum of 10 is safe, more will overwrite the program.
|
|
|
|
FORTRANSIT object program only needs few functions to be
|
|
present in run time PACKAGE. These are identified as
|
|
BUILT-IN SUBROUTINES (180 WORDS) in file pack_listing.txt
|
|
|
|
Any other function can be deleted from source code
|
|
PACKAGE (pack_src.txt) to free storage for program or data.
|
|
|
|
List of functions that can be removed to free drum memory:
|
|
|
|
SOAP Description IT number
|
|
label
|
|
|
|
E00AK FIX ** FIX 10
|
|
E00AL FLOAT ** FIX 11
|
|
E00LQ FLOAT ** FLOAT 302
|
|
E00AB LOGF 1
|
|
E00AC EXPF 2
|
|
E00LO LNF 300
|
|
E00LP EXPNF 301
|
|
E00AV COSF 21
|
|
E00AW SINF 22
|
|
E00AX SQRTF 23
|
|
E00AY ABSF 24
|
|
E00AZ INTF 25
|
|
E00BA MAXF 26
|
|
|
|
If functions 10,11 are removed, the corresponding
|
|
** power operator with these types should not be used
|
|
|
|
FIX ** FLOAT or FLOAT ** FLOAT requires the presence of
|
|
302, 1 and 2 functions.
|
|
|
|
LNF requires LOGF, EXPNF requires EXPF.
|
|
SINF requires COSF.
|
|
All other functions are independent.
|
|
|
|
Any attempt to use a non present function will stop the
|
|
program with AR=90nn where nn is the IT number of function:
|
|
|
|
9010 ALARM FIX ** FIX UNDEF
|
|
9011 ALARM FLOAT ** FIX UNDEF
|
|
9302 ALARM FLOAT ** FLOAT UNDEF
|
|
9001 ALARM LOGF UNDEF
|
|
9002 ALARM EXPF UNDEF
|
|
9300 ALARM LNF UNDEF
|
|
9301 ALARM EXPNF UNDEF
|
|
9021 ALARM COSF UNDEF
|
|
9022 ALARM SINF UNDEF
|
|
9023 ALARM SQRTF UNDEF
|
|
9024 ALARM ABSF UNDEF
|
|
9025 ALARM INTF UNDEF
|
|
9026 ALARM MAXF UNDEF
|
|
|
|
The functions for power to a FIX value (10 and 11) provides
|
|
exact values. Raise power to FLOAT value is calculated using
|
|
LOGF and EXPF, that are implemented with a polynomial
|
|
approximation.
|
|
|
|
The type or a FIX**FIX is also FIX (10**I for example). This
|
|
means that the maximum value allowed is 999999999. If the
|
|
computed value of a power to fix is bigger than this maximum
|
|
value, the program will stop with AR=0003 (so halt 0003 occurs
|
|
on E00AK routine, not in E00LQ as stated in manual)
|
|
|
|
SQRTF square root function requires a zero or positive argument.
|
|
If argument is negative, program will stop with AR=0012
|
|
|
|
0012 ALARM SQRT WITH NEGATIVE ARGUMENT
|
|
|
|
COSF and SINF function expects a float argument in radians
|
|
(thus cosf(pi/2) = 0, sinf(pi/2) = 0). If argument is greater
|
|
that 1E10, program will stop with AR=0013
|
|
|
|
0013 ALARM RADIAN ARG TOO BIG
|
|
|
|
As FORTRANSIT uses index register for DO loop variable control
|
|
only values in range 0..1999 are safe for start and end loop
|
|
values. Any other values can be used (e.g. DO 10, I=-5,15)
|
|
and will compiled without warning, but the generated compiler
|
|
code is wrong. The construct
|
|
|
|
J=-5
|
|
DO 10 I=J,15
|
|
c do stuff
|
|
10 continue
|
|
|
|
will compile and work fine iterating but only iterates once.
|
|
This DO is implemented as
|
|
|
|
i=j
|
|
for(;;) {
|
|
// do stuff
|
|
if (i-15 < 0) break;
|
|
}
|
|
|
|
So DO does not support any negative initial value.
|
|
DO loop variable con only get vaues in
|
|
range 0 to 9999. For example,
|
|
|
|
J=10000
|
|
K=15000
|
|
DO 10 I=J,K
|
|
|
|
will iterate from 0 to 5000 (modulo 10000 on supplied values).
|
|
|
|
PACKAGE occupies drum address 1401 up to 1999, leaving
|
|
address 1 to 1400 for fortransit program and data. By deleting
|
|
non build in routines, the pack can be reduced to occupy
|
|
only locations 1780 to 1999.
|
|
|
|
Floating point numbers are encoded as
|
|
|
|
2300000049 = 0.023
|
|
1000000050 = 0.1
|
|
1000000051 = 1.0
|
|
1500000052 = 15.0
|
|
|
|
|
|
|