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).
Co-routines/cooperative tasks version 1 Note: assumes that all cocalls are from mainline code (ie: the subroutine stack is empty) CBLOCK TASKX_PC:2 ; Address of next instruction to run in task X TASKY_PC:2 ; Address of next instruction to run in task Y ENDC initialize: ; initialize values for all but the first task movlw low(tasky) movwf TASKY_PC,A movlw high(tasky) movwf TASKY_PC+1,A ...fall thru into first task... taskx: . . rcall x_cocall_y . . rcall x_cocall_y . bra taskx x_cocall_y: movff TOSL,TASKX_PC movff TOSH,TASKX_PC+1 movf TASKY_PC,W,A movwf TOSL movf TASKY_PC+1,W,A movwf TOSH return tasky: . . rcall y_cocall_x . . rcall y_cocall_x . bra tasky y_cocall_x: movff TOSL,TASKY_PC movff TOSH,TASKY_PC+1 movf TASKX_PC,W,A movwf TOSL movf TASKX_PC+1,W,A movwf TOSH return