Bob Ammerman [rammerman at prodigy.net] of RAm Systems says
The PIC18Cxx2 chips contain quite a few nice new features. One of the neatest is programmable access to the stack. This feature allows many powerful tricks.Notes:
- this code has _NOT_ been tested!
- all multi-byte values are little-endian
- I assume the code space never exceeds 16 bits worth (which it never will on the 242, 252, 442 or 452 chips).
Exception handling (like C++) (or C's setjmp/longjmp) ; establish an exception handler CBLOCK EXCEPT_SP ENDC some_routine: ; 'establish' the exception handler push ; make room for exception handler movlw low(exception_handler) movwf TOSL,A movlw high(exception_handler) movwf TOSH,A movff STKPTR,EXCEPT_SP . . rcall another_routine ; 'tear-down' the exception handler pop ; couldn't be simpler! ; at this point we can either return, or 'fall_thru' into the ; exception handler to perform actions that are needed whether ; or not an exception occurs exception_handler: . . . return ; Returns to caller of 'some_routine' another_routine: . . call yet_another . . btfsc SOMEVALUE,somebit,A ; Exceptional condition? bra not_except ; Next two instructions 'raise' the exception movff EXCEPT_SP,STKPTR return not_except: return yet_another: . . bc oops ; Ran into trouble return ; Normal return oops: ; Next two instructions 'raise' the exception movff EXCEPT_SP,STKPTR return