.TITLE DEBP03 - OUTPUT NEW VALUE, PC, TRACEBACK CHAIN .SBTTL DEBP03 - TITLE PAGE .IDENT /V01.00/ .PSECT $$$DEB ; ; THIS ROUTINE OUTPUTS THE NEW VALUE AND PC OF THE INSTRUCTION MODIFYING ; THE WATCHED LOCATION. IT ALSO OUTPUTS THE FORTRAN TRACEBACK CHAIN. ; ; VERSION: V01.00 ; ; AUTHOR: R.W. STAMERJOHN MAPC 07-APR-81 ; ; MODIFICATION HISTORY: ; ; V01.00 RWS 07-APR-81 INITIAL VERSION .SBTTL DEBP03 - DOCUMENTATION ; ;+ ; DEBP03 V01.00 ; ; DEBP03 IS A PART OF THE MONSANTO DEBUGGING PACKAGE. THIS MODULE ; IS CALLED WHENEVER THE WATCHED VALUE CHANGES. IT OUTPUTS THE ; THE ADDRESS OF THE VALUE, THE NEW VALUE, AND THE PC. IT ALSO ; OUTPUTS THE FORTRAN TRACEBACK CHAIN. ; ; THE FOLLOWING NOTES APPLY TO THIS ROUTINE: ; ; 1. THE ROUTINE USES THE WORD REFERENCED BY ".MOLUN" FOR THE ; LUN TO USE FOR MESSAGES. THIS WORD IS SET BY TKB TO A LUN ; ASSIGNED TO TI:. IF LINKING TO A FORTRAN PROGRAM, THE OTS ; WILL DEFINE .MOLUN. OTHERWISE, LINK THE MODULE DEBLUN ; WITH THIS MODULE. ; ; 2. THE ROUTINE USES EVENT FLAG 32 FOR ITS I/O. THE GLOBAL ; NAME $$DFLG IS USED FOR THIS NAME AND CAN BE CHANGED WITH ; THE TKB GBLSYM SWITCH IF THERE IS A CONFLICT. ; ; 3. THE ROUTINE DECLARES A FORTRAN ERROR 98 TO CAUSE THE ; TRACEBACK CHAIN TO BE OUTPUT. ; ;- .SBTTL DEBP03 - DECLARATIONS .DSABL GBL ; ; MACRO LIBRARY CALLS: ; ; DIRECTIVE MACROS. ; .MCALL DIR$ ;ISSUE DIRECTIVE .MCALL QIOW$ ;ISSUE QIO AND WAIT ; ; GLOBAL DECLARATIONS: ; ; MODULE ENTRY POINTS. ; .GLOBL $$DOUT ;OUTPUT MESSAGE ; ; GLOBAL REFERENCES: ; .GLOBL .MOLUN ;TI: LUN NUMBER .GLOBL IO.WVB ;WRITE VIRTUAL BLOCK I/O .SBTTL DEBP03 - LOCAL DATA ; ; LOCAL SYMBOLS: ; $$DFLG == 32. ;I/O EVENT FLAG ; ; LOCAL DATA: ; ; DIRECTIVES. ; ERRDPB: QIOW$ IO.WVB,,$$DFLG,,,, ; ; MESSAGE. ; .NLIST BEX ERRMSG: .ASCII <15><12>/*** VALUE AT ADDRESS / ADFLD: .ASCII /000000 CHANGED, NEW VALUE: / VAFLD: .ASCII /000000 PC: / PCFLD: .ASCII /000000 ***/<15><12> ERRSIZ = .-ERRMSG .LIST BEX .EVEN .SBTTL $$DOUT * OUTPUT NEW VALUE, PC, TRACEBACK CHAIN ; ;+ ; THIS ROUTINE IS CALLED WHENEVER A WATCHED VALUE CHANGES. IT ; OUTPUTS THE ADDRESS OF THE VALUE, THE NEW VALUE AND THE PC ; OF THE TRACED INSTRUCTION. IT ALSO OUTPUTS THE FORTRAN TRACEBACK ; CHAIN BY DECLARING AN ERROR 98. ; ; INPUT: ; ; CALLED FROM $$DTRP WITH: ; ; R3 = PC OF TRACED INSTRUCTION ; R4 = ADDRESS OF WATCHED LOCATION ; R5 = NEW VALUE STORED IN LOCATION ; OUTPUT: ; ; MESSAGE WRITTEN TO .MOLUN. ; ; ; REGISTERS: USES R0-R5 SAVES: NONE. ; ;- ; $$DOUT: ;REF. LABEL ; ; FORMAT MESSAGE WITH ADDRESS, NEW VALUE, AND PC. ; MOV #ADFLD+6,R0 ;GET ADDRESS TO STORE VALUE MOV R4,R1 ;GET ADDRESS OF CHANGED LOCATION CALL DBINOC ;CONVERT TO OCTAL AND STORE MOV #VAFLD+6,R0 ;GET ADDRESS TO STORE VALUE MOV R5,R1 ;GET NEW VALUE CALL DBINOC ;CONVERT TO OCTAL AND STORE MOV #PCFLD+6,R0 ;GET ADDRESS TO STORE PC MOV R3,R1 ;GET PC OF INSTRUCTION CALL DBINOC ;CONVERT TO OCTAL AND STORE ; ; OUTPUT MESSAGE TO USER TERMINAL. GET LUN NUMBER FROM .MOLUN WHICH ; IS INITIALIZED BY TASK-BUILDER. ; MOV .MOLUN,ERRDPB+Q.IOLU ;STORE LUN NUMBER DIR$ #ERRDPB ;OUTPUT MESSAGE ; ; DECLARE FORTRAN ERROR TO OUTPUT TRACEBACK CHAIN. ; TRAP <128.+98.> ;FORTRAN ERROR 98 ; ; RETURN TO CALLER. ; RETURN ;ALL DONE .SBTTL DBINOC * CONVERT BINARY TO OCTAL ; ;+ ; THIS SUBROUTINE CONVERTS BINARY TO ASCII OCTAL. IT ALWAYS ZERO ; FILLS THE RESULT. ; ; INPUT: ; ; CALL WITH: R0 = ADDRESS OF END OF SIX-CHARACTER FIELD ; R1 = NUMBER TO CONVERT ; ; OUTPUT: ; ; NUMBER STORED IN FIELD, WITH ZERO FILLING IF NEEDED. ; ; ; REGISTERS: USES R0-R2 SAVES: R3-R5 ; ;- ; DBINOC: MOV #5,R2 ;SET LOOP COUNTER 1000$: MOV R1,-(SP) ;SAVE CURRENT VALUE BIC #177770,(SP) ;CLEAR ALL BUT LOW BITS ADD #'0,(SP) ;CONVERT TO ASCII DIGIT MOVB (SP)+,-(R0) ;STORE CHARACTER IN FIELD ASR R1 ;SHIFT OUT LOW DIGIT ASR R1 ; ... ASR R1 ; ... DEC R2 ;COUNT DIGIT BNE 1000$ ; IF NE - LOOP MOVB #'0,-(R0) ;PRESET POSITIVE NUMBER TST R1 ;WAS NUMBER NEGATICE BPL 9999$ ; IF PL - NO, SKIP MOVB #'1,(R0) ;STORE NEGATIVE DIGIT 9999$: RETURN ;RETURN TO CALLER .END