Table of Contents Previous Chapter
The FEP is booted at the direction of a BEP function which commands and controls the process. A minimal amount of code is used to provide the BEP with the capability to deliver read, write, and execute commands to the FEP. With these commands the BEP may complete loading of the executable code and begin execution of that Front End Processor stand alone code.
The Boot FEP provides the following feature:
Figure 169 illustrates the relationship between functions used by the FEP boot procedure.
FIGURE 169. FEP Boot Function Relationships
The FEP boot uses the FEP IO Library to fulfill commands entered into the incoming MailBox.
The functions startUpFep and bootServerFep are copied into FEP shared memory by the BEP while holding the FEP in a reset state. When released, the FEP will reference its microboot address and begin executing the startUpFep code. Refer to the FEP Manager Section 25.5.2 for a more extensive description of how this process might be accomplished.
startUpFep will initialize registers: setting kernel mode, disabling interrupts, mapping the general exception vector, setting co-processor 0 to usable, clearing the interrupt mask, and clearing the software interrupts in co-processor 0. (There are no additional co-processors.) The mongoose is then configured with no DMA and running with a single wait state. The stack size having been declared during initial compilation, the stack pointer address is located at the maximum offset (minus this functions save area of 24 bytes). The global data pointer (gp) is assigned to the linker defined symbol _gp.
C program specifications expect the global data area (.bss) to be cleared. The address of the first word and the end have been provided by the linker. The process enters a loop which will write zeros into those memory locations. The process then calls the monitor function bootServerFep to service commands from the BEP. Should that function ever return, startUpFep will continue execution from its first statement.
bootServerFep establishes a buffer for commands and for the FIOgetNextCmd status variable. It first calls FIOinit to initialize the FEP IO Library pointers and structures used in communicating commands from the BEP mail box. Next it enters a forever loop in which it calls FIOtouchWatchdog to keep the mongoose watchdog counter from reaching zero and resetting the CPU and calls FIOgetNextCmd to have the library functions interrogate the BEP mailbox for any read, write, or execute in memory commands, to which other library functions will respond and fulfill. Commands other than those mentioned are not honored. Usually the BEP uses these functions to complete loading of memory and to begin executing a loaded function. Refer to FEP IO Library Section 38.0 for a more detailed description of the library functions.