There are two types of FMS exits: the normal exit and the error exits. Both of these exit types end up calling the RETURN routine.
Address ó $12D3
Entry Registers ó
|A = Return Code|
|X = Don't Care.|
|Y = Don't Care|
Exit Registers ó
|A = Possible ëGet Byte' data byte.|
|X = IOCB number times 16.|
|Y = Return Code|
1) The X register is loaded with the current IOCB number times 16 from CURFCB.GREAT And FGREAT
2) The return code is placed in the IOCB status field (ICSTA).
3) The stack register is restored to point to the stack displacement at FMS entry from the value saved in ENTSTK.
4) The possible ìGet Dataî data byte is loaded into the A register.
5) The Y register is loaded with the return code.
6) The caller (CIO) is returned to via the RTS instruction.
GREAT and FGREAT are the exit points used by FMS when the operation has terminated normally. FGREAT is located at $12EA and is used to free the sector buffer that has been allocated to the FCB. The FRESBUF routine is used to free the buffer. FGREAT exits directly to GREAT ($12F0). The GREAT exit point loads the normal return code ($01) into the A register and goes to RETURN.
The ERREOF exit is called when an end of file condition is found. ERREOF loads the end-of-file condition code ($88) in the A register and goes to RETURN.
The ERRIO exit is called if an error occurs during an I/O operation (Figure 1, control flow 3). The error code from the DCB (control path K) is loaded into the A register as the FMS return code and control is passed to RETURN.
All other errors exits are at the ERxxx labels starting at $12B5. The error code is developed by means of a series of 6502 INC instructions which increment the ERRNO (which was initialized to $9F at FMS entry). The final instruction at the end of the INC chain loads the final ERRNO value into the A register and control is passed directly to RETURN.
Return to Table of Contents | Previous Chapter | Next Chapter