Trailing-Edge
-
PDP-10 Archives
-
BB-J711A-BM
-
language-sources/syserr.mac
There are 64 other files named syserr.mac in the archive. Click here to see a list.
TITLE SYSERR -- SYSTEM ERROR FILE PROCESSOR -- MAINLINE CODE
SUBTTL VERSION 14(1267) K. COYE/ RLD/ PJB/ ES/ TJW/ LWE/ SRL/ GSK
;COPYRIGHT (C) 1972,1975,1977,1978,1979 BY
;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
;
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
;TRANSFERED.
;
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
SEARCH SYRUNV
SEARCH SYRLOW ;LOW SEG DEFINITIONS
.REQUIRE SYRLIB
;DUMALL -- DUMMY MACRO LEVEL 3
;SUBMACRO DUMXXX
;ARGS
;NONE USED TO HOUSE LEVEL 2 SUBMACRO DUMXXX
;THOSE DEFINED HERE ARE THOSE FULLY PROCESSED BY
;THIS SEGMENT. PART OF EDIT #120.
;EXTERNALS DEFINED HERE ARE IN SYRLIB.MAC, THE LIBRARY
;OF COMMON ROUTINES FOR ALL PARTS OF THE SYSERR PACKAGE.
EXTERNAL HEADRD,ABORT,CHRCHK,DATECK,FILERR,TOOBIG,MBCHAR
EXTERNAL CNISUM,BADNAM,MASSVM,DEVCHK,ERRINT,SKIPIT,IDCHK
EXTERNAL STRCHK,DETCHK,DMPENT,HDRLST,PAGXCD,DVCHAR,TMCHAR
EXTERNAL SAYDAY,GETNBS,.OCTLE,.DECML,.ASCIE,.SIXBT,JSYSER
EXTERNAL .HAFWD,.SPECL,.HTIME,.PPNWW,.ODECW,.UDATE,.TASCI,.PPNWT
EXTERNAL .TDIRW,R5VSIX,MONVER,BADADD,TAB031,TYPAST,BLDPTR
EXTERNAL ACLST,SAVE4P,RET4P,HWDUMP,TYPBCD,LSTEB,JFLOOP,CNIDCD
EXTERNAL XORTAB,BITLST,.DVTAB,.MXBLK,.TRBLK,.SUBLK,.SECBK
EXTERNAL WDCNT,COMPAR,SKPRTN,TYPNBS,TITLST,SKIPWD,ADVBFF
EXTERNAL FIXBUF,STBUFF,INPWD,GOSUM,GETWD,FFPRNT,SLPRNT,CLPRNT,TAPPOS
EXTERNAL TBPRNT,CHROUT,TTYSIX,MDECHR,FIXNAM,ONLLOG,DUMPOS,DSKPOS
;INTERNALS DEFINED HERE ARE FOR USE BY SYRLIB
INTERNAL KONMSK,KLEDMP,MINERB,DEVDSP,MASLTH,ALLTBL
INTERNAL NAMLTH,TYPMES,LINE,ALLLTH,NAMTBL,DUMDAY
INTERNAL DEVTYP,ERINDX,PCSTBL,PDLPNT,BITCHK,ERRLTH
INTERNAL MASNAM,ERRTBL,SUMUPD,MDE000
INTERNAL FE$NAM,BLTTAB
.JBVER==137
LOC .JBVER
BYTE (3)VWHO(9)VSYSER(6)VMINOR(18)VEDIT
SALL
TWOSEG
LOWBEG: ;LOW SEGMENT WILL RESIDE HERE
RELOC 400000
;SOME DUMMY VALUES ARE DEFINED HERE TO MAKE THE PACKAGE
;COMPILE CORRECTLY. THEY SHOULD NEVER BY CALLED
;PART OF EDIT 301.
MDE000:
BLTTAB:
FE$NAM:
SUBTAB:
BITCHK:
DEVTYP:
ERINDX:
KLEDMP:
LINE:
TYPMES: BLOCK 1 ;TO GIVE A LITTLE SPACE
;START -- MAINLINE PROGRAM CODE BEGINS HERE
;SETS UP DEFAULT FILE ARGUEMENTS
;INITIALIZES PUSHDOWN LIST
;CLEARS WORKING STORAGE LOCATIONS
START: JFCL ;EDIT 106
RESET
SETZ F, ;CLEAR STATUS AC
TLO F,F.LSUM ;INITIALIZE TO GIVE SUMMARY BY DEFAULT
MOVE P,PDLPNT ;SETUP PUSHDOWN POINTER
MOVEI T1,TENEND
MOVE T2,T1 ;SAVE WHAT WE ASKED FOR
CORE T1,200000
HALT ;CAN'T GET THAT MUCH??
HRRM T2,.JBFF## ;SETUP NEW JOB DATA AREA VALUE
;START EDIT [1217] - DO AWAY WITH 'FULSEG'
MOVE T1,[XWD INPBLK,INPBLK+1] ;SETUP
SETZM INPBLK
MOVE T2,.JBREL ;CLEAR THE DYNAMIC TABLE AREA TOO [1234]
BLT T1,0(T2) ;CLEAR STORAGE
MOVE T1,[XWD 112,11] ;SETUP
GETTAB T1, ;CHECK WHICH MONITOR WE ARE UNDER
JRST .+3 ;TOPS-10 PRE 507
CAIN T1,40000 ;TOPS-20?
SETOM TOPMON ;YES! - (-1 MEANS UNDER TOPS-20)
;END EDIT [1217]
MOVEM 11,OVRBLK ;EDIT #120-SAVE IN SIXBIT THE DEVICE
;WE CAME FROM FOR FUTURE GETSEGS.
MOVEM 7,OVRBLK+4 ;[147]SAVE P,PN TOO
SKIPN 11 ;BUT IF 0 WAS STORED FOR TOPS20
PUSHJ P,DEVFIX ;GO AND SUBSTITUTE A UNIT
MOVEM 7,OVRBLK+4 ;[147] SAVE P,PN TOO
MOVE T1,[XWD FLGST,FLGST+1] ;SETUP TO INITIALIZE SWITCH STORAGE LOCATIONS TO -1
SETOM FLGST
BLT T1,FLGND ;ALL NOW = -1
MOVE T1,[XWD INPSPC,INPBLK] ;SETUP TO XFER DEFAULT FILE ARGS
BLT T1,BLTEND ; DO IT!
SKIPN TOPMON ;TOPS-20?
JRST SYSINF ;NO-DON'T CHANGE DEFAULTS
MOVE T1,T20DEV ;GET NEW DEFAULT
MOVEM T1,INPBLK+1 ;AND STORE IT
;FALL INTO SYSINF ROUTINE
;SYSINF -- ROUTINE TO GET SYSTEM INFORMATION
;DATE,DAYTIME
SYSINF: SKIPE TOPMON ;TOPS-20?
JRST T20INF ;YES
MOVE T1,[XWD 53,11] ;GET RTODAYS DATE
GETTAB T1, ;IN UNIV FORMAT
FATAL <CAN'T GET TODAY'S DATE??>
HLRZ T1,T1 ;DATE PORTION INTO RH
MOVEM T1,.DATE ;STORE IT AWAY
MSTIME T1, ;GET TIME OF DAY IN MS
DIVI T1,^D1000 ;CONVERT TO SECONDS
MOVEM T1,.TIME ;SAVE IT
JRST INICHR ;
;INICHR -- ROUTINE TO INITIALIZE THE ENTRY CHARACTERISTICS TABLE
INICHR: MOVE T1,[XWD ENTCHR,ENTCHR+1]
HRLZI T2,E.LSUM ;DEFAULT TO LIST SUMMARY ONLY
MOVEM T2,ENTCHR
BLT T1,CHREND ;E.LSUM BIT SET THROUGHOUT TABLE
PUSHJ P,DIALOG ;GO TALK TO USER
PUSHJ P,SETDAT ;GO SEE IF USER TYPED /BEFORE OR /AFTER
;FALL INTO FILACT ROUTINE
JRST FILACT
;HERE SUBSTITUTE A DEV NAME FOR TOPS20 TO FIND NEXT HIGH SEG
DEVFIX: MOVE T1,[SIXBIT/SYS/]
MOVEM T1,OVRBLK ;A LOCATION FOR OVERLAY SPECS.
SETZM OVRBLK+4 ;NO SAVED P,PN
POPJ P,0 ;GO BACK
T20INF: GTAD ;GET TOPS20 INTERNAL DATE/TIME AT GMT
MOVE T2,T1
HLRZ T1,T1 ;SAVE DATE ONLY
MOVEM T1,.DATE ;STORE IT
HRRZ T1,T2 ;NOW SECONDS SINCE MIDNIGHT
MOVEM T1,.TIME ;SAVE IT TOO
JRST INICHR ;NOW CONTINUE
;FILACT -- ROUTINE TO PERFORM PRELIMINARY FILE ACTIVITY
;DOES OPEN FOR INPUT, OUTPUT DEV
;DOES LOOKUP FOR INPUT FILE
;DOES ENTER FOR OUTPUT FILE
;DEFAULTS
;DEVICE-DSK
;FILE-INPUT-ERROR.SYS
; -OUTPUT-ERROR.LST
;PPN-USERS OWN
FILACT: TRNE F,F.NOW ;IF ON-LINE LOGGING GO DO SETUPS
JRST ONLLOG ;[713-TJW] WAIT FOR ERRORS, NOTHING OPENED.
OPEN INPCHN,INPBLK ;OPEN INPUT DEV SPECIFIED IN DIALOG
JRST [ WARN <CAN'T OPEN INPUT DEVICE>
JRST START ]
OPEN OUTCHN,OUTBLK ;OPEN OUTPUT DEV SPECIFIED IN DIALOG
JRST [ WARN <CAN'T OPEN OUTPUT DEVICE>
JRST START ]
MOVEI T1,INPCHN ;SETUP FOR DEVCHR CALL
DEVCHR T1,
TLNN T1,DV.DSK ;IS IT A DISK
JRST SHRTLK ;NO DO SHORT LOOKUP
LONGLK: LOOKUP INPCHN,INPFIL ;LOOK FOR ERROR FILE (DEFAULT IS ERROR.SYS)
JRST [ WARN <LOOKUP ERROR ON INPUT FILE>
JRST START ]
TLO F,F.DISK ;REMEMBER IT WAS A DISK
MOVE T1,I.EXT ;(107) GET CURRENT EXT.
MOVEM T1,CUREXT ;AND SAVE IT
MOVE T1,INPFIL+.RBTIM ;GET CREATION TIME/DATE
MOVEM T1,FILDAT ;SAVE IT
JRST DOENTR ;NOW GO DO ENTER
SHRTLK: LOOKUP INPCHN,INPFIL+2 ;FUDGE SHORT LOOKUP
;NOTE THAT PPN WAS PUT IN .RBSIZ
;TO ALLOW THIS
JRST [ WARN <LOOKUP ERROR ON INPUT FILE>
JRST START ]
SETZ T1,
LDB T1,[POINT 12,INPFIL+4,35] ;GET LOW DATE
LDB T2,[POINT 3,INPFIL+3,20] ;GET HIGH DATE.
DPB T2,[POINT 3,T1,23] ;MERGE AND THEN
HRLZ T1,T1 ;MOVE IT TO LH OF T1.
LDB T2,[ POINT 11,INPFIL+4,23] ; GET TIME IN MIN.
MUL T2,[^D60*^D1000] ;CONVERT TO MSEC.
HRR T1,T2 ;PUT IT IN RH OF T1.
MOVEM T1,FILDAT ;PUT IT AWAY SO AS TO SATISFY
;DOENTR: !!
DOENTR: ENTER OUTCHN,OUTFIL ;GET READY FOR OUTPUT LISTING
JRST [ WARN <ENTER ERROR ON OUTPUT FILE>
JRST START ]
;NOW CLEAR THE LOGICAL NAME DEFINITION FOR TOPS20
TRNE F,F.REM ;/REMOTE?[417]
PUSHJ P,REMENT ;INIT FIRST BLOCK
SKIPN TOPMON ;IF NOT TOPS20 RUNNING
JRST HEADRD ;LEAVE NOW
MOVEI T2,[ASCIZ/QAP/] ;PNTR TO NAME
HRLI T2,-1
SETZB T1,T3 ;CODE TO REMOVE ONE LOG. NAME FROM JOB
;WITH NO NEW DEFINITION
CRLNM ;REMOVE THE NAME
WARN <CANNOT CLEAR LOGICAL NAME FOR 'SYSTEM'??>
JRST HEADRD ;NOW DO SOME PROCESSING
;ADDED WITH [417] TO WRITE FIRST WORD
REMENT: OUT OUTCHN, ;DUMMY TO SET BUFFERS
HRLZI T1,<ER.OFF>B26 ;OFFSET CODE TO LEFT HALF
HRRI T1,1 ;START AT NEXT WORD
IDPB T1,OBUFF+1 ;PUT FIRST WORD INTO BUFFER
POPJ P,0 ;RETURN
;DIALOG -- SUBROUTINE TO PROVIDE FOR DIALOG WITH USER
;TO OBTAIN THE FOLLOWING INFO:
;INPUT DEV,FILENAME,EXT,PPN
;OUTPUT DEV,FILENAME,EXT,PPN
;SELECTIVE LISTING CONTROL SWITCHES
;THE SCAN.MAC ROUTINES ARE USED TO DO THE ACTUAL STRING
;SCANNING AND WILL LEAVE INFO IN THE INPUT SPECIFICATIONS
;AND OUTPUT SPECIFICATIONS BLOCK OF THIS PROGRAM
;CHANGED WITH EDIT 225
DIALOG: TLO F,F.TTYO ;SAY ALL OUTPUT TO TTY TILL FURTHER NOTICE
MOVEI T1,CHROUT ;INIT TYPEOUT ROUTINE
PUSHJ P,.TYOCH##
SKIPE ONEPAS ;[225]BEEN HERE ONCE?
JRST STATBK ;[225]YUP [730]
SETOM ONEPAS ;DONT COME BACK
TYPEIT <
FOR HELP, TYPE "/HELP">
MOVE T1,[XWD IARGLN,IARGST] ;SETUP POINTER OF LENGTH,,ADDRESS
;POINTING TO ARG BLOCK FOR .ISCAN
PUSHJ P,.ISCAN ;INITIALIZE SCAN FOR INFO PICKUP
;START EDIT [730]
;SCAN COMMAND STRING & CHECK FOR /KLSTAT SWITCH
STATBK: PUSHJ P,.TCRLF ;CR
MOVE T1,[XWD TARGLN,TARGST] ;SETUP POINTER SAME AS ABOVE FOR .TSCAN
PUSHJ P,.TSCAN ;GO DO THE ACTUAL STRING SCAN
; FOR CUSP TYPE COMMAND STRING
SKIPE TOPMON ;TOPS-20 RUNNING?
JRST STATBL ;YES! - SKIP TOPS-10 TEST
SETO T1,
CAMN T1,KLSTAT ;TYPED /KLSTAT ?
JRST SETINB ;NO! - OK
WARN <CAN NOT USE KLSTAT UNDER TOPS-10>
JRST START ;START OVER
STATBL: MOVE T1,KLSTAT ;GET SWITCH VALUE
CAMN T1,[-1] ;TYPED /KLSTAT ?
JRST SETINP ;NO! - EXECUTE COMMAND
CAME T1,[SIXBIT /ON/] ;TURN IT ON ?
JRST STATOF ;NO! - TEST FOR OFF
MOVEI T1,.SFSTS ;SET SMON FUNCTION
SETO T2, ;ENABLE!
SMON ;DO IT
ERCAL JSYSER ;ERROR ? [737]
JRST START ;GET ANOTHER COMMAND LINE
STATOF: CAME T1,[SIXBIT /OFF/] ;TURN IT OFF ?
JRST STATBD ;NO! - BAD ARGUMENT
MOVEI T1,.SFSTS ;SET SMON FUNCTION
SETZ T2, ;DISABLE!
SMON ;DO IT
ERCAL JSYSER ;ERROR ? [737]
JRST START ;GET ANOTHER COMMAND LINE
STATBD: WARN <ILLEGAL ARGUMENT TO KLSTAT SWITCH>
JRST START ;START OVER
;END EDIT [730]
;LETS UPDATE THE DEFAULT INFO PLACED IN LOOKUP
;AND INIT BLOCKS EARLIER WITH THE BLT
SETINP: MOVEI T2,[ASCIZ/QAP/] ;PNTR TO NAME
MOVEI T3,[ASCIZ/PS:<SYSTEM>/] ;PNTR TO DEFINITION
MOVEI T1,4 ;CODE TO CREATE A LOGICAL NAME FOR JOB
HRLI T2,-1
HRLI T3,-1
CRLNM ;MAKE ASSIGNMENT
FATAL <CANNOT CREATE TOPS-20 LOGICAL NAME FOR 'SYSTEM'??>
SETINB: SKIPE T1,I.EXT+2 ;NONZERO=GO CHECK FOR DEVICE
PUSHJ P,SETFIX ;GO DIDDLE
SKIPE T1,I.DEV ;PICKUP INPUT DEVICE, SKIP IF ZERO
MOVEM T1,INPBLK+1
JUMPN T1,SETIN1
MOVE T1,IDVFLT
SKIPE TOPMON ;TOPS20 RUNNING?
MOVE T1,[SIXBIT/QAP/] ;CHANGE THE DEFAULT INPUT DEVICE
MOVEM T1,I.DEV
SETIN1: SKIPE T1,I.NAM ;FILENAME LIKEWISE
MOVEM T1,INPFIL+.RBNAM
JUMPN T1,SETIN2
MOVE T1,IFLFLT
MOVEM T1,I.NAM
SETIN2: SKIPN T1,I.EXT ;EXTENSION
JRST SETIN3 ;NO EXTENSION WAS TYPED
HLLZM T1,INPFIL+.RBEXT ;STORE EXTENSION
JRST GETIPP
SETIN3: MOVE T1,IEXFLT
MOVEM T1,I.EXT
GETIPP: SKIPE T1,I.DIR ;PPN FOR INPUT
MOVEM T1,INPFIL+.RBPPN
MOVEM T1,INPFIL+.RBSIZ ;DUMMY TO ALLOW SHORT LOOKUP
;AT INPFIL+2
;NOW DO SAME FOR OUTPUT SPECIFICATIONS
SETOUT: SKIPE T1,O.DEV ;PICKUP OUTPUT DEVICE, SKIP IF ZERO
MOVEM T1,OUTBLK+1
CAMN T1,[SIXBIT/TTY/] ;[1221]OUTPUT TO TTY?
TRO F,F.TTY ;[1221]YES. REMEMBER THAT.
JUMPN T1,SETOU1
MOVE T1,ODVFLT
MOVEM T1,O.DEV
SETOU1: SKIPE T1,O.NAM ;FILENAME LIKEWISE
MOVEM T1,OUTFIL
JUMPN T1,SETOU2
MOVE T1,OFLFLT
MOVEM T1,O.NAM
SETOU2: SKIPN T1,O.EXT ;EXTENSION
JRST SETOU3 ;NO EXTENSION WAS TYPED
HLLZM T1,OUTFIL+1 ;STORE EXTENSION
JRST GETOPP
SETOU3: MOVE T1,OEXFLT
MOVEM T1,O.EXT
GETOPP: SKIPE T1,O.DIR ;PPN FOR OUTPUT
MOVEM T1,OUTFIL+3
MOVE T1,[-1] ;INITIAL VALUE OF DEV
CAME T1,DEV ;DD USER SPECIFY /DEV
TLO F,F.DEV ;YES LITE THE BIT
CAME T1,NDEV ;[325] "/NDEV:"?
TRO F,F.NDEV ;YUP
CAME T1,ENTRY ;[731]/ENTRY?
TRO F,F.ENT ;YES
CAME T1,OCTAL ;[1146]/OCTAL
TRO F,F.OCT ;[1146]YUP
CAME T1,REMOTE ;[417]/REMOTE?
PUSHJ P,REMFIX ;YUP
CAME T1,ID ;DID USER SAY /ID:?
TLO F,F.ID ;YUP.
CAME T1,STR ;/STR?
TLO F,F.STR
CAME T1,DETAIL
TLO F,F.DET
CAMN T1,BRIEF ;/BRIEF ? [724]
JRST SWNOW ;NO! - SKIP SET-UP
TRO F,F.BRF
MOVEI T2,OUTSIZ ;SETUP BUFFER SIZE
MOVEM T2,OUTCNT
MOVE T2,[POINT 7,OUTBUF] ;SETUP BUFFER POINTER
MOVEM T2,OUTBYT
MOVEI T2,BRIEF ;SETUP PAGE WIDTH
MOVEM T2,CHRCNT
SWNOW: CAME T1,NOW
TRO F,F.NOW
CAME T1,RETRY ;EDIT 126
TLO F,F.TRY ;USER SAID /RETRY:
CAME T1,SEQ ;/SEQ:?
TRO F,F.SEQ ;YES
SETZM SEQIND ;SWITCHES HAVE BEEN STORED, CURRENT OFFSET IS
;IS SET TO ZERO NOW
skipl all ;[1264] /all ?
pjrst setswr ;[1264] yes, zero swe,sre
MOVEI T1,SREDEF ;GET DEFAULT VALUE OF SRE
MOVEI T2,SWEDEF ;AND SWE IN CASE USER DIDNT SPECIFY.
SKIPGE SRE ;ALREADY SETUP?
MOVEM T1,SRE ;NO USE DEFAULT
SKIPGE SWE ;WHAT ABOUT SWE?
MOVEM T2,SWE ;NO GET DEFAULT.
POPJ P, ;RETURN
setswr: setzm sre ;[1264] make sre 0 for /all
setzm swe ;[1264] make swe 0 for /all
popj p, ;[1264] return
;[417]
REMFIX: PUSH P,T1 ;SAVE T1
TRO F,F.REM ;SET THE FLAG IN F
MOVE T1,[SIXBIT/DAT/] ;NEW FILE XT
MOVEM T1,OUTFIL+1
MOVEI T1,13 ;MODE 13-IMAGE BINARY
MOVEM T1,OUTBLK ;CHANGE FOR OPEN UUO
POP P,T1 ;RESTORE T1
POPJ P,0 ;AND RETURN
SETFIX: MOVE T1,I.EXT+1 ;GET WHAT SCAN DID
TLNN T1,400000 ;ON=NO DEV SPEC'D
POPJ P,0 ;SOMETHING THERE ALREADY
SKIPE I.DIR ;[316]P,PN CALLED OUT?
MOVSI T1,'DSK' ;YES,CHANGE DEF. DEVICE
SKIPN I.DIR ;END [316]
MOVE T1,[SIXBIT/SYS/]
SKIPE TOPMON ;TOPS20 RUNNING?
MOVE T1,T20DEV ;YES,CHANGE DEFAULT INPUT DEVICE
MOVEM T1,I.DEV ;FIX IT
POPJ P,0
;HERE IS THE DUMMY PROCSB FOR THIS HIGH SEG
;IT SAVES THE AC'S AND THEN CALLS OVRLAY FOR REPLACEMENT
;WITH SYSERB.HGH
PROCSB: MOVE T1,[SIXBIT/SYSERB/]
MOVEM T1,OVRBLK+1 ;INTO THE SPEC AREA
SETZ 15,
MOVEM 17,SAVEAC+17
MOVEI 17,SAVEAC
BLT 17,SAVEAC+16 ;TUCK AWAY OUR AC'S
JRST OVRLAY ;NOW PLEASE OVERLAY US WITH PROCSB
;HERE IS THE DUMMY PROCSC FOR THIS HIGH SEG
;IT SAVES THE AC'S AND THEN CALLS OVRLAY FOR REPLACEMENT
;WITH SYSERC.HGH
PROCSC: MOVE T1,[SIXBIT/SYSERC/]
MOVEM T1,OVRBLK+1 ;INTO THE SPEC AREA
SETZ 15,
MOVEM 17,SAVEAC+17
MOVEI 17,SAVEAC
BLT 17,SAVEAC+16 ;TUCK AWAY OUR AC'S
JRST OVRLAY ;NOW PLEASE OVERLAY US WITH PROCSC
;HERE IS THE DUMMY PROCSD FOR THIS HIGH SEG
;IT SAVES THE AC'S AND THEN CALLS OVRLAY FOR REPLACEMENT
;WITH SYSERD.HGH
PROCSD: MOVE T1,[SIXBIT/SYSERD/]
MOVEM T1,OVRBLK+1 ;INTO THE SPEC AREA
SETZ 15,
MOVEM 17,SAVEAC+17
MOVEI 17,SAVEAC
BLT 17,SAVEAC+16 ;TUCK AWAY OUR AC'S
JRST OVRLAY ;NOW PLEASE OVERLAY US WITH PROCSC
;HERE IS THE DUMMY PROCSA FOR THIS HIGH SEG
;IT SAVES THE AC'S AND THEN CALLS OVRLAY FOR REPLACEMENT
;WITH SYSERA.HGH
PROCSA: MOVE T1,[SIXBIT/SYSERA/]
MOVEM T1,OVRBLK+1 ;INTO THE SPEC AREA
SETZ 15,
MOVEM 17,SAVEAC+17
MOVEI 17,SAVEAC
BLT 17,SAVEAC+16 ;TUCK AWAY OUR AC'S
JRST OVRLAY ;NOW PLEASE OVERLAY US WITH PROCSA
PROCSN: MOVE T1,[SIXBIT/SYSERN/]
MOVEM T1,OVRBLK+1 ;INTO THE SPEC AREA
SETZ 15,
MOVEM 17,SAVEAC+17
MOVEI 17,SAVEAC
BLT 17,SAVEAC+16 ;TUCK AWAY OUR AC'S
JRST OVRLAY ;NOW PLEASE OVERLAY US WITH PROCSA
;;;;REMOVED BY EDIT 713-TJW
;;;;HOW /NOW WOULD BE DONE WAS RETHOUGHT
;;;;PROCSI: MOVE T1,[SIXBIT/SYSERI/]
;;;; MOVEM T1,OVRBLK+1 ;INTO THE SPEC AREA
;;;; SETZ 15,
;;;; MOVEM 17,SAVEAC+17
;;;; MOVEI 17,SAVEAC
;;;; BLT 17,SAVEAC+16 ;TUCK AWAY OUR AC'S
;;;; JRST OVRLAY ;NOW PLEASE OVERLAY US WITH PROCSA
;SETDAT -- SUBROUTINE TO LOOK AT /END AND /BEGIN
;SWITCHES AND CONVERT THEM TO START AND END DATE
;CALL PUSHJ P,SETDAT
;
;RETURN CALL+1
;BOTH BEGIN AND END ARE INITIALIZED TO -1 FOR SCAN USE
;STDATE=0 OR VALUE OF /BEGIN SWITCH IF TYPED
;ENDATE=377777,,-1 OR VALUE OF /END IF TYPED
;IF USER DOES NOT SPECIFY TIME CUTOFF ASSUME 00:00 HRS.
;USES T1-T4
;[EDIT 214] CHANGES LOCAL TIME TO GMT TIME IF UNDER TOPS20.
SETDAT: TLZ F,F.DATE ;ASSUME NO DATE CONSTRAINTS DEFAULT
SETZM STDATE ;ZAP
SKIPGE T1,END ;CHECK FOR /END SWITCH
MOVE T1,[377777777777] ;NONE TYPED-SAY ETERNITY IS CUTOFF
;THESE TWO LINES REMOVED WITH EDIT [741] - SPR #20-11775
; TRNN T1,-1 ;DID USER SPECIFY TIME CUTOFF AS WELL
; HRRI T1,-1 ;NO-SAY 2400 FOR HIM TO ALLOW ALL DAY AS GOOD
MOVEM T1,ENDATE ;STORE AS CUTOFF DATE
SKIPL T2,BEGIN ;/SINCE SPECIFIED
;-1 SAYS NO SWITCH WAS STORED
MOVEM T2,STDATE ;STORE AS STARTING DATE
CAMN T1,[377777777777] ;DID USER TYPE /END?
SKIPL BEGIN ;SKIP IF NO /BEGIN SPECIFIED
TLO F,F.DATE ;SAY WE SAW A TIME SWITCH
SKIPN TOPMON ;TOPS20 RUNNING?
POPJ P,0 ;NO,LEAVE NOW
SKIPGE END ;/END SPECIFIED?
JRST SETDA1 ;NO
SETOM T2
SETZB T3,T4
ODCNV ;GET CURRENT TIME
MOVE T2,ENDATE
TLNE T4,1B19 ;[306]DAYLIGHT SAVINGS?
SUBI T2,25252 ;YES SUB 1 HOUR
LSH T4,14
ASH T4,-36
IMULI T4,25252 ;ONE HOURS WORTH
ADD T2,T4
MOVEM T2,ENDATE
SETDA1: SKIPGE BEGIN ;/BEGIN SPECIFIED?
POPJ P,0 ;NO-LEAVE NOW
SETOM T2
SETZB T3,T4
ODCNV ;GET CURRENT TIME
MOVE T2,STDATE ;[306]
TLNE T4,1B19 ;DAYLIGHT SAVINGS?
SUBI T2,25252 ;YES,SUB 1 HOUR
LSH T4,14
ASH T4,-36
IMULI T4,25252 ;ONE HOURS WORTH
ADD T2,T4
MOVEM T2,STDATE
POPJ P, ;RETURN
SUBTTL SCAN RELATED SUBROUTINES
;DEFINP,DEFOUT -- SUBROUTINES TO SETUP PARAMETERS FOR INPUT AND OUTPUT
;CALL PUSHJ P,DEFXXX FROM SCAN CODE
;
;RETURN CALL +1
;RETURNS TO SCAN WITH T1=START OF AREA T2=LENGTH OF AREA
;USES T1,T2
DEFINP: MOVEI T1,I.ST ;PICKUP ADDRESS OF START OF INPUT AREA
MOVEI T2,I.LNGH ;PICKUP LENGTH OF INPUT AREA
POPJ P,
DEFOUT: MOVEI T1,O.ST ;SAME AS ABOVE FOR OUTPUT AREA
MOVEI T2,O.LNGH
POPJ P,
;CLRFLG -- SUBROUTINE TO CLEAR SWITCH FLAG STORAGE LOCATIONS
;CALL PUSHJ P,CLRFLG FROM SCAN
CLRALL: MOVE T1,[XWD FLGST,FLGST+1]
SETOM FLGST ;SCAN LIKES -1 TO INITIALIZE
BLT T1,FLGND
MOVE T1,[XWD I.ST,I.ST+1] ;SETUP TO CLEAR INPUT FILE SPEC BLOCK
SETZM I.ST
BLT T1,I.END
MOVE T1,[XWD O.ST,O.ST+1] ;SAME FOR OUTPUT
SETZM O.ST
BLT T1,O.END ;ZAP OUTPUT FILE SPEC AREA
POPJ P, ;RETURN TO SCAN CODE
;SETSWT -- SUBROUTINE CALLED BY SCAN TO HANDLE BIT SETTING
;IN ENTCHR TABLE AS A RESULT OF USER SWITCHES
;CALL PUSHJ P,SETSWT FROM SCAN CODE
;
;RETURN CALL+1
;SETS BITS IN ENTCHR TABLE AS SPECIFIED BY BYTES FOUND
;AT @BYTDSP(ERROR CODE)
;BYTES ARE GROUPED INTO LIST ALL,NXM CAUSED,PAR CAUSED,PER CAUSED
;PERFORMANCE CAUSED,SUMMATION
;BYTE FIELDS ARE DELIMITED WITH 77
SETSWT: TLO F,F.OSUM ;EDIT 211-WE GOT HERE ONLY IF USER
;SAID /MASALL, ETC AND DID NOT USE
;DEFAULT OF /ALLSUM. SEE REVISION
;HISTORY AND SYSERR DOCUMENTATION.
PUSH P,T1 ;SAVE T1
PUSH P,T2 ;LIKEWISE
HRRZ T1,T2 ;PICKUP FLAG ADDRESS
SUBI T1,FLGST ;SUBTRACT STARTING ADDRESS OF FLAGS
;RESULT IS OFFSET OF SWITCH IN TABLE
CAILE T1,FLGSTP ;DO WE WISH TO SET BITS IN ENTCHR FOR THIS SWITCH ?
JRST DONE ;NO - JUST LET SCAN STORE IT
HRRM T2,SWITCH ;[321]SAVE ADDRESS IN LOW SEG OF THIS SW
;VALUE FOR BIT CHECKING ROUTINES
;WHILE WE'RE HERE LET'S SETUP THE DEFAULT OUTPUT
;FILE NAME TO THAT /CPUALL OR /DSKPAR ETC THE USER
;JUST TYPED INSTEAD OF ERROR.LST
MOVE T3,SWTABN(T1) ;THAT'S A NAME TABLE IN SIXBIT
MOVEM T3,OUTFIL ;THAT'S THE FILE NAME IN SIXBIT
MOVSI T2,441100 ;SETUP FOR 11 BITS
HRR T2,BYTDSP(T1) ;SETUP TO LOOK AT BYTX WHERE X IS INDEX INTO SWITCH TABLE
HRLZI T4,E.LALL ;SET E.LALL BIT IN MASK
ALLCHK: ILDB T3,T2 ;PICKUP BYTE FROM BYTXXX
JUMPE T3,ALLCHK ;IGNORE IT
CAIN T3,777 ;READY TO GO TO E.LNXM CHECK
JRST NXMCHK ;YES DISPATCH
IORM T4,ENTCHR(T3) ;LIGHT THE BIT
JRST ALLCHK ;BACK FOR MORE
NXMCHK: HRLZI T4,E.LNXM ;SET THE E.LNXM BIT IN MASK
NXMCON: ILDB T3,T2
JUMPE T3,NXMCON
CAIN T3,777 ;READY TO GO TO PARCHK
JRST PARCHK
IORM T4,ENTCHR(T3) ;LIGHT THE E.LNXM BIT IN ENTRY CHAR WORD
JRST NXMCON ;MORE
;FALL INTO PARCHK ROUTINE
PARCHK: HRLZI T4,E.LPAR ;SET THE E.LPAR BIT IN MASK
PARCON: ILDB T3,T2
JUMPE T3,PARCON
CAIN T3,777 ;READY TO DO PERCHK?
JRST PERCHK ;YES
IORM T4,ENTCHR(T3) ;LIGHT THE LITE
JRST PARCON ;LOOP
PERCHK: HRLZI T4,E.LPER ;LIGHT THE E.LPER BIT IN MASK
PERCON: ILDB T3,T2
JUMPE T3,PERCON
CAIN T3,777 ;READY FOR SUMCHK
JRST SUMCHK ;YES
IORM T4,ENTCHR(T3) ;LITE THE BIT IN ENTCHR TABLE
JRST PERCON ;LOOP
SUMCHK: HRLZI T4,E.LSUM
SUMCON: ILDB T3,T2
JUMPE T3,SUMCON ;IGNORE
CAIN T3,777 ;FINI??
JRST DONE ;YES EXIT
IORM T4,ENTCHR(T3) ;SET THE BIT
TLO F,F.LSUM ;SAY SOME SUMMARY WAS REQUESTED
JRST SUMCON
DONE: POP P,T2 ;RESTORE T2
HRRZ T3,T2
CAIN T3,SEQ ;[532]=/SEQ?
JRST SEQBLD ;YES ,STORE ARGUEMENT
POP P,T1 ;SAME
AOS (P) ;SKIP RETURN TO MAKE SCAN STORE FLAG
POPJ P, ;BACK TO SCAN
;P3 HOLDS ARGUEMENT FROM SCAN
SEQBLD: SKIPG P3 ;NEGATIVE?
JRST SEQBD1 ;YUP!
MOVE T1,SEQIND ;GET NEXT INDEX TO SEQTAB
MOVEM P3,SEQTAB(T1) ;STORE ARGUEMENT
AOS T1
MOVEM T1,SEQIND
CAIL T1,SEQMAX ;EXCEEDED MAX WE SUPPORT?
JRST SEQWRN
SETZM SEQ ;WE SAW ONE
POP P,T1 ;RESTORE T1 TO BE SAFE
POPJ P,0 ;NON-SKIP TO SCAN SAYS DONT STORE
SEQWRN: WARN% <MORE THAN >
MOVEI T1,SEQMAX ;GET MAX
TLO F,F.TTYO ;SAY OUTPUT TO TTY
PUSHJ P,.TDECW
TRNN F,F.TTY ;[1221]DON'T CLEAR IF OUT DEV IS TTY
TLZ F,F.TTYO ;BACK TO OUTPUT FILE
WARN.CR < SEQUENCE NUMBERS GIVEN FOR ARGUEMENT>
JRST START
;HERE TO HANDLE NEGATIVE NUMBERS
;INDICATES RANGE OF NEXT 'N' NUMBERS
SEQBD1: MOVE T1,SEQIND ;NEXT INDEX
MOVE T3,SEQTAB-1(T1) ;GET PREVIOUS VALUE
SEQBD2: AOS T3
MOVEM T3,SEQTAB(T1)
AOS T1
CAIL T1,SEQMAX ;EXCEEDED MAX?
JRST SEQWRN ;YUP!
AOJL P3,SEQBD2 ;DO MORE?
MOVEM T1,SEQIND ;STORE NEXT INDEX VALUE
POP P,T1 ;RESTORE
POPJ P,0 ;RETURN TO SCAN
;SUMUPD -- SUBROUTINE TO AUTOMATICALLY UPDATE ALL PERMANENT
;SUMMARY COUNTERS PRIOR TO SUMMARY LISTING
;A DUMMY MACRO DUMFLG IS USED TO GENERATE
;THE NECESSARY CODE AS FOLLOWS
;SKIPE T1,XXXTMP ;PICKUP TEMP COUNTER
;ADDM T1,XXXPER ;INCREMENT PERM COUNTER
;DO NEXT COUNTER SAME.......
;modified by edit #110
DEFINE TBLFLG(A)<
setz t1,
exch t1,a'TMP
ADDM T1,A'PER
>
;NOW THE ACTUAL CODE GENERATION
; XLIST
SUMUPD: DUMFLG
LIST
;NOW GENERATE THE SOFTWARE SUMMARY COUNTERS UPDATE
;also modified by edit #110
DEFINE DUMDV(A)<
ZZ==0
REPEAT NUMSFB,<
setz t1,
exch t1,a'ST+zz
ADDM T1,A'SP+ZZ
ZZ==ZZ+1
>>
; XLIST
; DUMDP
; DUMFH
; DUMRP
LIST
XLIST
DUMDP
DUMFH
DUMRP
LIST
POPJ P, ;RETURN
SUBTTL STORAGE LOCATIONS
T20DEV: SIXBIT/QAP/ ;DEFAULT FOR TOPS20 INPUT DEVICE
INPSPC: EXP 13
SIXBIT/SYS/
XWD 0,IBUFF
OUTSPC: EXP 0
SIXBIT/DSK/
XWD OBUFF,0
ERRFIL: XWD 0,35
Z
SIXBIT/ERROR/
SIXBIT/SYS/
BLOCK 32
LSTFIL: SIXBIT/ERROR/
SIXBIT/LST/
Z
Z
;HERE IS THE CODE WHICH WILL BE BUT INTO THE LOW SEG
;AND WILL BE CALLED TO OVERLAY HIGH SEGMENTS.
;EDIT #120
HRLZI T1,1 ;GET RID OF
CORE T1, ;CURRENT HIGH SEG
HALT ;CAN'T DECREASE CORE!!!???
SETZM .JBSYM ;TO ALLOW DDT TO WORK
SETZM .JBUSY ;WHILE DEBUGGING VARIOUS HIGH
;SEGMENTS. PUT A BREAKPOINT
;AT ROUTINES WHICH CALL OVRLAY
;THEN SET BREAKPOINT AT THE
;RETURN FROM THE GETSEG AND OPEN
;THE NEW SYMBOL TABLE
;AND CONTINUE DEBUGGING.
MOVEI T1,OVRBLK ;SPEC BLOCK SETUP BY OUR CALLER
GETSEG T1,
HALT ;STD ERROR MESSAGES ARE OK
MOVE 17,400006 ;GET NEW SYMBOL TABLE ADDR
MOVEM 17,116 ;AND STORE IT FOR DDT SINCE DDT
;CAN'T SEEM TO GET IT RIGHT!!
HRLZI 17,SAVEAC ;COPY BACK
BLT 17,17 ;THE AC'S
SKIPN 15 ;[314]MAY ALREADY HOLD RETURN ADDRESS
HRRZ 15,400000 ;THAT'S THE START OF THE NEW SEG
JRST @15 ;NOW GO THERE
;HERE LIES THE ^C TRAP INTERCEPT CODE TO BE MOVED INTO THE LOWSEG.
CCCBLK: XWD 4,CCTRAP
XWD 0,ER.ICC
Z
Z
TRPCOD: HLRZ T3,INTBLK+.ERCCL
CAIE T3,ER.ICC
HALT .
EXIT 0
IARGST: Z
Z
CHROUT ;LOCATION OF TYPEOUT ROUTINE IN SYSERR
Z
Z
IAREND==.-1
IARGLN==<IAREND-IARGST>+1 ;LENGTH OF ARG BLOCK FOR .ISCAN
TARGST: IOWD SWTABL,SWTABN ;DUMMY NAMES FOR USE BY SCAN
XWD SWTABD,SWTABM
SWTABP
SIXBIT/SYSERR/ ;LET HELPER TYPE SYS:SYSERR.HLP FOR USER HELP
XWD CLRALL,0
XWD DEFINP,DEFOUT ;POINTER TO SUBROUTINES TO SETUP
;INPUT AND OUTPUT FILE SPEC AREAS
Z
Z
SETSWT
TAREND==.-1
TARGLN==<TAREND-TARGST>Z+1 ;LENGTH OF T ARG BLOCK
DUMDAY: 121165 ;DUMMY NBS DAY FOR USE BY SCAN
KONMSK: RCMASK ;MASK FOR ERROR BITS IN RC10 TYPE DEVICE
RPMASK ;MASK FOR ERROR BIT IN A RP10 TYPE DEVICE
SFMASK ;SOFTWARE DETECTED ERROR MASK
TMMASK
RHMASK
MINERB: MINRCB
MINRPB
MINSFB
MINTMB
MINRHB
IDVFLT: SIXBIT/SYS/ ;DEFAULT FILE SPECIFICATIONS
IFLFLT: SIXBIT/ERROR/
IEXFLT: SIXBIT/SYS/
ODVFLT: SIXBIT/DSK/
OFLFLT: SIXBIT/ERROR/
OEXFLT: SIXBIT/LST/
PDLPNT: IOWD LPDL,PDLST
SUBTTL DUMMY MACRO EXPANSION AREA
;THE FOLLOWING MACRO CODE UTILIZES THE PRINCIPLE OF THE DUMMY
;MACRO USED EARLIER AND REDEFINES TBLENT TO GENERATE VAIOUS
;NECESSARY DISPATCH TABLES
;MACRO TO CREATE A TABLE CONTAINING OFFSET INTO OTHER TABLES
;WHICH WERE PREVIOUSLY INDEXED BY ERROR TYPE(VER 3 & EARLIER). ALLOWS
;HOLES TO BE IN SEQUENCE OF ERROR TYPES WHICH ARE USED.
;THIS FIRST TABLE CONTAINS ALL THE ERROR TYPES
;KNOWN TO ALL SYSERR PARTS. THE SECOND IS THE TABLE
;OF TYPES PROCESSED BY THE SEGMENT.
;EDIT #120.
SALL
DEFINE TBLENT(A,B,C,D,E)<
XWD 0,A
>
ALLTBL: DUMENT
ALLLTH=<.-1>-ALLTBL+1 ;LENGTH OF ERROR INDEX TABLE
ERRTBL: 0 ;FIRST FOUND MUST NOT BE 0
ERRLTH=<.-1>-ERRTBL+1 ;LENGTH OF ERROR INDEX TABLE
;THE ENTRY PROCESSING TABLE
;THIS TABLE MUST BE INDEXED BY THE CONTENTS OF ALLIND
DEFINE TBLENT(A,B,C,D,E)<
IFIDN<D><PROCSA><
XWD 0,D
TYPMAX==A>
IFDIF<D><PROCSA><
XWD 0,D
TYPMAX==A>
>
PCSTBL: DUMENT
;SWITCH TABLES
;THE FOLLOWING TABLES WILL BE GENERATED VIA THE DUMMY MACRO
;DUMCH1
;THE FIRST IS A DISPATCH TABLE TO BYTES REPRESENTING BITS TO SET
;IN THE ENTCHR TABLE
;NEXT IS THE ACTUAL BYTES THEMSELVES
;TABLE FOR DISPATCH TO THE BYTE OPERANDS
DEFINE TBLCH1(A,B,C,D,E,F,G)<
XWD 0,BYT'G
>
;MAKE DISPATCH TABLE
BYTDSP: DUMCH1
;NOW THE BYTES THEMSELVES
DEFINE TBLCH1(A,B,C,D,E,F,G)<
BYT'G: BYTE (9) B,777,C,777,D,777,E,777,F,777
>
DUMCH1
;SWITCH MACRO EXPANSION NEXT
;DEFINE THE SWITCHES WE RECOGNIZE
DEFINE TBLCH1(A,B,C,D,E,F,G)<
SS (A,A',0)
>
DEFINE TBLCH2(A,B,C)<
SP (A,A',B,C)
>
;CALL MACRO TO SET DEFAULTS
DEFVAL
;NOW MAKE SWTCHS MACRO FOR USE WITH DOSCAN LATER
DEFINE SWTCHS<
DUMCH1
DUMCH2
>
DOSCAN(SWTAB)
RADIX 8 ;******DONE WITH RADIX 10******
;GENERATE SIXBIT TABLE OF DEVICE NAMES
DEFINE DUMDV(A)<
SIXBIT/A/
>
NAMTBL: DUMDVA
NAMLTH=<.-1>-NAMTBL+1 ;LENGTH OF TABLE OF SIXBIT NAMES
;USING SAME DEFINITION OF MACRO NOW GENERATE
;LIST OF ONLY MASSBUS DEVICE NAMES
MASNAM: DUMFS
DUMRP
MASLTH=<.-1>-MASNAM+1 ;LENGTH OF THIS TABLE
;MASNA2: AND SCRATCH BLOCK TABLES REMOVED WITH EDIT [1217]
DEFINE DUMDV(A)<
XWD 0,A'BK
>
BKLOC: DUMDVA
;GENERATE CONI BIT ERROR DISPATCHER
;RH = SOFT ERROR POINTER
;LH = HARD ERROR POINTER
DEFINE DUMDV(A)<
XWD A'HD,A'SF
>
DEVDSP: DUMDVA
;DEVDS2 TABLE REMOVED WITH EDIT [1217]
DEFINE DUMDV(A)<
XWD A'ST,A'SP
>
;ST=STORAGE TEMP,SP=PERM.
SOFDSP: DUMDVA
;SOFDS2 TABLE REMOVED WITH EDIT [1217]
;HERE LIES THE START OF THE LOW SEGMENT STORAGE
;AND VOLATILE MACRO TABLES
LIT
END START