FAP - Fortran Assembly Program
FAP, or Fortran Assembly Program, was an assembly language specifically designed for the IBM 7090 and 7094 series mainframe computers in the early 1960s. It served as a symbolic macro assembler that allowed programmers to write routines in assembly language that could be called from or integrated with FORTRAN programs, typically for performance-critical sections or direct hardware manipulation.
Key Characteristics
-
- Macro Assembler: FAP was a macro assembler, meaning it supported user-defined macros, which allowed for code reusability and abstraction, simplifying complex assembly sequences for the IBM 7090/7094 architecture.
- Machine-Specific: It was tightly coupled to the architecture of the IBM 7090/7094 series, leveraging their specific instruction sets, registers, and memory organization.
- FORTRAN Integration: FAP routines were designed to be easily linked and called from FORTRAN programs, providing a mechanism to overcome performance limitations of early FORTRAN compilers for specific tasks.
- Symbolic Programming: Allowed programmers to use symbolic names for memory locations, operations, and registers, making the code more readable and manageable than raw machine code.
- Historical Significance: Represented an important bridge between high-level FORTRAN and low-level machine operations during a foundational era of computing, predating the System/360 and subsequent z/OS architectures.
Use Cases
-
- Performance Optimization: Writing computationally intensive subroutines or functions in FAP to achieve maximum execution speed, where FORTRAN compilers of the era might generate less efficient code for specific algorithms.
- Hardware Interaction: Directly manipulating hardware features, I/O devices, or specific machine registers that were not easily accessible or efficiently managed from FORTRAN.
- System Utilities: Developing small, highly optimized utility programs or operating system components that required close control over the machine's resources and direct interaction with the hardware.
- Early Scientific Computing: Implementing numerical algorithms or data processing routines for scientific and engineering applications where every CPU cycle and memory access was critical.
Related Concepts
FAP stands as an early example of a macro assembler, conceptually similar to, but architecturally distinct from, later assemblers like IBM Assembler H and HLASM (High Level Assembler) used on System/360 and modern z/OS systems. It provided a low-level counterpart to FORTRAN, one of the first high-level programming languages, enabling a hybrid approach to application development on the IBM 7090/7094 mainframes. While its direct use is obsolete, FAP's role highlights the enduring need for assembly language in mainframe environments for performance and direct hardware control, a need still met by HLASM on z/OS.
- Judicious Use: Historically, FAP was best used sparingly, only for sections of code where FORTRAN's performance was demonstrably insufficient, due to the inherent complexity and increased maintenance burden of assembly language.
- Clear Documentation: Given the intricate nature of assembly code, thorough in-line commenting and external documentation were critical for understanding, debugging, and maintaining FAP routines.
- Adherence to Conventions: Strict adherence to established parameter passing, register usage, and data representation conventions between FORTRAN and FAP routines was essential for correct program execution and interoperability.
- Migration Strategy: As FORTRAN compilers improved and new, more powerful mainframe architectures