Trailing-Edge
-
PDP-10 Archives
-
tops10_tools_bb-fp64a-sb
-
10,7/stopcd/stopcd.mac
There are 3 other files named stopcd.mac in the archive. Click here to see a list.
TITLE STOPCD Type out stopcd type information
SUBTTL Tarl Neustaedter
SEARCH UUOSYM,SCNMAC,MACTEN
.REQUE REL:SCAN
EXTERN .TYOCH
TWOSEG
RELOC 400000
RELOC
OPDEF CALL [PUSHJ P,]
T4=1+<T3=1+<T2=1+<T1=1>>>
P4=1+<P3=1+<P2=1+<P1=5>>>
P=17
GTBDST:
CONFIG: BLOCK 5
SYSDAT: BLOCK 2
UPTIME: BLOCK 1
SYSNDS: BLOCK 1 ;Number of debug stopcds
SYSNJS: BLOCK 1 ;number of job stopcds
SYSNCS: BLOCK 1 ;Number of CPU stopcodes
SYSNIS: BLOCK 1 ;Number of BUGINFs
CNFWHY: BLOCK 1 ;why reload
CNFDBG: BLOCK 1 ;debugf
SYSPC: BLOCK 1 ;stopcd pc
SYSCD: BLOCK 1 ;stopcd name
SYSJN: BLOCK 1 ;stopcd job
SYSTN: BLOCK 1 ;stopcd tty
SYSPN: BLOCK 1 ;stopcd program
SYSUU: BLOCK 1 ;stopcd uuo
SYSUP: BLOCK 1 ;stopcd PC
SYSPP: BLOCK 1 ;stopcd ppn
STACK: BLOCK 100 ;stack
RELOC
PDL: IOWD 100,STACK ;pointer to stack
GTBTAB: %CNFG0 ;CONFIG string
%CNFG1
%CNFG2
%CNFG3
%CNFG4
%CNDT0 ;SYSDAT string
%CNDT1
%CNSUP ;System uptime
%SYNDS ;Number of debug stopcds
%SYNJS ;Number of job stopcds
%SYNCS ;Number of CPU stopcodes
%SYNIS ;Number of BUGINF's
%CNWHY ;why reload
%CNDBG ;debugf
%SYSPC ;stopcd pc
%SYSCD ;stopcd name
%SYSJN ;stopcd job
%SYSTN ;stopcd tty
%SYSPN ;stopcd program
%SYSUU ;stopcd uuo
%SYSUP ;stopcd PC
%SYSPP ;stopcd ppn
GTBIOD: XWD GTBTAB-.,GTBTAB ;iowd to gettabs to do
TIMTAB: [ASCIZ \week\]
[ASCIZ \day\]
[ASCIZ \hour\]
[ASCIZ \minute\]
[ASCIZ \second\]
DBFTAB: [ASCIZ \System being debugged\]
[ASCIZ \Reload on debug stopcd's\]
[ASCIZ \Reload on job errors\]
[ASCIZ \No auto reloads\]
[ASCIZ \Stop system on cpu stopcd on any cpu\]
[ASCIZ \Don't do continuable stopcd dump on debug stopcds\]
[ASCIZ \Don't do continuable stopcd dump on job stopcds\]
[ASCIZ \Don't do continuable stopcd dump on cpu stopcds\]
[ASCIZ \Call CRSCPY on next clock tick on boot cpu\]
[ASCIZ \Call KDPLDR on next clock tick\]
[ASCIZ \Copy output to FRCLIN to system cty\]
[ASCIZ \Disable next CRSCPY request\]
[ASCIZ \Reload in progress (RECON. function .RCRLD)\]
[ASCIZ \Reload after dump (don't dump twice in MONBTS)\]
[ASCIZ \?illegal bit set\]
[ASCIZ \?illegal bit set\]
[ASCIZ \?illegal bit set\]
[ASCIZ \?illegal bit set\]
[ASCIZ \Can enter EDDT on CPU0 using xct .c0ddt\]
[ASCIZ \Can enter EDDT on CPU1 using xct .c1ddt\]
[ASCIZ \Can enter EDDT on CPU2 using xct .c2ddt\]
[ASCIZ \Can enter EDDT on CPU3 using xct .c3ddt\]
[ASCIZ \Can enter EDDT on CPU4 using xct .c4ddt\]
[ASCIZ \Can enter EDDT on CPU5 using xct .c5ddt\]
DBGIOD: XWD DBFTAB-.,DBFTAB
START: RESET ;Close down IO
MOVE P,PDL
MOVE P2,GTBIOD ;Gettab IOWD
MOVEI P3,GTBDST ;Place to store GETTAB info
GTCNFG: MOVE P1,(P2) ;Get gettab request
GETTAB P1, ;Get it
SETZ P1, ;not there, use default
MOVEM P1,(P3) ;Stash result
AOS P3 ;increment pointer
AOBJN P2,GTCNFG ;and loop
TYPOUT: CALL .TCRLF## ;Blank space
OUTSTR CONFIG ;Type out monitor name
OUTCHR [.CHTAB] ;seperate
OUTSTR SYSDAT ;Type out creation date
CALL .TCRLF##
CALL .TCRLF##
;uptime
MOVE P1,UPTIME ;Get uptime
IDIVI P1,^D60 ;convert to seconds
IDIVI P1,^D60 ;
PUSH P,P2 ;save seconds
IDIVI P1,^D60 ;
PUSH P,P2 ;save minutes
IDIVI P1,^D24 ;
PUSH P,P2 ;save hours
IDIVI P1,^D7 ;
PUSH P,P2 ;save days
PUSH P,P1 ;save weeks
MOVE P2,[XWD -5,TIMTAB] ;Pointer to names of times
SETO P3, ;number of numbers we have printed
OUTSTR [ASCIZ \Uptime: \]
UPTIM1: POP P,P1 ;restore a quantity
JUMPE P1,UPTIM2 ;if nothing, don't type this out
AOSE P3 ;printed anything yet?
OUTSTR [ASCIZ \, \] ;seperate
MOVE T1,P1 ;number
CALL .TDECW## ;type it out in decimal
OUTCHR [" "] ;space
OUTSTR @(P2) ;type out name
CAIE P1,1 ;was it singular?
OUTCHR ["s"] ;no, make it plural
UPTIM2: AOBJN P2,UPTIM1 ;and loop
CALL .TCRLF## ;eol
;Why reload
OUTSTR [ASCIZ /Reason for last reload: /]
MOVE T1,CNFWHY ;get it
CALL .TSIXN## ;and type it out
;stopcds
SKIPN SYSNDS ;any debug stopcodes?
SKIPE SYSNJS ; or job stopcodes?
JRST STPCOD ;yes, type it out
SKIPN SYSNCS ;any CPU stopcodes?
SKIPE SYSNIS ; or BUGINFs?
JRST STPCOD ;yes, type it out
;why reload comment
OUTCHR [" "] ;seperating space
MOVEI P1,.GTWHY ;Gettab table with why reload comment
WHYCM1: MOVE T1,P1 ;Copy gettab request
GETTAB T1, ;ask for the value
JRST WHYCM4 ;Must be end of comment
MOVEI P3,5 ;5 characters to output
MOVE P4,[POINT 7,T1] ;byte pointer to text
WHYCM2: ILDB P2,P4 ;Get a character
JUMPE P2,WHYCM4 ;Terminate string on zero character
OUTCHR P2 ;type it out
SOJG P3,WHYCM2 ;loop
ADD P1,[1,,0] ;Set up for next gettab request
JRST WHYCM1 ;loop
WHYCM4: CALL .TCRLF## ;eol
CALL .TCRLF##
OUTSTR [ASCIZ \No STOPCDs since last reload.\]
CALL .TCRLF##
JRST DEBUGF ;type out debugf bits
;last stopcd typeout
STPCOD:
CALL .TCRLF## ;terminate why reload line
SETO P2, ;No stopcodes yet
STPINF: SKIPN T1,SYSNIS ;Any debug stopcodes?
JRST STPCPU ;no, check job stopcodes
CALL .TDECW## ;type number out
OUTSTR [ASCIZ \ BUGINF\]
CAIE T1,1 ;was it singular?
OUTCHR ["s"] ;no, make it plural
AOS P2 ;Bump stopcode counter
STPCPU: SKIPN T1,SYSNCS ;Any debug stopcodes?
JRST STPDEB ;no, check job stopcodes
AOSE P2 ;Bump stopcode counter
OUTSTR [ASCIZ \, \] ;Yes, a seperator
CALL .TDECW## ;type number in decimal
OUTSTR [ASCIZ \ CPU stopcd\]
CAIE T1,1 ;was it singular?
OUTCHR ["s"] ;no, make it plural
STPDEB: SKIPN T1,SYSNDS ;any debug stopcds?
JRST STPJOB ;no, go to descriptor part
AOSE P2 ;Bump stopcode counter
OUTSTR [ASCIZ \, \] ;Yes, a seperator
CALL .TDECW## ;type number out
OUTSTR [ASCIZ \ DEBUG stopcd\]
CAIE T1,1 ;was it singular?
OUTCHR ["s"] ;no, make it plural
STPJOB: SKIPN T1,SYSNJS ;any job stopcds?
JRST STPDSC ;no, go to descriptor part
AOSE P2 ;Bump stopcode counter
OUTSTR [ASCIZ \, \] ;Yes, a seperator
CALL .TDECW## ;type out
OUTSTR [ASCIZ \ JOB stopcd\]
CAIE T1,1 ;was it singular
OUTCHR ["s"] ;no, make it plural
STPDSC: OUTSTR [ASCIZ \.\] ;terminate line.
CALL .TCRLF##
OUTSTR [ASCIZ \Last stopcd name was \]
SKIPN T1,SYSCD ;stopcode name
HLLZ T1,SYSPC ;If old monitor, might be here.
CALL .TSIXN## ;in sixbit
OUTSTR [ASCIZ \ called from exec PC \]
MOVE P1,SYSPC ;get the pc
TLZ P1,777740 ;blow away flag bits
SUBI P1,1 ;Decrement to point at XCT
CALL PCTYPE ;type it out as a PC
CALL .TCRLF## ;eol
;who did it
SKIPN P1,SYSJN ;job number - was there one?
JRST DEBUGF ;nope, skip over this stuff
OUTSTR [ASCIZ \Job \]
MOVE T1,P1 ;Job numer
CALL .TDECW## ;type job number
MOVE T1,SYSPP ;user PPN
CALL .TPPNW## ;in ppn format
OUTSTR [ASCIZ \ on \]
MOVE T1,SYSTN ;tty name
CALL .TSIXN## ;in sixbit
OUTSTR [ASCIZ \ running \]
MOVE T1,SYSPN ;program name
CALL .TSIXN##
CALL .TCRLF## ;eol
;what called it
OUTSTR [ASCIZ \UUO was \]
MOVE T1,SYSUU ;UUO
CALL .TXWDW## ;Type out as XWD
OUTSTR [ASCIZ \ at user PC \]
MOVE P1,SYSUP ;User pc
CALL PCTYPE ;type it out as a PC
CALL .TCRLF## ;eol
DEBUGF: SKIPN P1,CNFDBG ;Anything in DEBUGF?
JRST DONE ;Nope.
OUTSTR [ASCIZ \Debugging status:\]
CALL .TCRLF## ;put on a seperate line
MOVSI P2,400000 ;Bit 0
MOVE P3,DBGIOD ;iowd for debugf bit names
DEBUG0: TDNN P2,P1 ;Is this bit lit?
JRST DEBUG1 ;no, keep on going
OUTCHR [.CHTAB] ;indent
OUTSTR @(P3) ;type out the funny text
CALL .TCRLF## ;and new line
DEBUG1: ROT P2,-1 ;shift bit around...
AOBJN P3,DEBUG0 ;loop on all the bits
DONE: EXIT 1, ;exit
JRST DONE ;and loop on the toad.
PCTYPE: MOVE T1,P1 ;copy to usefull place
TLNN T1,-1 ;is it a fullword or a half word?
JRST PCTYP1 ;halfword
CALL .TXWDW## ;Fullword
TRNA ;and return
PCTYP1: CALL .TOCTW## ;type PC out in octal
POPJ P, ;and return
END START