mirror of
https://github.com/PDP-10/its.git
synced 2026-02-07 17:01:19 +00:00
Added support for SYSMSG
This commit is contained in:
503
src/sysen1/sysmsg.21
Normal file
503
src/sysen1/sysmsg.21
Normal file
@@ -0,0 +1,503 @@
|
||||
TITLE SYSMSG - ITS SYSTEM MESSAGE PRINTER
|
||||
|
||||
.INSRT SYSENG;CALRET >
|
||||
|
||||
;;; DEFINE MACROS SO THAT SYSTEM VARIABLES ACCESSED
|
||||
;;; THROUGH ABS PAGES CAN BE REFERENCED IN A NATURAL WAY
|
||||
|
||||
DEFINE CONC A,B
|
||||
A!B!TERMIN
|
||||
|
||||
DEFINE ABSREF SYMS
|
||||
DEFINE ABSTAB
|
||||
IRPW SYM,,[SYMS]
|
||||
IFSE [SYM]----, IMMEDS: ;FROM HERE DOWN ARE NOT ADDRESSES
|
||||
.ELSE [ SQUOZE 0,SYM
|
||||
CONC ABSRF",\.IRPCNT,ABS
|
||||
CONC [EXPUNGE ABSRF"]\.IRPCNT,ABS
|
||||
]
|
||||
TERMIN
|
||||
TERMIN
|
||||
IRPW SYM,,[SYMS]
|
||||
IFSN [SYM]----, ABSRF. SYM,\.IRPCNT
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
DEFINE ABSRF. SYM,CT
|
||||
ABSRF"!CT!ABS==0
|
||||
IF1,[DEFINE SYM ?MOD
|
||||
(MOD)[.,,ABSRF"!CT!ABS]TERMIN
|
||||
]
|
||||
IF2,[DEFINE SYM ?MOD
|
||||
(MOD)<ZZZ==ABSRF"!CT!ABS ? ABSRF"!CT!ABS==[.,,ZZZ] ? ZZZ>TERMIN
|
||||
]
|
||||
TERMIN
|
||||
|
||||
.BEGIN ABSRF ;PLACE TO KEEP NNNABS SYMBOLS
|
||||
.END
|
||||
|
||||
ABSREF [SYSMBF ;SYSTEM MESSAGE BUFFER
|
||||
TOIP ;TTY OUTPUT PTR
|
||||
TOBEP ;.., END OF BUFFER
|
||||
----
|
||||
TOBL ;TTY OUTPUT BUFFER LENGTH
|
||||
SYSCON ;SYSTEM TTY NUMBER
|
||||
SYSMLNG ;LOG 2 OF NUMBER OF 4-WORD BLOCKS
|
||||
]
|
||||
|
||||
DOWTAB: SIXBIT/SUN/
|
||||
SIXBIT/MON/
|
||||
SIXBIT/TUE/
|
||||
SIXBIT/WED/
|
||||
SIXBIT/THU/
|
||||
SIXBIT/FRI/
|
||||
SIXBIT/SAT/
|
||||
|
||||
; SYSTEM MESSAGE BUFFER CONTAINS 8-WORD ENTRIES AS FOLLOWS:
|
||||
; ABCDEF,,ASCIZ
|
||||
; ARG1
|
||||
; ...
|
||||
; ARG6
|
||||
; TIME
|
||||
; A..F = FORMAT OF ARG1..ARG6 RESPECTIVELY, CODED:
|
||||
FMTBL: 0 ;0 END OF MESSAGE
|
||||
TYPOCT ;1 FULL WORD OCTAL
|
||||
TYPDEC ;2 FULL WD DECIMAL
|
||||
TYPHAF ;3 " WITH COMMAS
|
||||
TYCRLF ;4 DO CR
|
||||
CPOPJ ;5 ?
|
||||
TYPSIX ;6 SIXBIT
|
||||
TYPASZ ;7 ASCIZ
|
||||
|
||||
CPOPJ: POPJ P,
|
||||
|
||||
CLSCRN: ASCIZ/C/
|
||||
CRLF: ASCIZ/
|
||||
/
|
||||
|
||||
CMACMA: ASCIZ/,,/
|
||||
|
||||
SEP: ASCIZ/-----
|
||||
/
|
||||
|
||||
MEMHOL: ASCIZ\
|
||||
WARNING: THERE IS A HOLE IN MEMORY
|
||||
\
|
||||
|
||||
TYIC==2 ;TTY INPUT CHANNEL
|
||||
TYOC==1 ;TTY OUTPUT CHANNEL
|
||||
TYO=<.IOT TYOC,> ;INSTRUCTION TO OUTPUT A CHAR
|
||||
;;; MAIN PROGRAM
|
||||
|
||||
PROGRAM SYSMSG
|
||||
|
||||
REGISTER A,B,C,F,PT,CH,COUNT
|
||||
|
||||
.OPEN TYIC, [.UAI,,'TTY] ;JUST SO CAN GET INTERRUPTS ??
|
||||
.VALUE
|
||||
.OPEN TYOC, [20+.UAO,,'TTY]
|
||||
.VALUE
|
||||
|
||||
CALL RITUAL ;ASSURANCE OF PURITY
|
||||
|
||||
SETZM JCL ;GET JCL (MESSAGE PREFIX)
|
||||
MOVE A,[JCL,,JCL+1]
|
||||
BLT A,JCLP-1
|
||||
.BREAK 12,[5,,JCL]
|
||||
MOVE A,[440700,,JCL]
|
||||
MOVEM A,JCLP
|
||||
JCHACK: ILDB B,A ;MAKE ASCIZ WITH NO LINE TERMINATOR
|
||||
CAIL B,"a ;ALSO UPPER-CASE IT
|
||||
SUBI B,40
|
||||
CAIG B,"Z
|
||||
DPB B,A
|
||||
CAIL B,40
|
||||
JRST JCHACK
|
||||
MOVEI B,0
|
||||
DPB B,A
|
||||
|
||||
.RDTIME A,
|
||||
MOVEM A,.M"TIME' ;SYSTEM TIME NUMBER
|
||||
.RLPDTM A,
|
||||
LDB B,[320300,,B]
|
||||
MOVEM B,.M"DOW' ;CORRESPONDING DAY OF WEEK
|
||||
IDIVI A,86400.
|
||||
MOVEM B,.M"TOD' ;OFFSET FROM MIDNIGHT IN SECONDS
|
||||
CALL TYPE,CLSCRN ;CLEAR SCREEN
|
||||
MOVEI COUNT, 1 ;SET UP COUNT OF MESSAGE SLOTS
|
||||
LSH COUNT, SYSMLNG ;..
|
||||
CAILE COUNT,BUFL*8
|
||||
.LOSE ;SYSTEM BUFFER GOT BIGGER
|
||||
MOVSI A,SYSMBF ;COPY SYSTEM BUFFER
|
||||
HRRI A,BUF
|
||||
BLT A,BUF+BUFL-1
|
||||
MOVE C,COUNT
|
||||
SORT: MOVEI CH,-1(COUNT) ;THEN SORT BY TIME
|
||||
MOVEI PT,BUF
|
||||
SORT1: MOVE A,7(PT)
|
||||
CAMG A,7+8(PT)
|
||||
JRST SORT2
|
||||
REPEAT 8,[
|
||||
MOVE A,.RPCNT(PT)
|
||||
EXCH A,.RPCNT+8(PT)
|
||||
MOVEM A,.RPCNT(PT) ]
|
||||
SORT2: ADDI PT,8
|
||||
SOJG CH,SORT1
|
||||
SOJG C,SORT
|
||||
MOVEI PT,BUF ;SET UP POINTER TO BUFFER
|
||||
LOOP: UNTIL [SOJLE COUNT,][ ;PRINT ALL MESSAGES
|
||||
SKIPN A, (PT) ;PICK UP HEADER WORD
|
||||
JRST NXLOOP ;ZERO => NO MSG HERE
|
||||
HLLZ F,A ;F ARG FORMAT BITS
|
||||
HRLI A,440700 ;A ASCIZ POINTER
|
||||
CALL PRINTP,A ;SHOULD THIS MESSAGE BE PRINTED?
|
||||
JUMPE T,NXLOOP
|
||||
MOVEI C,1(PT) ;C PNTR TO NEXT ARG
|
||||
LOOP1: ILDB B,A
|
||||
JUMPE B,LOOP2
|
||||
IF [CAILE B,7][PUSHJ P,ARGSOT]
|
||||
ELSE [TYO B]
|
||||
JRST LOOP1
|
||||
|
||||
LOOP2: WHILE [SKIPN F][ ;DISPLAY THE ARGUMENTS
|
||||
TYO [40] ;PUT A SPACE BETWEEN ARGS
|
||||
PUSHJ P,ARGOT
|
||||
]
|
||||
TYO [40]
|
||||
CALL PTIME,7(PT) ;PRINT THE TIME
|
||||
CALL TYPE,CRLF
|
||||
NXLOOP: ADDI PT, 8 ;ADVANCE TO NEXT MESSAGE
|
||||
];END UNTIL LOOP
|
||||
|
||||
; Display any lines that are on the system job console
|
||||
|
||||
CALL TYPE,SEP
|
||||
MOVEI C, SYSCON ;-> SYSTEM JOB TTY
|
||||
MOVE PT, TOIP(C) ;SCAN THROUGH
|
||||
SYFNDL: PUSHJ P, SYGET ;FIND FIRST FULL LINE
|
||||
CAIE A, 15
|
||||
JRST SYFNDL
|
||||
|
||||
SYTYPE: PUSHJ P, SYGET ;NOW DISPLAY WHAT'S THERE
|
||||
CAIN A,175 ;FLUSH OLDE ALTMODES KEEPING TTY WARM
|
||||
JRST SYTYPE
|
||||
TYO A
|
||||
JRST SYTYPE
|
||||
|
||||
SYGET0: CAMN PT, TOBEP(C) ;GET CHR FROM TTY BUF
|
||||
SUBI PT, TOBL ; WITH WRAP-AROUND
|
||||
ILDB A, PT ;GET CHAR
|
||||
CAMN PT, TOIP(C) ;KILL RETURN IF DONE
|
||||
JRST KILL
|
||||
POPJ P,
|
||||
|
||||
SYGET: PUSHJ P, SYGET0 ;ROUTINE TO GET CHR AND DO %TD HACKS
|
||||
CAIN A,%TDFS
|
||||
MOVEI A,40
|
||||
CAIN A,%TDCRL
|
||||
MOVEI A,15
|
||||
TRNN A, 200 ;AND DO SPECIAL CHAR PROCESSING
|
||||
POPJ P, ; NORMAL CHAR JUST RETURN
|
||||
CAIE A,%TDMV1
|
||||
CAIN A,%TDMV0
|
||||
JRST SYGET1
|
||||
CAIE A,%TDMOV
|
||||
JRST SYGET ;1-CHAR SEQ IGNORE
|
||||
PUSHJ P, SYGET0 ;GOBBLE CURSOR MOTION
|
||||
PUSHJ P, SYGET0 ;ASSUMING INTR LEVEL HAS PROCESSED
|
||||
SYGET1: PUSHJ P, SYGET0 ;GOBBLE CURSOR MOTION
|
||||
PUSHJ P, SYGET0 ;ASSUMING INTR LEVEL HAS PROCESSED
|
||||
CAIE A, 0 ;SKIP IF IS PROBABLY CRLF
|
||||
SKIPA A, [40] ;OTHERWISE IS PROBABLY SPACE
|
||||
MOVEI A, 15 ;NOW CHANGE CURSOR MOTION TO CRLF
|
||||
CPOPJ: POPJ P,
|
||||
|
||||
KILL: .BREAK 16, 040000
|
||||
|
||||
ARGSOT: PUSH P,A
|
||||
PUSH P,B
|
||||
MOVE A,B ;COUNT OF ARGS TO OUTPUT
|
||||
ARGSO1: PUSHJ P,ARGOT
|
||||
TYO [40]
|
||||
SOJG A,ARGSO1
|
||||
POP P,B
|
||||
POP P,A
|
||||
POPJ P,
|
||||
|
||||
ARGOT: LDB B,[410300,,F] ;PICK UP ARG TYPE CODE
|
||||
CALL @FMTBL(B),@C ;DISPLAY THE ARGUMENT
|
||||
LSH F,3 ;ADVANCE TO NEXT TYPE CODE
|
||||
AOJA C,CPOPJ ;ADVANCE TO NEXT ARG
|
||||
|
||||
.END
|
||||
|
||||
PRINTP: PROCEDURE AMBP ;RETURN NON-ZERO IN T IF MSG MATCHES JCL
|
||||
|
||||
REGISTER MBP,JBP,MCH,JCH
|
||||
|
||||
MOVE MBP,AMBP
|
||||
MOVE JBP,JCLP
|
||||
LP: ILDB MCH,MBP
|
||||
ILDB JCH,JBP
|
||||
JUMPE JCH,WIN
|
||||
CAMN JCH,MCH
|
||||
JRST LP
|
||||
LOSE: MOVEI T,0
|
||||
RETURN
|
||||
|
||||
WIN: MOVEI T,1
|
||||
RETURN
|
||||
|
||||
.END
|
||||
;;; TIME PRINTING
|
||||
PTIME: PROCEDURE TIM
|
||||
|
||||
REGISTER A,B,C,D,E
|
||||
|
||||
MOVE A,TIM
|
||||
SUB A,TIME
|
||||
IDIVI A,30. ;OFFSET IN SECONDS FROM KNOWN TIME
|
||||
ADD A,TOD ;CONVERT TO OFFSET FROM MIDNIGHT TODAY
|
||||
IDIVI A,86400. ;A DAYS, B SECONDS
|
||||
IF [SKIPL B][ ;FIX DIVISION FOR POSITIVE REMAINDER
|
||||
SUBI A,1
|
||||
ADDI B,86400. ]
|
||||
PUSH P,B
|
||||
ADD A,DOW ;FIND DAY OF WEEK OF THAT DAY
|
||||
IDIVI A,7
|
||||
SKIPGE B ;FIX DIVISION FOR POSITIVE REMAINDER
|
||||
ADDI B,7
|
||||
CALL TYPSIX,DOWTAB(B)
|
||||
TYO [40]
|
||||
POP P,A
|
||||
IDIVI A,60. ;A MINUTES, B SECONDS
|
||||
MOVE C,B
|
||||
IDIVI A,60. ;A HOURS, B MINUTES
|
||||
CALL TYPDC2,A
|
||||
TYO [":]
|
||||
CALL TYPDC2,B
|
||||
TYO [":]
|
||||
CALL TYPDC2,C
|
||||
RETURN
|
||||
|
||||
.END
|
||||
;;; ROUTINE TO TYPE AN ASCIZ STRING
|
||||
|
||||
TYPE: PROCEDURE STRING
|
||||
|
||||
REGISTER PT,CH
|
||||
|
||||
MOVEI PT, STRING ;SET UP B.P. TO STRING
|
||||
TLOA PT, 440700 ;..
|
||||
LOOP: TYO CH
|
||||
ILDB CH, PT ;GET NEXT CHAR
|
||||
JUMPN CH, LOOP ;AND IF NOT DONE, TYPE IT
|
||||
RETURN
|
||||
.END
|
||||
|
||||
;;; ROUTINES TO FORMAT DATA IN WONDROUS WAYS
|
||||
|
||||
TYPOCT: PROCEDURE DATA
|
||||
|
||||
REGISTER LH,RH
|
||||
|
||||
HLRZ LH,DATA
|
||||
HRRZ RH,DATA
|
||||
IF [JUMPN LH,][
|
||||
CALL TYPNUM,LH,[8.]
|
||||
CALL TYPE,CMACMA
|
||||
]
|
||||
CALL TYPNUM,RH,[8.]
|
||||
RETURN
|
||||
.END
|
||||
|
||||
TYPDEC: PROCEDURE DATA
|
||||
|
||||
REGISTER DAT
|
||||
|
||||
IF [SKIPL DAT, DATA][ ;PUT MINUS SIGN IF NEEDED
|
||||
TYO ["-]
|
||||
MOVMS DAT
|
||||
]
|
||||
CALL TYPNUM,DAT,[10.]
|
||||
RETURN
|
||||
.END
|
||||
|
||||
TYPDC2: PROCEDURE DATA
|
||||
|
||||
REGISTER DAT
|
||||
|
||||
IF [SKIPL DAT, DATA][ ;PUT MINUS SIGN IF NEEDED
|
||||
TYO ["-]
|
||||
MOVMS DAT
|
||||
]
|
||||
CAIGE DAT,10.
|
||||
TYO ["0]
|
||||
CALL TYPNUM,DAT,[10.]
|
||||
RETURN
|
||||
.END
|
||||
|
||||
TYPNUM: PROCEDURE DATA,RADIX
|
||||
|
||||
REGISTER NUM,REM
|
||||
|
||||
MOVE NUM, DATA
|
||||
PUSHJ P, FROB
|
||||
RETURN
|
||||
|
||||
FROB: IDIV NUM, RADIX
|
||||
HRLM REM, (P)
|
||||
SKIPE NUM
|
||||
PUSHJ P, FROB
|
||||
HLRZ REM, (P)
|
||||
ADDI REM, "0
|
||||
TYO REM
|
||||
POPJ P,
|
||||
.END
|
||||
|
||||
TYPHAF: PROCEDURE DATA
|
||||
|
||||
REGISTER DAT,LH
|
||||
|
||||
MOVE DAT, DATA
|
||||
IF [TLNN DAT,-1][ ;IF HAS LEFT HALF
|
||||
HLRZ LH, DAT
|
||||
CALL TYPOCT,LH
|
||||
TYO [",]
|
||||
TYO [",]
|
||||
]
|
||||
HRRZS DAT
|
||||
CALL TYPOCT,DAT
|
||||
RETURN
|
||||
.END
|
||||
|
||||
TYCRLF: PROCEDURE IGNORED
|
||||
|
||||
CALL TYPE,CRLF
|
||||
RETURN
|
||||
.END
|
||||
|
||||
TYPSIX: PROCEDURE DATA
|
||||
|
||||
REGISTER CH,WRD
|
||||
|
||||
MOVE WRD, DATA
|
||||
6LOOP: SETZ CH,
|
||||
LSHC CH, 6
|
||||
ADDI CH, 40
|
||||
TYO CH
|
||||
JUMPN WRD, 6LOOP
|
||||
RETURN
|
||||
.END
|
||||
|
||||
TYPASZ: PROCEDURE PT
|
||||
|
||||
REGISTER A
|
||||
|
||||
MOVE A,PT ;CAN'T INDIRECT PARAM
|
||||
CALL TYPE,@A
|
||||
RETURN
|
||||
.END
|
||||
;;; PURIFICATION RITUAL
|
||||
|
||||
OITSVRS:0 ;ITS VERSION PURIFIED FOR
|
||||
OUSRSTG:0 ;EXTRA Check
|
||||
|
||||
RITUAL: PROCEDURE
|
||||
|
||||
.RSYSID TT,
|
||||
MOVE T, [SQUOZE 0,USRSTG] ;SEE IF SYSTEM CHANGED
|
||||
.EVAL T,
|
||||
JFCL
|
||||
CAMN TT, OITSVRS
|
||||
CAME T, OUSRSTG
|
||||
JRST NOGOOD
|
||||
RETURN
|
||||
|
||||
NOGOOD: CALL PURIFY ;WRONG SYS VERSION OR NOT PURE
|
||||
RETURN ;YET SO REPURIFY
|
||||
|
||||
.END
|
||||
|
||||
ABSTB1: ABSTAB
|
||||
ABSTB2:
|
||||
|
||||
PURIFY: PROCEDURE
|
||||
|
||||
REGISTER I,L,V,LIM
|
||||
|
||||
.VALUE [ASCIZ\:New system version; must repurify.
|
||||
Take paws off keys and wait.
|
||||
|
||||
p\]
|
||||
MOVEI LIM, IMMEDS-ABSTB1 ;LIMIT ON REMAPPABLENESS
|
||||
MOVSI I, <ABSTB1-ABSTB2>/2 ;SCAN ABSTAB
|
||||
EVLOOP: MOVE V, ABSTB1(I) ;GET SYMBOL
|
||||
.EVAL V, ;EVALUATE IT
|
||||
.VALUE ;NOT THERE???
|
||||
CAIG LIM, (I) ;SKIP FOLLOWING CODE
|
||||
JRST EVLP00 ; IF IMMEDIATE SYMBOL
|
||||
CAIGE V, REMAPT ;REMAP LOW CORE
|
||||
SUBI V, REMAPT ;INTO HIGH CORE
|
||||
EVLP00: ADDI I, 1
|
||||
MOVE TT, ABSTB1(I) ;FOLLOW PATCH LIST
|
||||
PLOOP: JUMPE TT,EVLPNX ;JUMP IF END OF LIST
|
||||
MOVE L,TT
|
||||
HLRZ TT,(L) ;LOC TO PATCH
|
||||
HRRM V,(TT) ;PATCH IT
|
||||
HRRZ TT,(L) ;LINK TO NEXT
|
||||
JRST PLOOP ;AND TRY AGAIN
|
||||
|
||||
EVLPNX:AOBJN I, EVLOOP ;NEXT SYMBOL
|
||||
|
||||
; HAVING PATCHED, SET UP PAGE TABLE
|
||||
; FOR NOW, WE DON'T ACTUALLY PURIFY ANY PAGES...
|
||||
|
||||
.RSYSID V, ;REMEMBER ITS VERSION
|
||||
MOVEM V, OITSVRS
|
||||
MOVE V, [SQUOZE 0,USRSTG] ;AND A KLUDGEY MACHINE CHECK
|
||||
.EVAL V,
|
||||
.VALUE
|
||||
MOVEM V, OUSRSTG
|
||||
|
||||
SETZM V
|
||||
MOVEI TT, REMAPT_-10. ;GET ABS PAGES
|
||||
HRLI TT, <REMAPT-400000>_-10. ;FROM 0 TO 400000
|
||||
MOVE T, TT
|
||||
GETMOR: .CALL CORBLK,[#210000,#-1,TT,#400000,T]
|
||||
JRST .+2 ;ERROR RETURN
|
||||
JRST GOTIT
|
||||
.SUSET [.RBCHN,,V] ;FIND OUT WHAT LOST
|
||||
.CALL STATUS,V,V ;GET ERROR CODE
|
||||
.VALUE
|
||||
LDB V, [270600,,V] ;..
|
||||
CAIE V, 32 ;CAN'T GET THAT ACCESS
|
||||
.VALUE ;NO - UNCLEAR
|
||||
ADD TT, [40,,40] ;YES - BITING MD10'S HAVE A 32K HOLE!
|
||||
MOVE T, TT
|
||||
JUMPL TT, GETMOR
|
||||
|
||||
GOTIT: JUMPE V,GOTIT1
|
||||
CALL TYPE,MEMHOL
|
||||
GOTIT1: MOVEI TT, <1000000-REMAPT>_-10. ;DO REMAPPAGE
|
||||
HRLI TT, -<REMAPT_-10.>
|
||||
SETZ T,
|
||||
.CALL CORBLK,[#210000,#-1,TT,#400000,T]
|
||||
.VALUE
|
||||
.VALUE [ASCIZ\:PDUMP SYS1;TS SYSMSG
|
||||
P\]
|
||||
RETURN
|
||||
.END PURIFY
|
||||
|
||||
BUFL==400
|
||||
BUF: BLOCK BUFL
|
||||
|
||||
JCL: BLOCK 20
|
||||
JCLP: 440700,,JCL
|
||||
|
||||
CONSTANTS
|
||||
VARIABLES
|
||||
|
||||
REMAPT=<.+1777>&776000 ;FIRST NON USED PAGE
|
||||
|
||||
END SYSMSG
|
||||
Reference in New Issue
Block a user