1
0
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:
Eric Swenson
2016-12-03 15:56:57 -08:00
parent 1f4f688067
commit a305421ff8
7 changed files with 1102 additions and 0 deletions

503
src/sysen1/sysmsg.21 Normal file
View 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