.TITLE SAVREG Save and restore registers .ident /X01.01/ .ENABL LC ;+ ; ; General register save/restore routine ; ; Calling sequence: ; ; JSR R5,SAVREG ; ; On return, all registers are saved on the stack. The caller's ; Registers are as follows: ; ; R0 02(SP) ; R1 04(SP) ; R2 06(SP) ; R3 10(SP) ; R4 12(SP) ; R5 14(SP) ; PC 16(SP) Return to original user ; ; To exit a subroutine, execute: ; ; RTS PC ; ; On return to the original caller, the C-bit will be preserved. ; Other bits will not. ; .GLOBL SAVREG SAVREG: MOV R4,-(SP) MOV R3,-(SP) MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) MOV R5,-(SP) ;Return to subroutine MOV 14(SP),R5 ;Get original R5 contents JSR PC,@(SP)+ ;Co-routine call to subroutine MOV (SP)+,R0 ;Return from subroutine MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 MOV (SP)+,R5 RTS PC .END