; MONTRY MONITOR TRACE IN & TRACE OUT ROUTINE ; USED WHEN DEBUGGEG NOT IN .TITLE MONTRY .MCALL POP,PUSH,MINIT .GLOBL $OTSV .ENABL AMA ; ; MONTRI CALLED BY FORTRAN CALLABLE ASSEM RTNS. ; JSR R1,MONTRI ; .BYTE NPAR ;# PARMS EXPECTED BY ASSEM RTN ; ;NPAR IS -1 IF VAR NUM OF ARGS ; MONTRI POPS R5 FOR NON VARIABLE PARM LIST ; .BYTE 0 ;RES FOR FUTURE USE ; .RAD50 /ASSEM NAME(MUST BE 2 WORDS/ ; ; MONTRI WILL BUILD TRACE BACK CHAIN AND SAVE REGS ; ; MONTRO WILL RESTORE REGS(MONTRO IS CALLED INSTEAD OF ; ASSEM ROUTINE DOING AN RTS PC TO RETURN) ; POPS TRACE BACK CHAIN ; RESTORES REGS 0-4 ; ; MONTRF FUNCTION RETURN-SAME AS MONTRO ; EXCEPT DOESN'T RESTORE R0 ; MINIT .IF EQ,F4P ;IF FOR .IDENT /V.FOR/ .IFF .IDENT /V.F4P/ .ENDC LINTF== 0 DBXXI == 1 DBF4PF == 0 ;DEFINE DUMMY FLAG FOR DEBUG DBIASF == 0 ; DITTO MONNSF == 100 ;NON STANDARD CALL FLAG MONTRI:: PUSH ;SAVE REGS MOV (R1)+,R2 ;GET PARM CNT AND FLAGS MOV @#$OTSV,R3 ;ADDR OF OTS IMPURE AREA TST (R3)+ ;ADDR OF SAVE AREA LIST HEAD .IF EQ,F4P ;IF FOR COMPILIER PUSH (R0) ;PUT IN TRACE BACK CHAIN PUSH R2 ;CALLERS RET ADDR PUSH (R1)+ ;FIRST 3 LETTERS OF CALLED ROUTINE NAME PUSH (R1)+ ;LAST 3 LETTERS .IFF ;HERE FOR FOR+ COMPILIER PUSH <2(R1),(R1)+> ;PUT NAME ON STACK TST (R1)+ ;SKIP TO RET ADDR PUSH <16.(SP),(R3)> ;RET ADDR & CHAIN PTR .ENDC MOV SP,(R3) ;UPDATE TRACE BACK LIST HEAD PUSH R1 ;CO-RTN RET ADDR BIT #MONNSF*400,R2 ;NON-STANDARD CALL ? BNE MONNS ;YES MOV (R5)+,R0 ;FETCH PARM CNT RTS PC ;RET TO CO-ROUTINE MONNS: MOV SP,R3 ;RESTORE REGS ADD #22.,R3 MOV -(R3),R1 MOV -(R3),R2 MOV -(R3),R3 RTS PC ;RET TO CO-ROUTINE ; MONTRF:: ;FUNCTION RETURN ENTRY MOV SP,R3 ;FUNCT RET FLAG BR MONX30 MONTRO:: BIC R3,R3 ;SUB RET FLAG MONX30: MOV @#$OTSV,R2 ;OTS IMPURE PTR MOV (R2)+,R5 ;TRACE BACK CHAIN HEAD .IF EQ,F4P ;IF FOR COMPILIER MOV (R2),R1 ;STACK ADDR OF TRACE BACK CHAIN MOV 6(R1),(R2) ;NEW LIST HEAD MOV 4(R1),R5 ;REAL RET ADDR MOV R1,SP ;POP TRACE BACK TBL OFF STACK ;;; ADD #8.,SP ;POP TRB CHAIN OFF STACK MOV (SP)+,(SP)+ MOV (SP)+,(SP)+ .IFF ;IF FOR+ COMPILIER MOV (R2),SP ;RESET STACK PTR POP <(R2),R5> ;RESET LIST HEAD&GET RET ADDR MOV (SP)+,(SP)+ ;REMOVE REMAINDER OF CHAIN .ENDC BIT R3,R3 ;FUNCT RET? BEQ MONX40 ;NO MOV R0,(SP) ;SAVE R0. WILL BE RETURNED TO CALLER MONX40: POP ;RESTORE REGS RTS PC ;RET TO CALLER DBXXT:: MONIP:: RTS PC ; DBSTW:: .WORD 0 .END