Submitted by Steve Fewell
If the 6502 Stack pointer address is more than or equal to #&FC (i.e. Stack physical address &01FC), then a
subroutine is not currently active, as when a subroutine is called, 4 bytes are pushed to the 6502 stack [Those
bytes are as follows: 1) the Keyword token for either FN or PROC (1 byte); 2) the current program location and offset
(&0A-&0C) (3 bytes)], so issue 'No PROC' error.
If the first byte pushed to the 6502 stack (at address &01FF) is not the PROC-Keyword token (#&F2), then the most
recent subroutine called is not a PROCedure (it must be a FuNction instead), so issue 'No PROC' error.
Otherwise, we have correctly found the end of the PROCedure definition, so continue to routine &9BA6 to check that
the ENDPROC statement is valid (and is followed by either a carriage return, ELSE-token or ':' character) and to return
(RTS) to the code within the PROC-Statement routine (at address &B08C) to process the return from the subroutine call
and handle the transfer of program control back to the statement following the procedure call (PROC) statement.
|9B9B||224 252||E0 FC||CPX#&FC|
|9B9D||176 216||B0 D8||BCS -40 --> &9B77 'No PROC' error|
|9B9F||173 255 001||AD FF 01||LDA &01FF|
|9BA2||201 242||C9 F2||CMP#&F2|
|9BA4||208 209||D0 D1||BNE -47 --> &9B77 'No PROC' error|
|9BA6||...Check for End of Statement...|