The M1750 has a sixteen-bit word. In its simplest configuration, the M1750 can address up to 216 or 64K words of memory. With a trivial hardware extension, this can be extended to 64K words of instructions plus 64K words of operands. This is a total of 256K bytes. M1750 Ada supports both of these configurations by default.
Where an application requires more address space than this, the 1750A's addressing range may be extended using a Memory Management Unit (MMU). The MMU specified by 1750A offers a further four address bits and allows programs to be up to 1M word in size. This kind of memory is known as "expanded memory".
M1750 Ada support two solutions for expanded memory:
A single program solution using long forms the SJS and URS instructions that switch address states
A multi-program solution where up to 15 Ada programs may time share the 1750 CPU under the control of a application code in address state zero.
In addition, the programmer is always free to write assembly language statements that either access memory directly, or modify the memory management unit's registers.
For the single program solution, each application program unit is compiled using the compiler option -mlong-calls. This changes the instructions used for subprogram call and subprogram return to the long forms of these instructions, and allocates two words on the stack for the link address. The long forms are actually BEX instructions and call the run-time system to switch address states as necessary.
One the 1750A the maximum memory addressable using this solution is 1M word of instructions with 64K words of data.
With this solution all calls are long calls. In practice the additional time required to make the calls is quite small. The Ackermann benchmark program that consists almost entirely of calls increases in time from 1.18 seconds to 2.62 seconds when running with expanded memory. This suggests that a long call takes roughly twice as long as a normal call.
Using the multi-program solution allows the full 1M word to be addressed as instructions or operands. Up to 15 programs may be loaded in parallel, each in its own address state and protected from the others. Address state zero is reserved for a small kernel that supports hard interrupts and the system call interface.
No time-sharing kernel is provided as standard. We expect that application code in address state zero will switch among the loaded programs (according to mission phase for example) and call functions from those programs with a long call that switches address state.
No special options are used when compiling for this solution as each program executes in a 64K + 64K virtual address space. Also each program is linked as if it were running on non-expanded memory.