├── README.md
├── doc
├── CS-TR-74-407.pdf
├── CS-TR-81-839.pdf
├── SAILDART_PREVIEW_3June_2019_12x12.pdf
├── SAILDART_Prolegomenon_2016.pdf
└── uuo_manual.pdf
├── monmonman-blue-green.svg
├── neonwaitwalk2.gif
├── sys
└── J17-1974
│ ├── FREE.DMP
│ ├── KSEG.DMP
│ ├── MONMON.DMP
│ ├── STTGET.DMP
│ ├── STTINT.DMP
│ ├── SYSTEM.DMP
│ ├── adcser.MAC
│ ├── adser.MAC
│ ├── alldat.17b.MAC
│ ├── alldat.17d.MAC
│ ├── alldat.MAC
│ ├── clkser.MAC
│ ├── comcss.MAC
│ ├── core.MAC
│ ├── ddt.MAC
│ ├── dpyser.MAC
│ ├── dskint.17b.MAC
│ ├── dskint.17d.MAC
│ ├── dskint.MAC
│ ├── dskser.16s.MAC
│ ├── dskser.17b.MAC
│ ├── dskser.17d.MAC
│ ├── dskser.MAC
│ ├── dtcser.MAC
│ ├── elfser.MAC
│ ├── fbpack.MAC
│ ├── free.MAC
│ ├── impclk.MAC
│ ├── impddb.MAC
│ ├── impint.MAC
│ ├── impreg.MAC
│ ├── impuuo.MAC
│ ├── jobdat.MAC
│ ├── libcnt.MAC
│ ├── lined.MAC
│ ├── lowcor.MAC
│ ├── lptser.MAC
│ ├── lup.MAC
│ ├── mail.MAC
│ ├── monmon.MAC
│ ├── mtcser.MAC
│ ├── once.MAC
│ ├── outer.MAC
│ ├── parser.MAC
│ ├── patch.MAC
│ ├── ptpser.MAC
│ ├── ptrser.MAC
│ ├── schedu.MAC
│ ├── spwser.MAC
│ ├── sttget.MAC
│ ├── sttint.sai
│ ├── sys.cmd.MAC
│ ├── sys.lod.MAC
│ ├── sysini.MAC
│ ├── sysmak.MAC
│ ├── ttyser.MAC
│ ├── tvser.MAC
│ ├── ueddt.log
│ ├── uuocon.MAC
│ └── xgpser.MAC
├── twe
└── advent.drw
└── waits.gif
/README.md:
--------------------------------------------------------------------------------
1 | # Stanford WAITS - Western Artificial Intelligence Time Sharing.
2 |
3 | The name WAITS is a retronym for the PDP-6/10 Stanford A.I. Lab operating system software which flourished from 1966 to 1990.
4 | The WAITS operating system was one of the tens of large lumps of software at the dawn of time sharing in the 1960s. WAITS survived and evolved at Stanford for 25 years and died without any surviving successors. At Stanford Computer Science Department, WAITS was displaced by Unix. WAITS forked FOONEX and a short lived Livermore site; neither of which out lasted the 1990 end of WAITS.
5 |
6 | WAITS, like its Eastern cousin ITS, supported time sharing, graphical user interfaces, real time control of experimental robotic equipment, nascent multimedia for audio voice recognition, audio for music generation, video for computer vision, video processing (second to JPL) for the first Mars orbital mission, Mariner-9, and generation of video for computer graphics. WAITS as Foonly supported the first Hollywood CGI film, Westworld 1973.
7 |
8 | WAITS, like its Digital parent, came with a Fortran, an Assembler, and a debugger; all of which were superceded by programs named LISP, SAIL, FAIL, RAID and so on.
9 |
10 | The first decade of Time Sharing technology included MIT AI with Digital Equipment, MIT and Multics with General Electric, BBN Bolt Bernack Newman.
11 | The East West software schism occured in 1966, when John McCarthy with Lester Earnest and Arthur Samuel moved the Stanford Artificial Intelligence Project to the D.C.Power building and obtained a PDP-6 with the Digital Operating System named "Monitor". In 1968 a PDP-10 KA was installed as primary, followed by a KL in 1976.
12 |
13 | ## Time Line
14 |
15 | major version | first | final | configuration
16 | ------------- | ---------- | ---------- | ----------------------------------
17 | 6 | 1966 | 1975 | KA10 two segments
18 | 7 | 1975-04-23 | 1976-06-10 | KA10 BBN pager
19 | 8 | 1976-06-11 | 1978-12-29 | KL10
20 | 9
21 |
22 |
--------------------------------------------------------------------------------
/doc/CS-TR-74-407.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/doc/CS-TR-74-407.pdf
--------------------------------------------------------------------------------
/doc/CS-TR-81-839.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/doc/CS-TR-81-839.pdf
--------------------------------------------------------------------------------
/doc/SAILDART_PREVIEW_3June_2019_12x12.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/doc/SAILDART_PREVIEW_3June_2019_12x12.pdf
--------------------------------------------------------------------------------
/doc/SAILDART_Prolegomenon_2016.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/doc/SAILDART_Prolegomenon_2016.pdf
--------------------------------------------------------------------------------
/doc/uuo_manual.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/doc/uuo_manual.pdf
--------------------------------------------------------------------------------
/monmonman-blue-green.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
63 |
--------------------------------------------------------------------------------
/neonwaitwalk2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/neonwaitwalk2.gif
--------------------------------------------------------------------------------
/sys/J17-1974/FREE.DMP:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/sys/J17-1974/FREE.DMP
--------------------------------------------------------------------------------
/sys/J17-1974/KSEG.DMP:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/sys/J17-1974/KSEG.DMP
--------------------------------------------------------------------------------
/sys/J17-1974/MONMON.DMP:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/sys/J17-1974/MONMON.DMP
--------------------------------------------------------------------------------
/sys/J17-1974/STTGET.DMP:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/sys/J17-1974/STTGET.DMP
--------------------------------------------------------------------------------
/sys/J17-1974/STTINT.DMP:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/sys/J17-1974/STTINT.DMP
--------------------------------------------------------------------------------
/sys/J17-1974/SYSTEM.DMP:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/sys/J17-1974/SYSTEM.DMP
--------------------------------------------------------------------------------
/sys/J17-1974/adser.MAC:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00006 PAGES
2 | C REC PAGE DESCRIPTION
3 | C00001 00001
4 | C00002 00002 BEGIN ADSER SUBTTL ADSER A/D SERVICE ROUTINE - J. SAUTER, STANFORD, 25-FEB-68
5 | C00003 00003 SYSTEM INITIALIZATION OF AD
6 | C00005 00004 INPUT/OUTPUT UUOS
7 | C00009 00005 HERE AT P1 CLOCK LEVEL. READY TO TELL P2 TO START.
8 | C00011 00006 HUNG: SETOM ADERR
9 | C00013 ENDMK
10 | C;
11 | BEGIN ADSER SUBTTL ADSER A/D SERVICE ROUTINE - J. SAUTER, STANFORD, 25-FEB-68
12 |
13 |
14 | DEFINE CAT!(A,B),
15 | ADCHL_CAT(CH,\ADCHN)
16 |
17 | JRST ADSET ;INITIALIZE
18 | JRST HUNG ;HUNG: PRINT MESS & STOP JOB.
19 | ^ADDSP: POPJ P, ;RELEASE
20 | POPJ P, ;CLOSE
21 | JSP DAT,UERROR ;BUFFERED OUTPUT
22 | JSP DAT,UERROR ;BUFFERED INPUT
23 | JRST CPOPJ1 ;ENTER
24 | JRST CPOPJ1 ;LOOKUP
25 | JRST ADOUT ;DUMP OUTPUT (REALLY DAC)
26 | JRST ADIN ;DUMP INPUT
27 | POPJ P, ;USETO
28 | POPJ P, ;USETI
29 | POPJ P, ;UGETF
30 | JRST CPOPJ1 ;RENAME
31 | POPJ P, ;CLOSE INPUT
32 | POPJ P, ;UTPCLR
33 | POPJ P, ;MTAPE
34 |
35 | ;SYSTEM INITIALIZATION OF AD
36 | ADSET: MOVEI TAC,40+ ;ASSUMED LOCATION OF PI CHANNEL WORDS
37 | SKIPN TAC1,P2NUM ;IS P2 ACTIVE?
38 | MOVE TAC1,P1NUM ;NO.
39 | TLNE TAC1,MAOFF ;IS THIS P IN MA OFFSET?
40 | ADDI TAC,100 ;YES: ADD OFFSET.
41 | MOVEM TAC,ADBLK ;STORE LOCATION OF BLKI/O INSTRUCTION
42 | MOVE TAC1,[JSR CAT(CH,\ADCHN)] ;LOAD JSR FOR P1.
43 | SKIPE P2NUM ;ARE WE USING P2?
44 | MOVE TAC1,[JSR CAT(P2CH,\ADCHN)] ;YES. LOAD JSR FOR P2
45 | MOVEM TAC1,1(TAC) ;STUFF IT INTO SECOND PI LOCATION
46 | MOVEM TAC1,ADJSR ;AND SAVE THE INSTRUCTION HERE
47 | ADDI TAC,1
48 | MOVEM TAC,ADJSRL ;POINTER TO THE JSR TO INTERRUPT ROUTINE.
49 | SETZM ADBKO
50 | SETZM ADADV
51 | POPJ P,
52 | ;INPUT/OUTPUT UUOS
53 | ADIN: TLZA IOS,IO ;CLEAR IO AND SKIP
54 | ADOUT: TLOA IOS,IO ;SET IO AND SKIP
55 | SKIPA TAC,[BLKI DCB,ADBKO] ;FOR INPUT GET BLKI AND SKIP.
56 | MOVE TAC,[BLKO DCB,ADBKO] ;FOR OUTPUT, GET BLKO
57 | MOVEM TAC,@ADBLK ;STORE BLKI/O IN FIRST PI LOCATION
58 | HRRZ TAC,UUO ;NOW ADDRESS CHECK
59 | CAMLE TAC,USRREL
60 | JRST ADRERR ;COMMAND WORD OUT OF BOUNDS.
61 | HRRZ TAC,@UUO ;GET FIRST IOWD.
62 | HLRO DAT,@UUO
63 | SUB TAC,DAT ;IS FINAL ADDRESS IN BOUNDS?
64 | CAMLE TAC,USRREL
65 | JRST ADRERR ;NO.
66 | MOVE TAC,@UUO ;YES.
67 | ADDI TAC,(PROG) ;FORM ABSOLUTE ADDRESS.
68 | MOVEM TAC,ADBKX ;STORE AS THE BLKO/I WORD
69 | MOVEI TAC,@UUO ;GENERATE ABSOLUTE ADDRESS
70 | MOVE TAC1,1(TAC) ;CONO TO 136.
71 | ANDCMI TAC1,7 ;REMOVE HIS PI NUMBER...
72 | IORI TAC1,ADCHN ;AND INSERT OURS
73 | HRRZM TAC1,ADLOC3 ;PUT WHERE IT WILL BE HIT.
74 | HRRZ TAC1,2(TAC) ;CONO TO 424.
75 | HRRZM TAC1,ADLOC4 ;REMEMBER IT LIKEWISE.
76 | MOVEI TAC1,3(TAC) ;CONI FROM 136.
77 | HRRZM TAC1,ADLOC1 ;TO BE REMEMBERED
78 | MOVEI TAC1,4(TAC) ;CONI FROM A/D.
79 | HRRZM TAC1,ADLOC2 ;LIKEWISE.
80 | PUSHJ P,SETACT ;MARK A/D IN USE AND STOP JOB.
81 | AD2: MOVEI DDB,ADDDB
82 | MOVE IOS,DEVIOS(DDB)
83 | LDB TAC,PIOMOD ;GET MODE.
84 | ; CAIN TAC,SD ;MODE 15? - FLUSHED 8/7/73
85 | ; POPJ P, ;YES. RETURN. -
86 | TRNE IOS,100 ;CONTINUOUS MODE ?
87 | JRST FOO ;YES.
88 | CAIN TAC,D ;17?
89 | SKIPA TAC,[CLOC3,,1] ;YES. JUST WAIT ONE JIFFIE.
90 | WT: MOVE TAC,[CLOC2,,3] ;NO. GET CLOCK DESCRIPTOR.
91 | CONO PI,PIOFF
92 | IDPB TAC,CLOCK ;ENTER CLOCK REQUEST
93 | CONO PI,PION
94 | POPJ P, ;RETURN TO UUOCON.
95 |
96 | FOO: ;CONTINUOUS MODE.
97 | MOVE TAC,[JSR AD2INT] ;MAKE INTERRUPT GO TO RIGHT PLACE.
98 | MOVEM TAC,@ADJSRL
99 | HRRZM TAC,ADADV ;PREPARE TO GET JOB RESTARTED AT ONCE.
100 | SKIPL ADBKO ;IS OUTPUT ALREADY GOING ON ?
101 | JRST CLOC3 ;NO. START IT. JOB WILL GO ON SINCE ADADV>0.
102 | MOVE TAC,ADBKX ;YES. SAVE PTR. FOR NEXT BUFFER.
103 | MOVEM TAC,ADADV ;ADADV ALSO SERVES AS A FLAG (SEE ADP1).
104 | POPJ P,
105 | ;HERE AT P1 CLOCK LEVEL. READY TO TELL P2 TO START.
106 | CLOC2: CONSO TV,1B28 ;IS BUTTON BEING PUSHED?
107 | JRST WT ;NO. WAIT ANOTHER 3 TICKS
108 | CLOC3: SETZM ADERR
109 | MOVE TAC,ADBKX ;GET BLKI/O WORD.
110 | MOVEM TAC,ADBKO
111 | SETOM ADACT ;TELL P2 TO START RUNNING
112 | SKIPE P2NUM ;IF THERE'S NO P2, WE DO IT OURSELVES.
113 | POPJ P, ;WAIT FOR P2 CLOCK LEVEL TO START IT.
114 | ^ADP2: MOVE TAC,ADACT ;HERE FROM P2 CLOCK LEVEL (OR P1 IF NO P2)
115 | JUMPE TAC,CPOPJ ;P2 DOESN'T SKIPN ON 2 PROCESSOR CELLS.
116 | SKIPE ADERR ;ERRORS YET?
117 | JRST AD6 ;YES. GO BLAST IT
118 | SETZM ADACT ;CLEAR CLOCK LEVEL REQUEST FLAG
119 | CONO AD,4000 ; STOP IT IF IT IS RUNNING
120 | MOVEI TAC,20 ; WAIT FOR IT
121 | SOJG TAC,.
122 | CONO ADC,0 ; KILL NEW AD-DA IF RUNNING
123 | CONO DAC,0 ; OTHERWISE, WILL LOOP WITHOUT JSR P2CH1
124 | MOVSI TAC,()
125 | HLLM TAC,ADJMP ; MAKE US JUMP TO APPROPRIATE ROUTINE
126 | CONO DCB,@ADLOC3
127 | CONO AD,@ADLOC4
128 | CONO PI,ADON
129 | POPJ P,
130 |
131 | ;HERE TO STOP THE AD
132 | AD6: CONO DCB,200000 ;BLAST THE 136.
133 | CONO AD,4000 ;AND THE A/D
134 | CONO PI,ADOFF ;TURN OFF A/D CHANNEL.
135 | MOVSI TAC,()
136 | HLLM TAC,ADJMP ; KILL AD INTERRUPT JUMP
137 | MOVE TAC,ADJSR ;MAKE INTERRUPTS GO TO NORMAL PLACE.
138 | MOVEM TAC,@ADJSRL
139 | SETZM ADBKO ;NO XFER IN PROGRESS.
140 | POPJ P, ;AND RETURN.
141 | HUNG: SETOM ADERR
142 | SETOM ADACT
143 | SETZM ADBKO
144 | JRST AD5
145 |
146 | ^ADINT: ;BLKO OVERFLOWED
147 | JSR @ADSAV ;SAVE ACCUMULATORS.
148 | CONI DCB,@ADLOC1 ;CONI FROM 136.
149 | CONI AD,@ADLOC2 ;AND FROM A/D.
150 | PUSHJ P,AD6 ;KILL A/D AND 136.
151 | HRRZM P,ADADV
152 | SKIPE P2NUM ;ARE WE ON P2?
153 | POPJ P, ;YES. RETURN
154 |
155 | ;IN CLKSER WE HAVE: SKIPL ADADV
156 | ; PUSHJ P,ADP1
157 | ^ADP1: SETZM ADADV ;HERE AT P1 CLOCK LEVEL (OR IF NO P2)
158 | SKIPE ADERR ;ERRORS?
159 | POPJ P, ;YES.
160 | AD5: MOVEI DDB,ADDDB
161 | MOVE IOS,DEVIOS(DDB)
162 | TLZE IOS,IOW
163 | PUSHJ P,STTIOD
164 | SKIPL ADBKO ;IS XFER STILL IN PROGRESS ?
165 | TRZ IOS,IOACT ;NO. LET JOB BE SWAPPED AND SHUFFLED.
166 | MOVEM IOS,DEVIOS(DEVDAT)
167 | POPJ P,
168 |
169 | BEND ADSER
170 |
--------------------------------------------------------------------------------
/sys/J17-1974/free.MAC:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00002 PAGES
2 | RECORD PAGE DESCRIPTION
3 | 00001 00001
4 | 00002 00002 TITLE FREE
5 | 00011 ENDMK
6 | ;
7 | TITLE FREE
8 | OPDEF PEEK [CALLI 33]
9 | OPDEF SETPR2 [CALLI 400052]
10 | P_17
11 |
12 | LOC 124
13 | JRST REE
14 | RELOC
15 | REE: SETOM ALL#
16 | CAIA
17 | STRT: SETZM ALL
18 | STRTA: CALLI
19 | SETZM INUSE
20 | SETZM NINUSE
21 | SETZM DIST
22 | SETZM NFREE#
23 | SETZM NUSE#
24 | MOVE 1,[DIST,,DIST+1]
25 | BLT 1,DIST+177
26 | MOVEI P,PDL
27 | MOVEI 1,37
28 | PEEK 1,
29 | MOVEM 1,MEMSIZ#
30 | HRLZS 1
31 | TLZ 1,401776
32 | CALL 1,['SETPR2']
33 | JRST NOSETP
34 | SETZM INUSE#
35 | SETZM NINUSE#
36 | INIT 0,0
37 | 'LPT '
38 | XWD HEAD,0
39 | JRST NOLPT
40 | SETZM NAME+3
41 | SETZM NAME+2
42 | HLLZS NAME+1
43 | ENTER NAME
44 | JRST [ OUTSTR[ASCIZ/ENTER FAILED!
45 | /]
46 | HALT STRTA]
47 | OUTBUF 0,2
48 | MOVE 6,[POINT 7,[ASCIZ/LOC IN USE FREE
49 |
50 | /]]
51 | SKIPN ALL
52 | PUSHJ P,PUTSTR
53 | MOVE 16,400263 ;GET ADDRESS OF MEMSIZ
54 | MOVE 16,400000(16) ;GET MEMSIZ
55 | MOVE 1,[400000(16)]
56 | MOVEM 1,SYSLOC#
57 | MOVE 1,MEMSIZ
58 | CAIG 1,377777
59 | JRST LOOP
60 | CAIE 1,777777
61 | JRST [ OUTSTR[ASCIZ/CAN'T MAP TO IT!
62 | /]
63 | HALT STRT]
64 | MOVE 1,[376001,,400000]
65 | SETPR2 1,
66 | JRST NOSET
67 | MOVNI 1,400000(1)
68 | HRRM 1,SYSLOC
69 | LOOP: SKIPE ALL
70 | JRST NOLOC
71 | HRRZ 2,16
72 | PUSHJ P,OCTPNT
73 | MOVEI 7,11
74 | PUSHJ P,PUTOUT
75 | NOLOC: MOVEM 16,LAST#
76 | HRRZ 16,@SYSLOC
77 | CAMLE 16,LAST
78 | CAMLE 16,MEMSIZ
79 | JRST INCONS
80 | HLRZ 2,@SYSLOC
81 | TRZ 2,400000
82 | MOVEI 7,11
83 | SKIPN ALL
84 | SKIPG @SYSLOC
85 | CAIA
86 | PUSHJ P,PUTOUT
87 | SKIPN ALL
88 | PUSHJ P,OCTPNT
89 | SKIPG @SYSLOC
90 | JRST [ AOS NUSE
91 | HLRZ 2,@SYSLOC
92 | TRZ 2,400000
93 | ADDM 2,INUSE
94 | CAIL 2,200
95 | MOVEI 2,0
96 | AOS DIST(2)
97 | SKIPE ALL
98 | JRST DONE
99 | HLRZ 2,@SYSLOC
100 | TRZ 2,400000
101 | LSH 2,-3
102 | CAIG 2,NAMLEN
103 | SKIPN 6,NAMTAB-1(2)
104 | JRST DONE
105 | HRLI 6,()
106 | PUSHJ P,PUTSTR
107 | JRST DONE]
108 | AOS NFREE
109 | HLRZ 2,@SYSLOC
110 | TRZ 2,400000
111 | ADDM 2,NINUSE
112 | MOVSI 3,1
113 | CAIL 2,200
114 | MOVEI 2,0
115 | ADDM 3,DIST(2)
116 | DONE: MOVE 6,[POINT 7,[ASCIZ/
117 | /]]
118 | SKIPN ALL
119 | PUSHJ P,PUTSTR
120 | CAMGE 16,MEMSIZ
121 | AOJA 16,LOOP
122 | MOVE 2,INUSE
123 | MOVE 6,[POINT 7,[ASCIZ/
124 |
125 | /]]
126 | PUSHJ P,PUTSTR
127 | PUSHJ P,OCTPNT
128 | MOVE 6,[POINT 7,[ASCIZ/ TOTAL WORDS IN USE.
129 | /]]
130 | PUSHJ P,PUTSTR
131 | MOVE 2,NINUSE
132 | PUSHJ P,OCTPNT
133 | MOVE 6,[POINT 7,[ASCIZ/ TOTAL WORDS FREE.
134 |
135 | (USED) (FREE)
136 | SIZE NUMBER NUMBER
137 |
138 | /]]
139 | PUSHJ P,PUTSTR
140 | MOVEI 4,1
141 | LOOP2: SKIPN DIST(4)
142 | JRST DONE1
143 | MOVEI 2,(4)
144 | PUSHJ P,OCTPNT
145 | MOVEI 7,11
146 | PUSHJ P,PUTOUT
147 | HRRZ 2,DIST(4)
148 | PUSHJ P,OCTPNT
149 | MOVEI 7,11
150 | PUSHJ P,PUTOUT
151 | HLRZ 2,DIST(4)
152 | PUSHJ P,OCTPNT
153 | MOVEI 7,11
154 | PUSHJ P,PUTOUT
155 | HRRZ 2,DIST(4)
156 | IMULI 2,(4)
157 | PUSHJ P,DPT
158 | MOVEI 2,(4)
159 | LSH 2,-3
160 | CAIG 2,NAMLEN
161 | SKIPN 6,NAMTAB-1(2)
162 | JRST NONAM
163 | HRLI 6,()
164 | PUSHJ P,PUTSTR
165 | NONAM: MOVE 6,[POINT 7,[ASCIZ/
166 | /]]
167 | PUSHJ P,PUTSTR
168 | DONE1: CAIGE 4,177
169 | AOJA 4,LOOP2
170 | MOVE 6,[POINT 7,[ASCIZ/ 200 /]]
171 | PUSHJ P,PUTSTR
172 | HRRZ 2,DIST
173 | PUSHJ P,OCTPNT
174 | MOVEI 7,11
175 | PUSHJ P,PUTOUT
176 | HLRZ 2,DIST
177 | PUSHJ P,OCTPNT
178 | MOVE 6,[POINT 7,[ASCIZ/
179 | /]]
180 | PUSHJ P,PUTSTR
181 | PUSHJ P,PUTSTR
182 | MOVE 2,NFREE
183 | PUSHJ P,OCTPNT
184 | MOVE 6,[POINT 7,[ASCIZ/ FREE BLOCKS.
185 | /]]
186 | PUSHJ P,PUTSTR
187 | MOVE 2,NUSE
188 | PUSHJ P,OCTPNT
189 | MOVE 6,[POINT 7,[ASCIZ/ USED BLOCKS.
190 | /]]
191 | PUSHJ P,PUTSTR
192 | MOVEI 16,247
193 | PEEK 16,
194 | MOVEI 2,1(16) ;NFSGETS
195 | PEEK 2,
196 | MOVEI 14,2(16) ;NFSGIVES
197 | PEEK 14,
198 | MOVE 15,2
199 | PUSHJ P,OCTPNT
200 | MOVE 6,[POINT 7,[ASCIZ/ NFSGETS
201 | /]]
202 | PUSHJ P,PUTSTR
203 | MOVE 2,14
204 | SUB 15,2
205 | PUSHJ P,OCTPNT
206 | MOVE 6,[POINT 7,[ASCIZ/ NFSGIVES
207 | /]]
208 | PUSHJ P,PUTSTR
209 | MOVEI 2,30(16)
210 | PEEK 2,
211 | SUB 15,2
212 | PUSHJ P,OCTPNT
213 | MOVE 6,[POINT 7,[ASCIZ/ NFSGFA
214 | /]]
215 | PUSHJ P,PUTSTR
216 | MOVE 2,15
217 | PUSHJ P,OCTPNT
218 | MOVE 6,[POINT 7,[ASCIZ/ BLOCKS STILL CLAIMED
219 | /]]
220 | PUSHJ P,PUTSTR
221 | MOVEI 16,264
222 | PEEK 16,
223 | MOVSI 15,-17
224 | MOVE 6,[POINT 7,[ASCIZ/
225 |
226 |
227 | REQUEST POPULATIONS:
228 | SIZE COUNT
229 | /]]
230 | PUSHJ P,PUTSTR
231 | RPQLOP: MOVE 2,16
232 | ADDI 2,(15)
233 | PEEK 2,
234 | JUMPE 2,RPQSKP
235 | PUSH P,2
236 | MOVEI 2,1(15)
237 | LSH 2,3
238 | PUSHJ P,OCTPNT ;PRINT OCTAL.
239 | MOVEI 7,11
240 | PUSHJ P,PUTOUT
241 | POP P,2
242 | PUSHJ P,OCTPNT
243 | MOVE 6,[POINT 7,[ASCIZ/
244 | /]]
245 | PUSHJ P,PUTSTR
246 | RPQSKP: AOBJN 15,RPQLOP
247 | CALLI 12
248 |
249 |
250 | NAMTAB: [ASCIZ/ JOB READ OR WRTINF/] ;0-6
251 | [ASCIZ/ DATA DISK QUEUE BLOCK/] ;7-16
252 | [ASCIZ/ RUN UUO OR JBTJL/] ;17-26
253 | [ASCIZ/ IMP DDB/] ;27-36
254 | [ASCIZ/ WHO LINE OR MAIL/] ;37-46
255 | [ASCIZ/ IMP MESSAGE BLOCK/] ;47-56
256 | [ASCIZ/ PAGE PRINTER BLOCK/] ;57-66
257 | 0 ;67-76
258 | [ASCIZ/ JBTDTS OR DSK DDB/] ;77-106
259 | 0 ;107-116
260 | [ASCIZ/ TTY DDBS & LINE POINTER TABLE/] ;117-126
261 | [ASCIZ/ JBTPDL/] ;127-136
262 | [ASCIZ/ DISPLAY HEADER OR BLK TBL FOR DPYOUT/] ;137-146
263 | 0 ;147-156
264 | 0 ;157-166
265 | 0 ;167-176
266 | [ASCIZ/ APRLST - TIMED USER INTERRUPT LIST/] ;177-206
267 | NAMLEN__.-NAMTAB
268 |
269 | DPT: PUSHJ P,DP1
270 | MOVEI 7,"."
271 | JRST PUTOUT
272 |
273 | DP1: SKIPA 3,[=10]
274 | OCTPNT: MOVEI 3,10
275 | HRRM 3,OCTPN1
276 | OCTPN1: IDIVI 2,10
277 | HRLM 3,(P)
278 | JUMPE 2,.+2
279 | PUSHJ P,OCTPN1
280 | OCTOUT: HLRZ 7,(P)
281 | ADDI 7,60
282 | PUSHJ P,PUTOUT
283 | POPJ P,
284 | PUTOUT: SOSG HEAD+2
285 | OUT
286 | CAIA
287 | HALT STRTA
288 | IDPB 7,HEAD+1
289 | CPOPJ: POPJ P,
290 |
291 | PUTSTR: ILDB 7,6
292 | JUMPE 7,CPOPJ
293 | PUSHJ P,PUTOUT
294 | JRST PUTSTR
295 | LITVAR
296 | NAME: 'FREE '
297 | 'LST '
298 | 0
299 | 0
300 | HEAD: BLOCK 3
301 | PDL: BLOCK 10
302 | DIST: BLOCK 200
303 | NOSETP:
304 | NOSET: OUTSTR [ASCIZ/SETPR2 FAILURE
305 | /]
306 | CALLI 12
307 | NOLPT: OUTSTR [ASCIZ/CAN'T INIT THE LPT
308 | /]
309 | CALLI 12
310 | INCONS: OUTSTR [ASCIZ/FREE STORAGE BLOCKS ARE INCONSISTIENT
311 | /]
312 | CALLI 12
313 | END STRT
314 |
315 |
--------------------------------------------------------------------------------
/sys/J17-1974/impddb.MAC:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00007 PAGES
2 | RECORD PAGE DESCRIPTION
3 | 00001 00001
4 | 00002 00002 SUBTTL DATA AREA FOR INTERMINABLE MESSAGE PROTESTOR - JAM SEPT, '71
5 | 00003 00003 MODEL DEVICE DATA BLOCK FOR IMP CONNECTIONS
6 | 00005 00004 OUTPUT ROUTINE STORAGE
7 | 00008 00005 STORAGE FOR CLOCK LEVEL WAIT ROUTINE
8 | 00010 00006 HOST AND LINK TABLES
9 | 00012 00007 THE FOLLOWING ARE COUNTERS OF THE NUMBER OF TIMES VARIOUS EVENTS HAVE HAPPENED
10 | 00016 ENDMK
11 | ;
12 | SUBTTL DATA AREA FOR INTERMINABLE MESSAGE PROTESTOR - JAM SEPT, '71
13 | ; MODEL DEVICE DATA BLOCK FOR IMP CONNECTIONS
14 |
15 | DEFINE Z(NAME,VAL)
16 |
17 | DEVSHR,,0 ; DEVCMR
18 | DDBMDL: SIXBIT /IMP/
19 | TDLEN+1 ; DEVCHR, BUFFER SIZE
20 | 0 ; DEVIOS
21 | LPTDDB,,IMPDSP ; DEVSER, UUO DISPATCH TABLE ADDRESS
22 | DVIMP!DVLNG!DVIN!DVOUT,,154403
23 | 0 ; DEVLOG
24 | 0 ; DEVBUF
25 | 0 ; DEVIAD
26 | 0 ; DEVOAD
27 | 0 ; DEVFIL
28 | 0 ; DEVEXT
29 | Z(INL,0) ; INPUT LIST
30 | Z(MAL,0) ; MESSAGE ALLOCATION
31 | Z(BAL,0) ; BIT ALLOCATION
32 | Z(NHMA,0) ; NOMINAL MESSAGE ALLOCATION
33 | Z(NHBA,0) ; NOMINAL BIT ALLOCATION
34 | Z(NHMA2,0) ; 1/2 OF THE NOMINAL MESSAGE ALLOCATION
35 | Z(NHBA2,0) ; 1/2 OF THE NOMINAL BIT ALLOCATION
36 | Z(HMA,0) ; HIS MESSAGE ALLOCATION
37 | Z(HBA,0) ; HIS BIT ALLOCATION
38 | Z(MIIL,0) ; NUMBER OF MESSAGES IN INPUT LIST
39 | Z(BIIL,0) ; NUMBER OF BITS IN INPUT LIST
40 | Z(TIMES,)
41 | ; CLS, RFNM, ALL, RFC, INP WAIT TIMEOUTS
42 | Z(TIM,-1) ; TIMEOUT COUNT
43 | IMPDLN__.-DDBMDL+1
44 |
45 | IMPDIE: 0 ; SET TO NON-ZERO TO KEEP IMP SYSTEM DOWN
46 |
47 | IMPST__. ; NOTE IMP DATA AREA TO BE CLEARED BEGINS HERE
48 | ; OUTPUT ROUTINE STORAGE
49 |
50 | IMPDEAD: 0 ; SET TO -1 IF IMP DECLARED DEAD
51 | IMPOACT: 0 ; SET TO -1 IF OUTPUT IS ACTIVE
52 | IMPOBK: 0 ; OUTPUT BLKO POINTER
53 | IMPOCUR: 0 ; CURRENT BUFFER BEING OUTPUTTED
54 | OLIST: 0 ; OUTPUT LIST. XWD ,
55 | IMPOFC: 0 ; COUNT OF WDS TO GO IN 36B MODE
56 | IMPOFM: 0 ; SET TO -1 FOR FULL WORD (36B) MODE
57 | IMPOCT: 0 ; OUTPUT TIME-OUT COUNT
58 | IMPOPD: 0 ; OUTPUT SIDE PUSHDOWN LIST
59 | IMPOPL: BLOCK INTPLN
60 |
61 | ; INPUT ROUTINE STORAGE
62 |
63 | IMPBKO: 0 ; INPUT BLKI WORD
64 | IMPICUR: 0 ; CURRENT INPUT BUFFER
65 | IMPITOP: 0 ; TOP OF CURRENT INPUT LIST
66 | ILIST: 0 ; INPUT LIST, XWD ,
67 | IMPIFM: 0 ; -1 FOR 36B MODE, OTHERWISE, 32B MODE
68 | IMPHELP: 0 ; IF NO BUFFER AVAILABLE AT I-LEVEL, INPUT WORD IS PLACED HERE
69 | IMPHLF: 0 ; FLAG THAT SAYS WE ARE WAITING FOR AN INPUT BLOCK
70 | IMPIHD: 0 ; SET TO -1 IF WORD IN IMPHELP IS LAST WORD IN MESSAGE
71 | IMPSPARE: 0 ; SPARE INPUT BUFFER
72 | IMPCLN: 0 ; SET TO -1 WHEN A CLOCK REQUEST FOR A NEW SPARE IS PLANTED
73 | IMPINW: 0 ; NUMBER OF WORDS OF REGULAR MESSAGE
74 | IMPIMS: 0 ; MASK FOR CLEANING OUT LAST WORD OF REGULAR MESSAGE
75 | IMPIPD: 0 ; INPUT SIDE PUSHDOWN LIST
76 | IMPIPL: BLOCK INTPLN
77 |
78 | ; I-LEVEL GENERAL STORAGE
79 | ; IN IMPCHAN WE HAVE . . .
80 | ; CONSZ IMP,IDONE!IEND
81 | ; JRST IMPINT
82 | ; CONSZ IMP,ODONE
83 | ; JRST IMPOUT
84 | ; CONSZ IMP,IMPERR
85 | ; JRST IMPERB
86 |
87 | IMPAC1: 0 ; ACCUMULATOR STORAGE
88 | IMPAC2: 0
89 | IMPAC3: 0
90 | IMPPID: P1PID
91 | IMPIDSP: IBEGIN
92 | IMPODSP: OBEGIN
93 | IMPECT: 0 ; ERROR BIT COUNT DOWN
94 | ; STORAGE FOR CLOCK LEVEL WAIT ROUTINE
95 |
96 | IMPCLW: 0 ; -1 MEANS WE ARE WAITING FOR FREE STORAGE
97 | IMPPDP: 0 ; WHERE PUSHDOWN POINTER IS STORED WHILE WAITING
98 | IMPFP: 0 ; THIS IS STACK AS IT LOOKS WHEN WE ENTER AT IMPCLK
99 | IMPSAV: BLOCK CLKPLN
100 | ; WHERE CLOCK LEVEL PUSHDOWN LIST IS STORED WHILE WAITING
101 |
102 | ; STORAGE FOR CLOCK COUNTING SYSTEM TIMEOUTS
103 |
104 | TIMCNT: 0 ; COUNT DOWN FOR CHECKING TIMED WAITS
105 | TIMWAIT: 0 ; NUMBER OF PEOPLE WAITING FOR A TIMEOUT
106 |
107 | ; STORAGE FOR FREE STORAGE MANAGER
108 |
109 | IMPFSL: 0 ; FREE STORAGE LIST
110 | IMPSPN: 0 ; COUNT OF NUMBER OF SPARE BLOCKS NEEDED
111 |
112 | ; STORAGE FOR POLLING ROUTINE
113 |
114 | POLTIM__30*JIFSEC ; 60 MINUTES BETWEEN POLLS
115 | POLCNT: POLTIM
116 |
117 | ; FOR CLEANUP ROUTINE (ACTUALLY PART OF POLLING ROUTINE)
118 |
119 | HCLSTM__6 ; 3 MINUTES BETWEEN CLEANUPS
120 | HCLSCT: 0 ; COUNTER FOR CLEANUPS
121 |
122 | ; OTHER STORAGE . . .
123 |
124 | RECOVER: 0 ; FLAG FOR ERROR RECOVERY SYSTEM
125 | IMPPMS: 0 ; SET 0 TO PRINT ALL ERROR MESSAGES
126 | RSTHST: 377 ; HOST TO BE RESET NEXT
127 |
128 | NOPCNT: 4 ;COUNT OF NOPS YET TO BE SENT TO IMP TO INITIALIZE
129 | ; HOST AND LINK TABLES
130 |
131 | ; STORAGE FOR ROUTINE THAT ASSIGNS NEW AND UNIQUE LINKS
132 |
133 | LSTLNK: 0 ; LAST LINK NUMBER ASSIGNED
134 |
135 | ; HOST TABLES AND LINK TABLE
136 |
137 | L0WAIT: 0 ; COUNT OF NUMBER OF JOBS IN IO WAIT FOR LINK 0 TO BECOME UNBLOCKED
138 | L0CWTL: 0 ; LIST OF MESSAGES INITIATED AT CLOCK LEVEL FOR LINK 0
139 | SYSTBS__. ; BEGINNING OF SYSTEM DATA TABLES
140 | L0BLOK: BLOCK 10 ; BLOCKED-LINK-0 BIT FOR EACH HOST, 32. BITS PER WORD
141 |
142 | MAXNLK__40 ; CURRENT MAXIMUM NUMBER OF CONNECTIONS
143 | LNKMAX: MAXNLK ; FOR THE SYSTEM TABLE READERS
144 | LNKTAB: BLOCK MAXNLK ; BITS 28-35 ARE LINK NUMBER, 20-27 ARE HOST NUMBER
145 | IMPDDB: BLOCK MAXNLK ; CONTAINS ADDRESS OF DDB ON THIS CONNECTION
146 | IMPLS: BLOCK MAXNLK ; LOCAL NUMBER
147 | IMPFS: BLOCK MAXNLK ; FOREIGN SOCKET
148 | IMPBS: BLOCK MAXNLK ; CONNECTION BYTE SIZE
149 | IMPSTB: BLOCK MAXNLK ; STATUS BIT TABLE
150 | IMPRFQ: BLOCK MAXNLK ; LIST OF RFCS WAITING FOR CONNECTION ON THIS SOCKET
151 | FFLNK: 0 ; INDEX OF FIRST FREE LINK.
152 | ; THE FOLLOWING ARE COUNTERS OF THE NUMBER OF TIMES VARIOUS EVENTS HAVE HAPPENED
153 |
154 | FRMIMP: 0 ; NUMBER OF MESSAGES FROM IMP
155 | FLNOPS: 0 ; NUMBER OF NO-OPS RECEIVED
156 | TRACES: 0 ; TRACE MESSAGES
157 | ERWOMI: 0 ; ERRORS WITHOUT MASSAGE IDENTIFICATION
158 | NIMPDN: 0 ; NUMBER OF IMP GOING DOWN MESSAGES
159 | NBLNKS: 0 ; BLOCKED LINK
160 | LTFULL: 0 ; LINK TABLE FULL
161 | ERWMI: 0 ; ERROR WITH MASSAGE IDENTIFICATION
162 | INCMTR: 0 ; INCOMPLETE TRANSMISSION
163 | ILLMT: 0 ; ILLEGAL MESSAGE TYPE
164 | BDRFNM: 0 ; RFNM RECEIVED ON AN UNBLOCKED LINK
165 | NODDBS: 0 ; NO DDB WHEN ONE WAS CALLED FOR
166 | UNKLNK: 0 ; NUMBER OF MESSAGES TO A NON-EX LINK
167 | NRFNL: 0 ; NUMBER OF RFNMS WITH NO LINK IN LINK TABLE
168 | NILLOP: 0 ; ILLEGAL SECOND LEVEL PROTOCAL OP CODE
169 | BSILL: 0 ; BYTE SIZE FOR SECOND LEVEL COMMAND ILLEGAL
170 | BCMM: 0 ; BYTE COUNT TOO SMALL FOR SECOND LEVEL COMMAND
171 | RERRM: 0 ; NUMBER OF ERROR MESSAGE WE HAVE RECEIVED
172 | SPRRP: 0 ; RESET REPLY WITH NO RESET GIVEN
173 | N2RFCS: 0 ; NUMBER OF TIMES TWO RFCS FROM THE SAME HOST WERE RECEIVED
174 | NNOCLS: 0 ; NUMBER OF TIMES NO CLOSE WAS SENT WHEN ONE WAS RECEIVED
175 | NILLST: 0 ; NUMBER OF TIMES THE TABLES WERE IN AN ILLEGAL STATE
176 | NNCOR: 0 ; NUMBER OF TIMES WE DIDN'T HAVE ANY FREE STORAGE AT UUO LEVEL
177 | NNOCLW: 0 ; NUMBER OF TIMES WE DIDN'T ACKNOWLEDGE A CLS
178 | NOLKS: 0 ; NUMBER OF TIMES WE COULDN'T ASSIGN A LINK NUMBER
179 | NHOST0: 0 ; NUMBER OF TIMES WE GOT A MESSAGE FOR HOST ZERO
180 | SLNOPS: 0 ; NUMBER OF SECOND LEVEL NO-OPS RECEIVED
181 | NHANGS: 0 ; INPUT STOPPED DUE TO LACK OF FREE STORAGE
182 | NDPBLK: 0 ; NUMBER OF TIMES WE TRIED TO STEAL F.S. FROM DPYSER
183 | NSPSUS: 0 ; SPARE F.S. BLOCKS WE USED
184 | NRSETS: 0 ; NUMBER OF RESETS WE HAVE RECEIVED
185 | NMESIN: 0 ; MESSAGES RECEIVED
186 | NMESOU: 0 ; MESSAGES SENT
187 | NNOLNK: 0 ; WE RAN OUT OF TABLE SPACE
188 | NSCLSS: 0 ; NUMBER OF UNSOLICITED CLSS WE RECEIVED
189 | NOPADB: 0 ; NO PADDING BIT FOUND
190 | OPTMO: 0 ; NUMBER OF TIMES THE INTERFACE TIMED OUT
191 | IERBIT: 0 ; NUMBER OF TIMES THE IMP ERROR BIT CAME UP
192 | SLUNLK: 0 ; SECOND-LEVEL UNKNOWN LINKS.
193 | RWNOSS: 0 ; REGULAR MESSAGE WITH NO SEND OR RECEIVE SOCKET
194 | NIWCNO: 0 ; NUMBER OF INPUTS (REGULAR MESSAGES) WITHOUT CONNECTION OPEN
195 | NSSC: 0 ; NUMBER OF REGULAR MESSAGES FOR CLOSED SOCKET
196 | NALWNC: 0 ; NUMBER OF ALLOCATES FOR UNCONNECTED LINK
197 |
198 | IMPEND__. ; END OF AREA CLEARED AT INITIALIZE TIME
199 |
--------------------------------------------------------------------------------
/sys/J17-1974/impint.MAC:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00014 PAGES
2 | C REC PAGE DESCRIPTION
3 | C00001 00001
4 | C00003 00002 SUBTTL IMP INTERRUPT-LEVEL DRIVERS - JAM, SEPT '71
5 | C00005 00003 INPUT BEGINS BY COMING TO HERE. READ THE 72-BIT LEADER THEN
6 | C00008 00004 INPUT ROUTINE, READ SUCCESSIVE WORDS AND ZERO OUT BYTES IN LAST WORD
7 | C00010 00005 WE GET HERE IF AT INTERRUPT LEVEL WE HAVE A WORD AND NO BUFFER TO PUT IT IN
8 | C00012 00006 WE GET HERE WHEN INPUT IS DONE.
9 | C00013 00007 ROUTINE TO SET THE WORD COUNT IN THE LAST BUFFER AND
10 | C00015 00008 ROUTINE TO SET UP THE BYTE POINTER AND WORD COUNT FOR A BUFFER
11 | C00017 00009 CLOCK LEVEL ROUTINE TO GET A SPARE BLOCK
12 | C00019 00010 MAIN OUTPUT LOOP
13 | C00023 00011 ROUTINE TO QUEUE A MESSAGE FOR OUTPUT.
14 | C00025 00012 ROUTINE TO SET THE OUTPUT WORD COUNT AND BYTE POINTER
15 | C00027 00013 INPUT INTERRUPT COMES HERE
16 | C00029 00014 BEND IMPSER
17 | C00030 ENDMK
18 | C;
19 | SUBTTL IMP INTERRUPT-LEVEL DRIVERS - JAM, SEPT '71
20 |
21 | ; CONO BITS . . .
22 |
23 | TEST__100000 ; ENTER TEST MODE (DOES ANAL-CRANIAL INVERSION)
24 | STRIN__040000 ; START INPUT, SETS STOP, CLEARS INPUT END
25 | I32__020000 ; SET INPUT BYTE SIZE TO 32B IF IDPIEN SET
26 | O32__010000 ; SET OUTPUT BYTE SIZE TO 32B IF ODPIEN SET
27 | CLRST__004000 ; CLEAR STOP AFTER INPUT BIT
28 | CLRWT__002000 ; CLEAR WAITING TO INPUT BIT
29 | STROUT__000200 ; START OUTPUT
30 | FINO__000100 ; FINISH OUTPUT (LAST BIT HAS BEEN SENT)
31 | IEPIEN__000040 ; ENABLE CHANGE OF INPUT END INTERRUPT CHANNEL
32 | IDPIEN__000020 ; ENABLE CHANGE OF INPUT BYTE SIZE AND INPUT DONE INTERRUPT CHANNEL
33 | ODPIEN__000010 ; ENABLE CHANGE OF OUTPUT BYTE SIZE AND OUTPUT DONE INTERRUPT CHANNEL
34 |
35 | ISTART__STRIN!CLRWT!IEPIEN!IDPIEN!IMPCHN
36 |
37 | ; CONI BITS . . .
38 |
39 | RDY__200000 ; IMP READY
40 | TEST__100000 ; ENTER TEST MODE (DOES ANAL-CRANIAL INVERSION)
41 | IMPERR__040000 ; IMP ERROR
42 | IDONE__020000 ; INPUT DONE
43 | IEND__010000 ; INPUT END.
44 | ODONE__004000 ; OUTPUT DONE
45 | ; INPUT BEGINS BY COMING TO HERE. READ THE 72-BIT LEADER THEN
46 | ; SET BYTE SIZE AND READ REST OF MESSAGE.
47 |
48 | ^IBEGIN:
49 | PUSHJ P,SETUP ; SET UP BYTE POINTER AND COUNT
50 | JRST IHANG ; NO FREE STORAGE, HANG AND WAIT FOR IT
51 | CONI IMP,AC3
52 | BLKI IMP,IMPBKO ; READ FIRST WORD
53 | JFCL
54 | MOVE AC1,IMPICUR ; SET TOP BLOCK OF INPUT
55 | MOVEM AC1,IMPITOP
56 | TRNE AC3,IEND ; IS THAT ALL THE IMP HAS FOR US?
57 | JRST INPDONE ; YES, GO PUT LIST ON ILIST
58 | CONO IMP,CLRWT ; CLEAR THE WAIT FLAG AND READ NEXT WORD
59 | PUSHJ P,ISYNC
60 | SECOND: CONI IMP,AC3
61 | BLKI IMP,IMPBKO ; GET SECOND WORD
62 | JFCL
63 | TRNE AC3,IEND ; DONE YET?
64 | JRST INPDONE
65 | MOVE AC1,IMPITOP ; PICK UP ADDRESS OF BLOCK CONTAINING LEADER
66 | LDB AC2,SIZEP ; PICK UP BYTE SIZE OF TRANSMISSION
67 | SETOM IMPIFM ; ASSUME 36-BIT MODE
68 | SKIPG AC3,BPW(AC2) ; PICK UP BITS PER WORD FOR THIS BYTE SIZE
69 | MOVEI AC3,44 ; IF ILLEGAL BYTE SIZE, IT DOESN'T MATTER
70 | CAIN AC3,40
71 | SETZM IMPIFM
72 | IDIVM AC3,AC2 ; NUMBER OF BYTES/WD IN AC2
73 | MOVEI AC3,(AC2)
74 | LDB AC2,COUNTP
75 | IDIVI AC2,(AC3) ; # WORDS IN AC2, # BYTES IN LAST WORD IN AC3
76 | MOVEM AC2,IMPINW
77 | SETZM IMPIMS ; PREPARE FOR INTEGRAL NUMBER OF WORDS
78 | JUMPE AC3,INPLOP ; INTEGRAL NUMBER OF WORDS GETS A ZERO MASK
79 | LDB AC2,SIZEP
80 | MOVNS AC2 ; GET MASK FOR LAST WORD
81 | IMULI AC2,(AC3)
82 | MOVSI AC1,400000
83 | ASH AC1,1(AC2) ; WE HAVE NOW SPREAD THE BIT OVER THE BYTES
84 | MOVEM AC1,IMPIMS ; AND THAT IS THE MASK
85 | ; INPUT ROUTINE, READ SUCCESSIVE WORDS AND ZERO OUT BYTES IN LAST WORD
86 |
87 | INPLOP: MOVEI AC1,CLRWT!CLRST!IDPIEN!IEPIEN!IMPCHN
88 | SKIPN IMPIFM ; WHAT BYTE SIZE?
89 | ORI AC1,I32 ; 32, SET BIT
90 | CONO IMP,(AC1)
91 | PUSHJ P,ISYNC
92 | INP1: CONI IMP,AC3
93 | BLKI IMP,IMPBKO
94 | JFCL
95 | SOSL IMPINW ; LAST WORD YET?
96 | JRST INPET ; NO, PROCEED ALONG
97 | HRRZ AC2,IMPBKO
98 | MOVE AC1,IMPIMS ; YES, PICK UP MASK
99 | ANDM AC1,(AC2) ; ZERO OUT BYTES IN LAST WORD
100 | SETZM IMPIMS ; AND ZERO ALL SUCCESSIVE WORDS
101 | INPET: TRNE AC3,IEND
102 | JRST INPDONE
103 | SKIPGE IMPBKO ; HAS THE COUNT OVERFLOWED?
104 | JRST INPLOP ; NO, GO BACK FOR NEXT WORD
105 | MOVEI AC1,CLRWT!IDPIEN!IEPIEN!IMPCHN
106 | SKIPN IMPIFM ; IN WHICH CASE, WAIT AFTER NEXT WORD
107 | ORI AC1,I32
108 | CONO IMP,(AC1)
109 | PUSHJ P,ISYNC
110 | PUSHJ P,SETUP
111 | JRST IDHANG
112 | JRST INP1
113 | ; WE GET HERE IF AT INTERRUPT LEVEL WE HAVE A WORD AND NO BUFFER TO PUT IT IN
114 |
115 | IHANG: SETOM IMPITOP ;FLAG TO GETSPARE IN CASE 1 WD MSG
116 | PUSHJ P,HANG
117 | JRST IHEWAIT
118 | MOVE AC1,IMPICUR
119 | MOVEM AC1,IMPITOP ;SET UP POINTER TO FIRST BLOCK OF MSG
120 | JRST SECOND ; GO PICK UP THE NEXT WORD
121 |
122 | IDHANG: PUSHJ P,HANG
123 | JRST IHEWAIT
124 | JRST INP1 ; GO FINISH FILLING BUFFER
125 |
126 | HANG: AOS NHANGS
127 | CONI IMP,AC1
128 | DATAI IMP,IMPHELP
129 | SETOM IMPHLF
130 | TRNE AC1,IEND
131 | POPJ P,
132 | MOVEI AC1,IEPIEN!IDPIEN
133 | SKIPN IMPIFM
134 | ORI AC1,I32 ; CLEAR PI CHANS SO WON'T INTERRUPT
135 | CONO IMP,(AC1)
136 | PUSHJ P,ISYNC
137 | PUSHJ P,HLPWRD
138 | AOS (P)
139 | JRST GETSPARE ;WE JUST USED THE SPARE, TRY TO GET A NEW ONE
140 |
141 | ; ROUTINE TO PICK UP SAVED WORD AND PLACE IT IN BUFFER
142 |
143 | HLPWRD: MOVE AC1,[XWD 1,1] ; BUMP THE IOWD
144 | ADDB AC1,IMPBKO ; BOTH HALVES
145 | MOVE AC2,IMPHELP ; PICK UP SAVED WORD
146 | SETZM IMPIHD ; CLEAR INPUT-END FLAG
147 | SETZM IMPHLF ; CLEAR SAVED WORD
148 | MOVEM AC2,(AC1) ; PLACE IT IN BUFFER
149 | POPJ P,
150 | ; WE GET HERE WHEN INPUT IS DONE.
151 |
152 | INPDONE:
153 | PUSHJ P,IFINISH ; SET WORD COUNT IN LAST BUFFER AND PUT IT ON ILIST
154 | CONO IMP,ISTART ; START THE IMP LISTENING FOR INPUT
155 | INIWAIT:
156 | PUSHJ P,ISYNC
157 | JRST IBEGIN ; START A NEW MESSAGE
158 |
159 | ; GET HERE WHEN WE INPUTTED THE LAST WORD INTO IMPHELP AND THERE
160 | ; IS NO BUFFER FOR IT. CLOCK LEVEL WILL CALL IFINISH THEN
161 | ; START THE IMP UP LISTENING AGAIN.
162 |
163 | IHEWAIT:
164 | SETOM IMPIHD ; NOTE THAT THE WORD IN IMPHELP IS THE LAST WORD
165 | CONO IMP,IDPIEN!IEPIEN ; MAKE SURE WE DON'T INTERRUPT AGAIN
166 | JRST INIWAIT
167 | ; ROUTINE TO SET THE WORD COUNT IN THE LAST BUFFER AND
168 | ; TAG THE ENTIRE BUFFER LIST ONTO ILIST
169 |
170 | IFINISH:
171 | AOS NMESIN ; BUMP NUMBER OF MESSAGES RECEIVED
172 | MOVE AC1,IMPICUR ; PICK UP POINTER TO CURRENT BUFFER
173 | SETZM IMPICUR ; MAKE SURE NOBODY IS HOME, SO SETUP WON'T LINK ONTO A NON-EX BLOCK
174 | HLRE AC2,IMPBKO ; PICK UP WORD COUNT REMAINING
175 | ADD AC2,TLEN(AC1) ; GET LENGTH OF CURRENT BUFFER
176 | MOVEM AC2,TWC(AC1) ; USE THAT AS THE WORD COUNT
177 | MOVE AC1,IMPITOP ; PICK UP FIRST BLOCK OF MESSAGE
178 | SKIPN AC2,ILIST ; ANYTHING IN THE INPUT LIST?
179 | JRST IFINI1 ; NO, PUT US AS THE FIRST AND LAST ELEMENT
180 | MOVSS AC2
181 | HRLM AC1,TLINK(AC2) ; LINK US ON TO THE LAST ELEMENT
182 | IFINI2: HRLM AC1,ILIST ; MAKE US THE LAST ELEMENT
183 | HRRZS TLINK(AC1) ; CLEAR OUR CDR
184 | POPJ P,
185 |
186 | IFINI1: HRRM AC1,ILIST ; MAKE US THE FIRST ELEMENT
187 | JRST IFINI2
188 | ; ROUTINE TO SET UP THE BYTE POINTER AND WORD COUNT FOR A BUFFER
189 | ; IF THERE IS A LIST, IT APPENDS THE NEW BUFFER TO THE END OF THE LIST.
190 | ; SKIP RETURNS IF THERE WAS A BUFFER. IF NOT, NO SKIP AND PUT IN
191 | ; CLOCK REQUEST TO GET A BUFFER.
192 |
193 | SETUP: PUSHJ P,SETUP0
194 | JRST NOSPARE ; NO FREE STORAGE, PLANT CLOCK REQUEST, TAKE FAILURE RETURN
195 | PUSHJ P,GETSPARE ; GET A NEW SPARE BLOCK
196 | JRST CPOPJ1 ; WE WON THIS TIME
197 |
198 | SETUP0: SETZ AC1,
199 | EXCH AC1,IMPSPARE
200 | JUMPE AC1,CPOPJ ; NO FREE STORAGE, GIVE FAILURE RETURN
201 | SETZM TLINK(AC1)
202 | MOVN AC2,TWC(AC1) ; PICK UP LENGTH OF DATA PORTION OF BLOCK
203 | HRLI AC1,(AC2) ; PUT NEGATIVE WORD COUNT BESIDE DATA POINTER
204 | SKIPE AC2,IMPICUR ; IS THERE ALREADY A LIST GOING?
205 | HRRM AC1,TLINK(AC2) ; YES, APPEND US TO IT
206 | HRRZM AC1,IMPICUR ; SET US AS CURRENT BLOCK
207 | ADDI AC1,TDATA-1 ; MOVE TO JUST BEFORE DATA PORTION
208 | MOVEM AC1,IMPBKO ; PUT IN BLKO WORD
209 | JRST CPOPJ1
210 | ; CLOCK LEVEL ROUTINE TO GET A SPARE BLOCK
211 |
212 | GETSP: SETZM IMPCLN ; NOTE CLOCK REQUEST SATISFIED
213 | SKIPE IMPDEAD ; IS THERE ANY IMP?
214 | POPJ P, ; NO, FORGET IT
215 | GETSPARE:
216 | PUSHJ P,IMPGET ; SEE IF THERE IS A BLOCK AVAILABLE
217 | JRST NOSPARE
218 | EXCH AC1,IMPSPARE
219 | SKIPE AC1 ; WAS THERE ALREADY ONE?
220 | PUSHJ P,IMPREL ; YES, GIVE IT BACK
221 | SKIPN IMPHLF ; IS SOMEONE WAITING FOR IT?
222 | POPJ P, ; NO, LEAVE NOW
223 | PUSHJ P,SETUP0 ; YES, SET UP BYTE POINTER AND COUNT
224 | JRST NOSPARE
225 | SKIPN IMPIHD ; IS IT THE LAST WORD?
226 | JRST GETSP1 ; NO, JUST CLEAR THE WAIT FLAG AND GO
227 | PUSHJ P,HLPWRD ; PUT LAST WORD IN BUFFER
228 | MOVE AC1,IMPICUR
229 | SKIPGE IMPITOP
230 | MOVEM AC1,IMPITOP ;SET UP POINTER TO FIRST BLK OF MSG IF FROM IHANG
231 | PUSHJ P,IFINISH ; PUT LIST ON ILIST
232 | CONO IMP,ISTART ; START THE IMP LISTENING AGAIN
233 | JRST GETSPARE ; NOW GET A SPARE AGAIN
234 |
235 | GETSP1: SETZM IMPHLF
236 | MOVEI AC1,CLRWT!ODPIEN!IDPIEN!IMPCHN
237 | SKIPN IMPIFM
238 | ORI AC1,I32
239 | CONO IMP,(AC1) ; START IMP GOING AGAIN, SET UP PI CHANNELS
240 | POPJ P,
241 |
242 | ; PLANT A CLOCK REQUEST TO COME BACK AND LOOK FOR FREE STORAGE
243 |
244 | NOSPARE:
245 | SETO AC1,
246 | EXCH AC1,IMPCLN
247 | JUMPN AC1,CPOPJ
248 | MOVE AC1,[XWD GETSP,0]
249 | CONO PI,PIOFF
250 | IDPB AC1,CLKQ
251 | CONO PI,PION
252 | POPJ P,
253 | ; MAIN OUTPUT LOOP
254 |
255 | IMPOL: MOVEI AC2,ODPIEN!IMPCHN
256 | NXTTFR: SKIPN IMPOFM
257 | ORI AC2,O32
258 | CONO IMP,(AC2)
259 | BLKO IMP,IMPOBK
260 | JFCL
261 | PUSHJ P,OSYNC
262 | ^OBEGIN:
263 | SETOM IMPOACT ; NOTE THAT WE ARE STILL ACTIVE
264 | SOSN IMPOFC ; DECREMENT COUNT OF WORDS LEFT UNTIL 32-BIT MODE
265 | SETZM IMPOFM ; SWITCH TO 32-BIT MODE
266 | SKIPG IMPOBK ; DECREMENT COUNT OF WORDS LEFT IN BUFFER
267 | JRST IMPOL
268 | NXTBLK: MOVE AC1,IMPOCUR ; PICK UP POINTER TO CURRENT BLOCK
269 | SKIPG AC2,RSTHST ; ANY MORE RESETS YET TO BE SENT?
270 | JRST NOTRST ; NO, RELEASE THIS BLOCK
271 | SOS AC2,RSTHST ; YES, COUNT DOWN AND LOAD NEW HOST #
272 | DPB AC2,SRCP ; PUT NUMBER OF NEXT HOST TO BE RESET INTO BLOCK
273 | CONO IMP,FINO ; WHOLE RESET HAS BEEN SENT
274 | PUSHJ P,OSYNC
275 | MOVE AC1,IMPOCUR ; GET BACK THE POINTER TO THE BLOCK
276 | JRST IMPOD1 ; NOW USE SAME BLOCK TO SEND NEXT RESET
277 |
278 | NOTRST: HRRZ AC2,TLINK(AC1)
279 | MOVEM AC2,IMPOCUR
280 | PUSHJ P,IMPREL ; RELEASE JUST EMPTIED BLOCK
281 | SKIPN AC1,IMPOCUR ; IS THERE A NEXT BLOCK?
282 | JRST IMPODN ; NO, OUTPUT DONE
283 | PUSHJ P,SETCNT ; YES, SET UP COUNT AND BYTE POINTER
284 | JRST IMPOL ; START IT GOING
285 |
286 | IMPODN: CONO IMP,FINO ; TELL IMP THE LAST BIT HAS BEEN SENT
287 | PUSHJ P,OSYNC
288 | AOS NMESOU ; BUMP NUMBER OF MESSAGES TRANSMITTED
289 | SKIPN AC1,OLIST ; ANYTHING ELSE IN QUEUE?
290 | JRST OWAIT ; NO, WAIT FOR OUTPUT TO BEGIN
291 | PUSHJ P,LEGAL ; IS IT A LEGAL BLOCK?
292 | JRST [ SETZM OLIST ; NO, FLUSH THE ENTIRE OUTPUT LIST
293 | JRST OWAIT] ; AND PRETEND IT IS EMPTY
294 | HLRZ AC2,TLINK(AC1) ; YES, PICK UP FIRST ELEMENT
295 | HRRM AC2,OLIST
296 | SKIPN AC2
297 | SETZM OLIST
298 | HRRZM AC1,IMPOCUR
299 | IMPOD1: PUSHJ P,SETMOD ; SET 32 OR 36 BIT MODE
300 | PUSHJ P,SETCNT
301 | MOVEI AC2,STROUT!ODPIEN!IMPCHN
302 | JRST NXTTFR
303 |
304 | DONOP1: CONO IMP,STROUT!ODPIEN!IMPCHN
305 | DATAO IMP,[BYTE (8) 4] ;NOP
306 | PUSHJ P,OSYNC
307 | DONOP: CONO IMP,FINO
308 | PUSHJ P,OSYNC
309 | SOSLE NOPCNT
310 | JRST DONOP1
311 | OWAIT: SETZM IMPOACT ; WE ARE NO LONGER ACTIVE
312 | CONO IMP,ODPIEN ; CLEAR PI CHANNEL SO WE HEAR NO EVIL
313 | PUSHJ P,OSYNC ; WAIT FOR CLOCK LEVEL TO START US UP
314 | JRST OBEGIN
315 | ; ROUTINE TO QUEUE A MESSAGE FOR OUTPUT.
316 | ; ENTER WITH MESSAGE IN AC1
317 |
318 | QOUT: PUSHJ P,LEGAL ; REASONABLE BLOCK?
319 | POPJ P, ; NO, LEAVE NOW
320 | CONO PI,IMPOFF
321 | SKIPN IMPOACT ; IS OUTPUT IN PROGRESS?
322 | JRST QIDLE ; NO, START IT BY HAND.
323 | PUSH P,AC2
324 | SKIPN AC2,OLIST ; PUT THIS MESSAGE ON THE END OF THE OUTPUT LIST
325 | JRST QNOLIST
326 | MOVSS AC2
327 | HRLM AC1,TLINK(AC2)
328 | QOXIT: HRLM AC1,OLIST
329 | POP P,AC2
330 | HRRZS TLINK(AC1)
331 | CONO PI,IMPON
332 | POPJ P,
333 |
334 | QNOLIST:
335 | HRRM AC1,OLIST
336 | JRST QOXIT
337 |
338 | ; GET HERE WHEN THE OUTPUT SIDE OF THE IMP IS IDLE
339 |
340 | QIDLE: CONO PI,IMPON ; NO NEED TO BOTHER WITH INTERLOCKING
341 | SETOM IMPOACT
342 | MOVEM AC1,IMPOCUR
343 | PUSH P,AC3
344 | PUSHJ P,SETMOD ; SET UP COUNT OF NUMBER OF WORDS IN 36B MODE
345 | PUSHJ P,SETCNT ; SET UP BYTE POINTER AND COUNT
346 | MOVEI AC3,MAXCNT ; SET UP OUTPUT TIMEOUT
347 | MOVEM AC3,IMPOCT
348 | POP P,AC3
349 | CONO PI,IMPOFF
350 | CONO IMP,STROUT!ODPIEN!IMPCHN
351 | BLKO IMP,IMPOBK
352 | JFCL
353 | CONO PI,IMPON
354 | POPJ P,
355 | ; ROUTINE TO SET THE OUTPUT WORD COUNT AND BYTE POINTER
356 |
357 | SETCNT: MOVN AC2,TWC(AC1) ; PICK UP SIZE OF BLOCK
358 | HRLI AC2,TDATA-1(AC1) ; PUT IN ONE BEFORE DATA PORTION OF BUFFER
359 | MOVSM AC2,IMPOBK ; PLACE IN OUTPUT BLKO WORD
360 | POPJ P,
361 |
362 | ; ROUTINE TO DO SOFTWARE RELOCATION ON ADDESS IN TAC1
363 | ; PUTS RESULT IN DSER
364 |
365 | DOLOC: HRRZI DSER,(TAC1) ; MOVE USER ADDRESS TO DSER
366 | TRNN DSER,400000 ; UPPER SEGMENT ADDRESS?
367 | JRST EOREL ; NO, USE PROG
368 | PUSH P,TEM
369 | LDB TEM,PSEGN ; YES, PICK UP REL. OF UPPER
370 | HRRZ TEM,JBTADR(TEM)
371 | ADDI DSER,-400000(TEM)
372 | POP P,TEM
373 | POPJ P,
374 |
375 | EOREL: ADDI DSER,(PROG)
376 | POPJ P,
377 |
378 | ; ROUTINE TO SET THE COUNT OF THE NUMBER OF WORDS IN 36B MODE
379 |
380 | SETMOD: LDB AC2,SIZEP
381 | MOVEI AC3,2
382 | CAIN AC2,44 ; UNLESS MOVE IS 36B, USE 32B
383 | SETO AC3,
384 | MOVEM AC3,IMPOFC ; SET NUMBER OF WORDS IN 36B
385 | SETOM IMPOFM ; WE ALWAYS START IN 36B MODE
386 | POPJ P,
387 | ; INPUT INTERRUPT COMES HERE
388 |
389 | ^IMPINT:
390 | CONSO IMP,770 ; ANY CHANNEL?
391 | JRST IMPOTS ; NO, CAN'T BE US
392 | MOVEM AC1,IMPAC1
393 | MOVEM AC2,IMPAC2
394 | MOVEM AC3,IMPAC3
395 | EXCH PID,IMPPID
396 | EXCH P,IMPIPD
397 | JRST @IMPIDSP
398 |
399 | ISYNC: POP P,IMPIDSP
400 | EXCH P,IMPIPD
401 | ACREST: MOVE AC1,IMPAC1
402 | MOVE AC2,IMPAC2
403 | MOVE AC3,IMPAC3
404 | EXCH PID,IMPPID
405 | JEN @IMPCHL
406 |
407 | ; OUTPUT INTERRUPTS COME HERE
408 |
409 | ^IMPOUT:
410 | CONSO IMP,7
411 | JRST IMPCTS
412 | MOVEM AC1,IMPAC1
413 | MOVEM AC2,IMPAC2
414 | MOVEM AC3,IMPAC3
415 | HRLOI AC3,377777
416 | MOVEM AC3,IMPOCT
417 | EXCH PID,IMPPID
418 | EXCH P,IMPOPD
419 | JRST @IMPODSP
420 |
421 | OSYNC: POP P,IMPODSP
422 | MOVEI AC3,MAXCNT
423 | SKIPL IMPOACT
424 | HRLOI AC3,377777
425 | MOVEM AC3,IMPOCT
426 | EXCH P,IMPOPD
427 | JRST ACREST
428 |
429 | ; GET HERE ON ERROR BIT
430 |
431 | ^IMPERB:
432 | MOVEM AC1,IMPAC1
433 | MOVEI AC1,IDPIEN!IMPCHN
434 | SKIPN IMPIFM
435 | ORI AC1,I32
436 | CONO IMP,(AC1) ; CLEAR ERROR BIT
437 | MOVE AC1,IMPAC1
438 | AOS IMPECT ; NOTE ANOTHER ERROR BIT DETECTED
439 | JEN @IMPCHL
440 | BEND IMPSER
441 |
--------------------------------------------------------------------------------
/sys/J17-1974/jobdat.MAC:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00004 PAGES
2 | C REC PAGE DESCRIPTION
3 | C00001 00001
4 | C00002 00002 BEGIN JOBDAT - JOB DATA AREA
5 | C00003 00003 M JOBAC,0,20 PLACE WHERE USER ACS ARE STORED ON UUO CALLS
6 | C00007 00004 M JOBRL2,115,1
7 | C00011 ENDMK
8 | C;
9 | ;;BEGIN JOBDAT - JOB DATA AREA
10 | SUBTTL JOBDAT 31 AUG 67
11 |
12 | ;THIS AREA PROVIDES STORAGE OF ITEMS OF INTEREST TO BOTH
13 | ;THE MONITOR AND THE USER
14 |
15 | ;MACRO TO DEFINE SYMBOLS FOR MONITOR USE ONLY
16 | ;THESE MAY BE CHANGED TO SUIT MONITOR
17 |
18 | DEFINE M'(SYMBOL,VALUE,LENGTH)
19 |
21 |
22 | ;MACRO TO DEFINE SYMBOLS FOR USER USE
23 | ;THESE CANNOT BE CHANGED WITHOUT INVALIDATING OLD SAVED FILES
24 |
25 | DEFINE U'(SYMBOL,VALUE,LENGTH)
26 |
28 |
29 | ;MACRO TO DEFINE PARAMETERS OF INTEREST TO MONITOR ONLY
30 | ;THESE MAY BE CHANGED TO SUIT MONITOR
31 | ;MUST ASSEMBLE WITH SYSPAR TAPE FIRST
32 | M JOBAC,0,20 ;PLACE WHERE USER ACS ARE STORED ON UUO CALLS
33 | ;IE RELATIVE 0-17 IN USER AREA
34 | M JOBDAC,LOC,17 ;PLACE WHERE HARDWARE ACS(0-16) ARE STORED
35 | ;WHEN JOB IS INACTIVE. THESE ARE EITHER THE
36 | ;USERS AC IF JOB WAS STOPPED IN USER MODE
37 | ;OR ARE THE EXEC IF STOPED IN EXEC MODE
38 | ;0-16 ALSO STORED HERE ON CLK INTERRUPTS
39 | XP JOBDPG,JOBDAC+PROG ;AC PROG DUMPED HERE
40 | XP JOBD15,JOBDAC+15 ;AC 15 DUMPED HERE
41 | XP JOBD16,JOBDAC+16 ;AC 16 DUMPED HERE
42 | XP JOBD17,JOBDAC+17 ;AC 17 DUMPED HERE
43 | U JOBUUO,40,1 ;USER UUO TRAP LOC.(UUO STORED HERE)
44 | U JOB41,41,1 ;USER UUO JSR LOCATION
45 | ;42 UNUSED (PLEASE SEE JBR OR BH BEFORE SNARFING)
46 | M JOBENB,43,1 ;LH=PC CHNG,AR OVF ENABLE/DISABLE APR BITS
47 | ;RH=APR CONSO FLAGS FOR USER APR TRAPPING
48 | ;SET BY CALL [SIXBIT /APRENB/]
49 | U JOBREL,44,1 ;LH=0,RH=HIGHEST REL. ADR. IN USER AREA
50 | M JOBTM1,LOC,1 ; SOME TEMP CELLS TOO
51 | M JOBTM2,LOC,1
52 | M JOBTM3,LOC,1
53 | M JOBTM4,LOC,1
54 | M JOBTM5,LOC,1
55 | M JOBPDL,LOC,1 ; PUSHDOWN LIST FOR GETPDL AND GIVPDL TO USE
56 | LOC__71
57 | XP JOBPLN,LOC-JOBPDL
58 | U JOBINT,LOC,1 ;TO SEPARATE OLD AND NEW INTERRUPT SYSTEMS
59 | XP JOBPRT,LOC ;FIRST LOC PROTECTED BY BEING COPIED INTO MONITOR
60 | XP JOBPR1,JOBPRT+1 ;FIRST LOC+1
61 | M JOBHCU,LOC,1 ;HIGHEST USER IO CHANNEL IN USE
62 | ;ONLY JOBJDA...JOBJDA+C(JOBHCU) ARE COPIED INTO
63 | ;MONITOR WHEN JOB IS RUN. 0 MEANS NONE OR
64 | ;CHAN. 0 IN USE, -1 MEANS SAVEGET HAS ACTIVE IO
65 |
66 | M JOBPC,LOC,1 ;JOB PC WHEN JOB INACTIVE
67 | U JOBDDT,74,1 ;LH UNUSED,RH=STARTING ADDRESS OF USER DDT
68 | XP JOBSAV,JOBDDT-1 ;FIRST LOC.-1 WRITTEN BY SAVE COMMAND
69 | M JOBJDA,LOC,20 ;JOB DEVICE ASSIGNMENT TABLE
70 | ;LH=UUOS DONE SO FAR,RH=ADR. OF DEVICE DATA BLOCK IN MONITOR
71 | XP JOBJMH,JOBHCU-JOBJDA ;JOBHCU-JOBJDA
72 | ;USED BY ANYACT ROUT. IN CORE1
73 | XP JOBPFI,JOBJDA+17 ;HIGHEST LOC. IN JOB DATA AREA PROTECTED FROM IO
74 | XP MJOBCK,JOBPFI-JOBDAC ;AREA CHECKSUMMED DURING SWAPPING
75 |
76 | JOBPRT__JOBPRT ;MAKE DOWNWARDS AVAILABLE
77 | JOBPFI__JOBPFI ;MAKE DOWNWARDS AVAILABLE
78 | M JOBRL2,115,1
79 | U JOBSYM,116,1 ;POINTER TO LOADER AND DDT SYMBOL TABLE POINTER
80 | U JOBUSY,117,1 ;POINTER TO UNDEFINED SYMBOL TABLE
81 | ;SET BY LOADER, NOT YET USED BY DDT
82 | U JOBSA,120,1 ;LH=FIRST LOC NOT LOADED BY RELOCATING LOADER
83 | ;RH=STARTING ADDRESS OF USER PROGRAM
84 | U JOBFF,121,1 ;FIRST FREE LOCATION IN USER AREA
85 | ;USED BY MONITOR TO ASSIGN I/O BUFFERS IN TOP
86 | ;OF USER AREA
87 | U JOBS41,122,1 ;C(JOB41) SAVED HERE ON SAVE COMMAND
88 | ;RESTORE FROM HERE ON GET
89 | M JOBEXM,LOC,1 ;LAST LOC EXAMINED OR DEPOSITED USING
90 | ;D OR E COMMANDS
91 | U JOBREN,124,1 ;REENTER ADDRESS FOR REENTER COMMAND
92 | U JOBAPR,125,1 ;PLACE TO TRAP TO IN USER AREA ON APR TRAP
93 | ;ENABLED BY APRENB UUO
94 | U JOBCNI,126,1 ;APR IS CONIED INTO C(JOBCNI) ON APR TRAP
95 | U JOBTPC,127,1 ;PC IS STORED HERE ON USER APR TRAP
96 | U JOBOPC,130,1 ;OLD PC IS STORED HERE ON START,DDT,REENTER,
97 | ;STARTC COMMANDS
98 | U JOBCHN,131,1 ;LH=FIRST LOC AFTER FIRST FORTRAN 4 LOADED PROGRAM
99 | ;RH=FIRST LOC AFTER FIRST FORTRAN 4 BLOCK DATA
100 | ;TO BE USED FOR JOB CHAINING
101 | M JOBFDV,LOC,1 ;DEV. DATA BLOCK ADR. FOR FINISH COMMAND
102 | U JOBCOR,133,1 ;SIZE OF CORE FOR JOB ON RUN,SAVE,GET COM.
103 | M HINAME,134,1 ;NAME OF UPPER SEGMENT OVER SAVE-GET
104 | M HILOC,135,1 ;LOC OF UPPER SEGMENT IN DUMP FILE OVER SAVE-GET
105 | ;134-137 USED BY LOADER FOR BLT TO MOVE PROGRAM DOWN(CAN BE REMOVED)
106 | XP JOBDA,140 ;FIRST LOC NOT USED BY JOB DATA AREA
107 |
108 | ;;; BEND
109 |
--------------------------------------------------------------------------------
/sys/J17-1974/libcnt.MAC:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/sys/J17-1974/libcnt.MAC
--------------------------------------------------------------------------------
/sys/J17-1974/lowcor.MAC:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00006 PAGES
2 | C REC PAGE DESCRIPTION
3 | C00001 00001
4 | C00002 00002 LOWCOR 6 SEPT 67
5 | C00005 00003 BEGIN PWAIT
6 | C00010 00004 DEVOPR: SIXBIT /CTY/ OPERATORS CONSOLE DEVICE = CTY.
7 | C00013 00005 MONTH TABLE FOR DAYTIME PRINTING
8 | C00014 00006 HISTOGRAM STATISTIC GATHERING ROUTINE.
9 | C00017 ENDMK
10 | C;
11 | SUBTTL LOWCOR 6 SEPT 67
12 |
13 | SHDACS: BLOCK 20 ;ACS STORED HERE DURING ZSHAD
14 |
15 | ; BEGINNING OF PROTECTED PART OF MONITOR . . .
16 | CHKBEG__.
17 |
18 | ;; ON THIS PAGE LIE SOME VERY COMMON AND USEFUL ROUTINES . . .
19 |
20 | TPOPJ1: AOS -1(P) ;RESTORE TAC THEN SKIP RETURN
21 | TPOPJ: POP P,TAC ;RESTORE TAC
22 | POPJ P, ;AND RETURN
23 |
24 | CPOPJ2: AOS (P) ;DOUBLE SKIP SUBROUTINE RETURN
25 | CPOPJ1: AOSA (P) ;SKIP SUBROUTINE RETURN
26 | PIONJ: CONO PI,PION
27 | CPOPJ: POPJ P,
28 |
29 | FMCHK: PUSHJ P,ZSHAD
30 | JRST CPOPJ1 ;FM ENB OK
31 | MOVE TAC,[440700,,[ASCIZ/TURN ON FM ENB. THEN CONTINUE.
32 | /]]
33 | JSR DDTTYP
34 | POP P,DDTTYP
35 | JRST 4,@DDTTYP
36 |
37 | ZSHAD: CONSO APR,MAOFF ;ARE WE THE PDP-10?
38 | POPJ P, ;NO. DO NOTHING.
39 | PUSH P,140 ;SAVE THE UUO LOCATIONS
40 | PUSH P,141
41 | PUSH P,LASTPR
42 | MOVEM 17,SHDACS+17 ;SAVE THE REAL AC'S SO WE DON'T ZERO THEM
43 | MOVEI 17,SHDACS
44 | BLT 17,SHDACS+16
45 | MOVE 0,[JRST ZSHAD1]
46 | MOVEM 0,141 ;SET TO TRAP OUR ILLEGAL INSTRUCTION
47 | MOVE 17,[776000,,2000]
48 | MOVEM 17,LASTPR
49 | DATAO APR,17
50 | MOVSI 17,USRSHD
51 | BLT 17,17
52 | JRST 1,1 ;RUN USER MODE CODE IN ACS
53 |
54 | ZSHAD1: EXCH SHDACS ;SHDACS_0 IF NO FM ENB
55 | MOVE 17,[SHDACS+1,,1]
56 | BLT 17,17
57 | POP P,LASTPR
58 | POP P,141
59 | POP P,140
60 | DATAO LASTPR
61 | SKIPN SHDACS
62 | AOS (P) ;SKIP RETURN IF FM ENB OFF
63 | POPJ P,
64 |
65 | USRSHD: -1 ;GETS LOADED INTO ACS (STARTING AT ZERO)
66 | SETZM -2000 ;CLEAR SHADOW ZERO
67 | BLT 17,-2000+17 ;BLT ACS INTO SHADOW MEM
68 | JRST 4, ;GET BACK TO EXEC MODE
69 | BLOCK USRSHD-.+17
70 | 0,,-2000 ;17
71 | BEGIN PWAIT
72 | ;COMMENT
73 | ;NEW, SIMPLE-MINDED PWAIT ... ALGORITHM (?) BY D.POOLE
74 | ;REQUIRES SYNINI TO SETZM A (SETOM A FOR OLD PWAIT CODE)
75 | ;0(TAC) > 0 => P1 WANTS/HAS IT
76 | ;1(TAC) > 0 => P2 WANTS/HAS IT
77 |
78 | ^PWAIT: PUSH P,TAC
79 | XCT @-1(P) ;PICK UP ARG AFTER CALL
80 | JUMPN PID,P2L0
81 | P1L0: AOS (TAC)
82 | SKIPG 1(TAC) ;SKIP IF P2 ALSO WANTS/HAS IT
83 | JRST PWAITX ;GOTCHA
84 | SOS (TAC) ;GIVE IT UP AND TRY AGAIN
85 | JRST P1L0
86 |
87 | P2L0: AOS 1(TAC)
88 | SKIPG (TAC)
89 | JRST PWAITX
90 | SOS 1(TAC)
91 | JRST P2L0
92 |
93 | ^XWAIT: PUSH P,TAC
94 | XCT @-1(P) ;PICK UP ARG AFTER CALL
95 | JUMPN PID,XWAIT1
96 | SOSL (TAC)
97 | JRST PWAITX
98 | XWAITE: PUSHACS
99 | PUSHJ P,DISMES
100 | ASCIZ /PDP8+-2 OVER XSYNCED. CALL FROM /
101 | HRRZ TAC,-21(P) ;-1 FOR PUSH P,TAC
102 | PUSHJ P,DISLOC
103 | PUSHJ P,DISCRLF
104 | PUSHJ P,DISMES
105 | ASCIZ /GET A WIZARD TO CHECK PID FOR ERROR, OR
106 | ON PDP-10 TYPE POPJ 3,$X
107 | ON PDP-6 PRESS CONTINUE
108 | /
109 | PUSHJ P,DISFLU
110 | CONSO APR,MAOFF
111 | JRST 4,.+2
112 | PUSHJ P,DDTCAL
113 | POPACS
114 | JUMPN PID,[SETZM 1(TAC)
115 | JRST PWAITX]
116 | SETZM (TAC)
117 | JRST PWAITX
118 |
119 | XWAIT1: SOSGE 1(TAC)
120 | JRST XWAITE
121 | PWAITX: POP P,TAC
122 | JRST CPOPJ1
123 | ;
124 |
125 | COMMENT THIS IS THE OLD PWAIT...NOT USED SINCE 12/3/73
126 | ;REQUIRES SYNINI TO SETOM A (SETZM A FOR NEW CODE)
127 | ;; DUAL-PROCESSOR WAIT ROUTINES . . . JAM, 1968 (?)
128 | ;; JHS, APR 1972
129 | ;; REFERENCES: COMMUNICATIONS OF THE ACM, VOL. 8, NUM. 9, P 569.
130 | ;; COMMUNICATIONS OF THE ACM, VOL. 9, NUM. 5, PP 320-22.
131 | ;; THESE ROUTINES ARE A MODIFICATION OF THE TWO COMPUTER ALGORITHM
132 | ;; BY KNUTH ON PAGE 322 OF THE ABOVE REFERENCE. THE FOLLOWING CORRE-
133 | ;; SPONDENCES EXIST: 0(TAC) _ K
134 | ;; 1(TAC) _ CONTROL[I] (PROCESSOR 1)
135 | ;; 2(TAC) _ CONTROL[J] (PROCESSOR 2)
136 | ;; IN ADDITION, 3(TAC) IS USED AS A DEPTH COUNTER, SINCE A
137 | ;; PROCESSOR IN ITS CRITICAL SECTION CAN BE INTERRUPTED BY ITSELF AT A
138 | ;; HIGHER LEVEL AND SUCCEED IN ENTERING A HIGHER PRIORITY CRITICAL SECTION.
139 | ;; NOTE: CARE MUST BE TAKEN ON THE STANFORD SYSTEM, WHERE P2 IS THE
140 | ;; PDP-6, WHICH DOES READ-MODIFY-WRITES TO MEMORY ON SKIP INSTRUCTIONS!
141 |
142 | ^PWAIT: PUSH P,TAC
143 | XCT @-1(P) ;PICK UP ARG AFTER CALL
144 | SKIPN P2NUM ;P2 IS RUNNING?
145 | JRST PWAIT2 ;NO, DON'T BOTHER (BUT DO AOS SINCE XWAIT IGNORES P2NUM)
146 | JUMPN PID,P2L00
147 | P1L0: SETOM 1(TAC)
148 | P1L1: AOS NPWAITS
149 | SKIPE (TAC)
150 | JRST P1L2
151 | SKIPE 2(TAC)
152 | JRST P1L1
153 | P1L2: MOVNS 1(TAC)
154 | SKIPLE 2(TAC)
155 | JRST P1L0
156 | SETOM (TAC)
157 | PWAIT2: AOS 3(TAC) ;INCREMENT DEPTH COUNT
158 | PWAITX: POP P,TAC
159 | JRST CPOPJ1
160 |
161 | P2L00: PUSH P,TAC1 ; P2 CAN'T DO SKIP'S, SAVE AN ACCUMULATOR
162 | MOVEI TAC1, ;AND SET IT TO 0 FOR TESTS
163 | P2L0: SETOM 2(TAC)
164 | P2L1: CAMN TAC1,(TAC)
165 | JRST P2L2
166 | CAME TAC1,1(TAC)
167 | JRST P2L1
168 | P2L2: MOVNS 2(TAC)
169 | CAMGE TAC1,1(TAC)
170 | JRST P2L0
171 | SETZM (TAC)
172 | POP P,TAC1 ; RESTORE P2'S EXTRA ACCUMULATOR
173 | JRST PWAIT2
174 |
175 | ^XWAIT: PUSH P,TAC
176 | XCT @-1(P) ;GET ARG
177 | SOSLE 3(TAC) ;ARE WE BACK UP TO TOP LEVEL?
178 | JRST PWAITX ; NO
179 | JUMPN PID,XWAIT2 ;ARE WE P1 OR P2?
180 | SETZM (TAC) ; P1
181 | SETZM 1(TAC)
182 | JRST PWAITX
183 |
184 | XWAIT2: SETOM (TAC) ; P2
185 | SETZM 2(TAC)
186 | JRST PWAITX
187 |
188 | END OF OLD PWAIT CODE
189 |
190 | BEND PWAIT
191 | DEVOPR: SIXBIT /CTY/ ;OPERATORS CONSOLE DEVICE = CTY.
192 | ;PUBLIC LOGICAL NAME "OPR" WILL BE THIS DEVICE
193 | ;ALSO UNEXPLAINED MONITOR ERROR MESSAGE WILL BE TYPED
194 | ;ON TTY OPR(FIRST TTY TYPED ON IF DEVOPR=0)
195 | DEFINE FIGMAC!(NUM)
196 |
197 | PRINTS /Did you remember to change CONFIG?
198 | /
199 |
200 | IFE FTDISK,<
201 | CONFIG: FIGMAC (2)
202 | SYSTAP: SIXBIT /DTA4/
203 | >
204 | IFN FTDISK,<
205 | CONFIG: FIGMAC (6)
206 | SYSTAP: SIXBIT /DSK/
207 | >
208 |
209 |
210 | ;BYTE POINTERS
211 |
212 | PUUOAC: POINT 4,UUO,12 ;UUO AC FIELD
213 | PIOMOD: POINT 4,IOS,35 ;MODE BITS
214 | PJOBN: POINT 6,DEVCHR(DDB),5 ;DEVICE JOB ASSIGNMENT
215 | PDVBLN: POINT PUNITP,DEVCHR(DDB),35 ; DEVICE BUFFER LENGTH
216 | PUNIT: POINT PUNITS,DEVCHR(DDB),35-PUNITP ;DEVICE UNIT NO.
217 | PSEGN: POINT 6,JBTSTS(J),35 ; NUMBER OF HIGH SEGMENT THIS JOB HAS
218 | PDSEGN: POINT 6,(AC1),35 ; NUMBER OF SEGMENT IN JBTDTS
219 | PSINF0: POINT 6,JBTSIN,35 ; HEAD OF LIST, FORWARD LINK
220 | PSINFJ: POINT 6,JBTSIN(J),35 ; FORWARD LINK (J)
221 | PSINFT: POINT 6,JBTSIN(TAC),35 ; FORWARD LINK (TAC)
222 | PSINB0: POINT 6,JBTSIN,29 ; HEAD OF LIST, BACKWARD LINK
223 | PSINBJ: POINT 6,JBTSIN(J),29 ; BACKWARD LINK (J)
224 | PSINBT: POINT 6,JBTSIN(TAC),29 ; BACKWARD LINK (TAC)
225 |
226 | REPEAT 0,<
227 | PRUNB: POINT 2,JB2STS(J),16 ; POINTER TO PROCESSOR RUN BITS
228 | >
229 |
230 | PDVTIM: POINT 6,DEVCHR(DDB),17 ;TIME IN SECONDS BEFORE DEVICE
231 | ;IS SAID TO BE HUNG
232 | PDVCNT: POINT 6,DEVCHR(DDB),11 ;COUNTER DOWN EACH SECOND,
233 | ;1 TO 0 TRANSITION MEANS HUNG DEVICE
234 |
235 |
236 | IFN FTSWAP,<
237 | IMGIN: POINT 8,JBTSWP(J),35 ;POINTER TO INCORE IMAGE (1K BLOCKS)
238 | IMGOUT: POINT 8,JBTSWP(J),26 ;POINTER TO OUTCORE IMAGE
239 | IMGINT: POINT 8,JBTSWP(DDB),35 ;POINTER TO INCORE IMAGE
240 | >
241 | IFN FTLOGIN,<
242 | SYSPPN: SIXBIT / 1 1/ ;1,1 IS SYSPPN ;JS
243 | DUMPPN: SIXBIT / 1 2/ ;1,2 IS DUMPPP ;JS
244 | CUSPPN: SIXBIT / 1 3/ ;1,3 IS CUSP AREA
245 | HELPPP: SIXBIT /100100/ ;100,100 IS HELPPP AND DEMOS ;JS
246 | >
247 | ;MONTH TABLE FOR DAYTIME PRINTING
248 |
249 | MONTAB: =30B5+"JAN"
250 | =27B5+"FEB"
251 | =30B5+"MAR"
252 | =29B5+"APR"
253 | =30B5+"MAY"
254 | =29B5+"JUN"
255 | =30B5+"JUL"
256 | =30B5+"AUG"
257 | =29B5+"SEP"
258 | =30B5+"OCT"
259 | =29B5+"NOV"
260 | =30B5+"DEC"
261 | MIDNIT: =60*=60*=24*JIFSEC ;NO OF JIFFIES TILL MIDNIGHT
262 |
263 |
264 | ; THE FOLLOWING IS A LIST OF THE ASCII NAMES OF THE QUEUES
265 | ; SO SYSTAT CAN READ THEM
266 |
267 | QNAMS:
268 | DEFINE X!(A) {~
269 | QUEUES
270 | CODES
271 | PQUEUES
272 | ASCII /CMQ / ; DON'T FORGET COMMAND WAIT!!
273 | ; HISTOGRAM STATISTIC GATHERING ROUTINE.
274 | ;
275 | ; CALL: PUSHJ P,HG
276 | ; RETURN HERE ALWAYS
277 | ;
278 | ; CURRENTLY, THIS ROUTINE IS CALLED (ONLY) BY KDBINT.
279 | ; THUS, STATISTICS ARE GATHERED ON EVERY KEYSTROKE OF EVERY
280 | ;MICROSWITCH KEYBOARD.
281 | ; THIS ROUTINE, ONCE EVERY HGSET TIMES IT IS CALLED, WILL
282 | ;INCREMENT ONE & ONLY ONE OF THE 5 COUNTERS: HGCH6,HGUSR,HGSPW,HGUUO,
283 | ;HGSYS. IN ADDITION, IF HGSYS IS INCREMENTED, THEN ONE OF THE
284 | ;COUNTERS HGCNTS WILL BE INCREMENTED, AND IF HGUSR IS INCREMENTED
285 | ;AT A TIME WHEN THE NULL JOB IS RUNNING, THEN EITHER HGNULL OR HGIDLE
286 | ;DEPENDING ON THE STATE OF .
287 | ;
288 | ; THIS ROUTINE CLOBBERS ACCUMULATOR TAC, RETURNS WITH POPJ, P.
289 | ;NO OTHER ACCUMULATORS ARE USED.
290 |
291 | IFN FTHG,<
292 | HG:
293 | SOSE HGYET ;TIME TO DO OUR THING YET?
294 | POPJ P, ;NO.
295 | MOVE TAC,HGSET
296 | MOVEM TAC,HGYET ;RESET TIMER
297 | CONSZ PI,40 ;CH2 ACTIVE?
298 | AOS HGCH2 ;YES. COUNT IT
299 | CONSZ PI,1000 ;CHANNEL 6 IN PROGRESS?
300 | AOSA HGCH6 ;YES, INCREMENT OUR COUNTER AND RETURN
301 | SKIPA TAC,CH5 ;ELSE, GET PC WORD
302 | POPJ P, ;RETURN FOR CH6 ACTIVE.
303 | SKIPE SPWUUF
304 | JRST ISHGSP ;CATCH SPCWAR UUO'S ALSO
305 | TLNN TAC,USRMOD ;WE INTERRUPTED A USER?
306 | JRST HG4 ;NO. WE'RE IN THE SYSTEM
307 | CONSZ PI,400 ;USER IN CHANNEL 7?
308 | ISHGSP: AOSA HGSPW ;YES - SPACEWAR USER
309 | AOSA HGUSR ;NO. PLAIN USER CODE.
310 | POPJ P,
311 | SKIPE JOB ;NULL JOB RUNNING?
312 | POPJ P, ;NO
313 | SKIPGE JBTQ-RUNQ ;IS THIS IDLE OR WASTED
314 | SKIPL JBTQ-TQ
315 | AOSA HGNULL ;WASTED TIME (RUNQ OR TQ NOT EMPTY)
316 | AOS HGIDLE ;IDLE TIME.
317 | POPJ P,
318 |
319 | HG4: CONSO PI,400 ;CHANNEL 7 IN PROGRESS?
320 | AOSA HGUUO ;NO WE'RE IN A UUO.
321 | AOSA HGSYS ;WE INTERRUPTED CHANNEL 7.
322 | POPJ P,
323 | HRRZ TAC,HGCODE ;GET IDENTIFICATION CODE
324 | CAIL TAC,HGNMAX ;A LEGAL CODE?
325 | MOVEI TAC,0 ;NO, MAKE IT THE DEFAULT CODE
326 | AOS HGCNTS(TAC) ;INCREMENT APPROPRIATE HISTOGRAM COUNTER
327 | POPJ P,
328 | >
329 |
--------------------------------------------------------------------------------
/sys/J17-1974/lptser.MAC:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00020 PAGES
2 | C REC PAGE DESCRIPTION
3 | C00001 00001
4 | C00004 00002 BEGIN LPTSER SUBTTL LINE PRINTER SERVICE ROUTINE
5 | C00005 00003 LPT PARAMETER ASSIGNMENTS
6 | C00007 00004 LPT SERVICE DISPATCH TABLE
7 | C00008 00005 INITIALIZE LINE PRINTER - CALLED FOR 200 RESTARTS
8 | C00011 00006 LPT OUTPUT CODE, LPT MAY BE RUNNING NOW
9 | C00014 00007 SEE IF USER HAS A FREE BUFFER TO BE FILLING
10 | C00016 00008 COME HERE IF LINE PRINTER IS HUNG
11 | C00019 00009 THIS PART OF THE PROGRAM BRINGS A BUFFERLOAD INTO SYSTEM CORE
12 | C00021 00010 TRANSFER BUFFERLOAD CHARACTER BY CHARACTER
13 | C00023 00011 ROUTINE TO DEPOSIT ONE BYTE IN THE SYSTEM BUFFER
14 | C00026 00012 LPTMCR: PUSH PDP,A SAVE CURRENT CHARACTER
15 | C00027 00013 BASIC LEVEL DEPOSIT BYTE AND WRAP AROUND POINTER
16 | C00028 00014 CHARACTER CONVERSION TABLE
17 | C00029 00015 MORE CHARACTER TABLE, CHARACTERS 51 TO 123
18 | C00030 00016 MORE CHARACTER CONVERSION TABLE, CHARACTERS 124 TO 177
19 | C00031 00017 SUBTTL LPTSER - JAM 25 SEPT 1968 - INTERRUPT LEVEL ROUTINES
20 | C00035 00018 COME HERE WHEN THERE IS NOT A FULL WORD TO BE PRINTED
21 | C00036 00019 LPTCRF: CONO LPT,LPTCHB+LPTDON+LPTALT SET ALT FLAG
22 | C00038 00020 THIS PART HANDLES THE ERROR SYSTEM
23 | C00040 ENDMK
24 | C;
25 | BEGIN LPTSER SUBTTL LINE PRINTER SERVICE ROUTINE
26 | ; NEW LINE PRINTER SERVICE ROUTINES - JAM 25 SEPT 68
27 | ; NEVER SETS IOACT BIT IN IOS
28 | ; DOES CHARACTER CONVERSION EXCEPT WHEN 100 BIT IN RH OF IOS IS ON
29 | ; FEATURES INTERNAL BUFFERING
30 | ; USERS BUFFERS ARE NOT ENTIRELY EMPTIED UNTIL HE DOES THE 'CLOSE' UUO
31 | ; LPT PARAMETER ASSIGNMENTS
32 |
33 | ; LPT CONTROL REGISTER
34 | LPTSTR__100000 ;"PRESS START" AFTER IO RESET
35 | LPTALT__4000 ; LAST CHAR WAS 177 (HARDWARE BIT)
36 | LPTCLR__2000 ; CLEAR LPT HARDWARE REGISTERS!
37 | LPTDON__100 ; ENABLE LPT DONE FLAG
38 | LPTERR__400 ; ENABLE LPT ERROR INTERRUPT
39 | LPTLOV__1000 ; LINE OVERFLOW, WON'T OCCUR
40 | LPTCHB__LPTCHN*11 ; PUTS PI CHANNEL NUMBER IN READY
41 | ; INTERRUPT AND ERROR INTERRUPT SPOTS
42 | LPTCLB__LPTCHN+200 ; CLEAR CHANNEL
43 |
44 | ; ACCUMULATOR DEFINITIONS . . .
45 | A_TAC
46 | B_TAC1
47 | C_AC1
48 | D_DAT
49 | COUNT_AC2
50 | POINTR_AC3
51 |
52 | ; RH OF LPT IOS WORD
53 | LPTNCC__100 ; SET BY USER TO INHIBIT CHARACTER CONVERSION
54 | HNGTRP__200 ; USER WANTS ERROR RETURN ON HUNG LPT.
55 | DELBIT__400 ; LAST CHAR. BEFORE CONO-ING LPT OFF WAS 177
56 |
57 | ; LH OF LPT IOS WORD
58 | LPTEN1__200 ; NEAR END OF LPT ACTIVITY FLAG
59 | LPTDNG__400 ; DANGLING 177 FLAG
60 | LPTERF__4000 ; ERROR BUBBLING UP FROM INTERRUPT LEVEL
61 | LPTEN2__20000 ;RELEASE BIT.
62 |
63 | ; STORAGE PARAMETERS
64 | ^LPTCPL__=120 ; NUMBER OF CHARACTERS PRINTED PER LINE
65 | ; LPT SERVICE DISPATCH TABLE
66 |
67 | JRST LPTINI ;INITILIZE
68 | JRST LPTCLT ;LPT HUNG TIMEOUT. SET ERROR BIT IN IOS FOR LPTOUT TO SEE.
69 | ^LPTDSP:
70 | JRST LPTREL ;RELEASE LPT
71 | JRST LPTCLS ;CLOSE
72 | JRST LPTOUT ;OUTPUT
73 | JRST ILLINP ;INPUT
74 | ; INITIALIZE LINE PRINTER - CALLED FOR 200 RESTARTS
75 |
76 | LPTINI: CONO LPT,LPTSTR ; SET LPT START FLAG
77 | SETOM LPTBG1 ;SET FLAG DENOTING FIRST LPT OPERATION
78 | LPTI.1: MOVEI IOS,0
79 | CONO LPT,LPTCLR ;CLEAR HARDWARE REGISTERS.
80 | HLLZS LPTCON ;CLEAR PI DISPATCH ADDRESS FOR NOW
81 | PUSHJ P,LPTINZ ; INITIALIZE BYTE POINTERS
82 | SETZM LPTIBF ;SET TO ZERO OUT INTERNAL BUFFER
83 | MOVE TAC,[XWD LPTIBF,LPTIBF+1]
84 | BLT TAC,LPTDCN
85 | POPJ P, ; RETURN TO SENDER, ADDRESS UNKNOWN
86 | ; NO SUCH NUMBER, NO SUCH ZONE
87 | LPTBI: POINT 7,LPTIBF ; LPTUBP - UUO LEVEL SYSTEM BUFFER BYTE POINTER
88 | LPTIBF ; LPTIBP - INTERRUPT LEVEL POINTER
89 | 5*LPTBLN ; LPTCC - TOTAL NUMBER OF FREE CHARACTERS IN SYSTEM BUFFER
90 | LPTCPL ; LPTLCC - CHARACTER POSITION IN LINE
91 |
92 | ; LINE PRINTER CLOSE CODE
93 |
94 | LPTCLS: HRLZI IOS,IOEND ; SET OUR PRIVATE 'LAST UUO' FLAG
95 | ORB IOS,DEVIOS(DEVDAT) ; OR IN BIT TO HONEST IOS
96 | TLNN IOS,LPTERF ; ARE WE HUNG?
97 | JRST OUT ; NO, DO LOTS OF OUTPUTS
98 | MOVSI IOS,LPTERF
99 | ANDCAB IOS,LPTIOS ; CLEAR ERROR BIT
100 | PUSHJ PDP,LPTHN ; CALL THE HUNG ROUTINE
101 | JRST OUT ; NOW DO SOME OUTPUTS
102 |
103 | ; INITIALIZE IOS AND BYTE POINTERS
104 | ; AND ALL THE CRAZY COUNTS
105 |
106 | LPTINZ: MOVE TAC,[XWD LPTBI,LPTUBP]
107 | BLT TAC,LPTLCC ;BLT IN POINTERS AND COUNTS
108 | ANDI IOS,HNGTRP!LPTNCC!17 ;CLEAR ALL BUT MODE&SPECIAL BITS
109 | TLO IOS,IO ;
110 | MOVEM IOS,LPTIOS ;AND STORE IOS
111 | SETZM LPTDCN
112 | POPJ P,
113 |
114 | LPTREL: TLNE IOS,IOBEG ;HAVE WE DONE ANYTHING YET
115 | JRST LPTI.1 ;NO
116 | HRLZI IOS,LPTEN2!IO ;TELL SEVICE ROUTINE
117 | PUSHJ PDP,LPTO3 ;HE WILL SET THE WHEELS IN MOTION
118 | PUSHJ PDP,WSYNC ;TREAD WATER A WHILE
119 | JRST LPTI.1 ;REFRESHING ISN'T IT.
120 | ; LPT OUTPUT CODE, LPT MAY BE RUNNING NOW
121 |
122 | LPTOUT: TLZE IOS,IOBEG ; FIRST UUO?
123 | PUSHJ PDP,LPTINZ ;INITIALIZE LPT TABLES AND IOS
124 | TRZE IOS,IODERR ; HAS LPT BEEN HUNG?
125 | JRST UNHANG ; YES, UNHANG IT
126 | CONSO LPT,LPTERR ;CATCH ERRORS NOW!
127 | TLZE IOS,LPTERF ; CHECK FOR INTERRUPT LEVEL ERROR
128 | JRST LPTHNG ; HANG USER UNTIL IT IS FIXED
129 | PUSHJ PDP,LPTSET ; SEE IF WE CAN LOAD SYSTEM CORE
130 | JRST LPTO1 ; SYSTEM BUFFER EMPTY, RETURN TO USER
131 | TLNN IOS,IOEND ; IS THIS THE LAST UUO?
132 | JRST LPTO2 ; NO, START LPT AND RETURN TO USER
133 |
134 | LPTIOW: MOVEI A,LPTLOV+LPTERR+LPTDON
135 | HRLZI IOS,IO+IOW ; SET IOS BITS TO SAY HE IS IN IO WAIT
136 | LDB C,PDVTIM ; PICK UP HUNG COUNT TIME
137 | DPB C,PDVCNT ; DEPOSIT IT, INITIATE HUNG COUNTING
138 | CONO PI,LPTOFF ; DO OUR DIRTY WORK WITH CHANNEL 5 OFF
139 | HRRM A,LPTCON ; SET UP DISPATCH BITS
140 | OR IOS,DEVIOS(DEVDAT) ; PICK UP OUR IOS
141 | MOVEI A,0 ; ASSUME NO ALT!
142 | TRZE IOS,DELBIT ; SHOULD BIT BE SET?
143 | TRO A,LPTALT ; YES
144 | TLON IOS,DEVSBB ; START LINE PRINTER IF IT IS NOT RUNNING
145 | CONO LPT,LPTCHB+LPTDON(A); SET ITS INTERRUPT CHANNEL AND ASK FOR DONE INTERRUPT
146 | MOVEM IOS,DEVIOS(DEVDAT)
147 | CONO PI,LPTON ; THE LPT WILL INTERRUPT IMMEDIATELY
148 | PUSHJ PDP,WSYNC ; DROP HIM INTO IO WAIT
149 | JRST LPTOUT ; TRY ANOTHER OUTPUT WHEN WE RETURN
150 |
151 | ; SEE IF USER HAS A FREE BUFFER TO BE FILLING
152 | ; RETURN TO HIM IF HE DOES, PUT HIM IN IO WAIT IF HE DOESN'T
153 |
154 | LPTO2: PUSHJ PDP,DEVCR ; CHECK RING USE BIT
155 | JRST LPTIOW ; IF BUSY, PUT HIM IN IO WAIT
156 |
157 | HRLZI IOS,IO ; OTHERWISE, JUST START UP LPT
158 | LPTO3: MOVEI A,LPTLOV+LPTERR+LPTDON
159 | LDB C,PDVTIM ; PICK UP HUNG COUNT TIME
160 | DPB C,PDVCNT ; DEPOSIT IT, INITIATE HUNG COUNTING
161 | CONO PI,LPTOFF ; SHUT OFF LPT CHANNEL
162 | HRRM A,LPTCON ; SET UP INTERRUPT DISPATCH CONI BITS
163 | OR IOS,DEVIOS(DEVDAT) ; PICK UP OUR OWN IOS
164 | MOVEI A,0 ; ASSUME NOT BIT
165 | TRZE IOS,DELBIT ; TRUE?
166 | TRO A,LPTALT ; NO, SET BIT
167 | TLON IOS,DEVSBB ; START LPT IF NEEDED
168 | CONO LPT,LPTCHB+LPTDON(A); GIVE IT A PAIR OF CHANNELS AND A DONE BIT
169 | MOVEM IOS,DEVIOS(DEVDAT)
170 | CONO PI,LPTON ; RESTORE CHANNEL 5
171 | POPJ PDP, ; RETURN TO USER, ADDRESS UNKNOWN
172 | ; NO SUCH NUMBER, NO SUCH ZONE!!
173 |
174 | ; COME HERE IF THE SYSTEM BUFFER IS EMPTY
175 |
176 | LPTO1: TLNN IOS,IOEND ; IS THIS THE LAST UUO?
177 | POPJ PDP, ; NO, EXIT TO USER, STAGE LEFT
178 | HRLZI IOS,IOEND ; AND NOW, ZERO THIS BIT FOR GOOD
179 | ANDCAB IOS,LPTIOS
180 | TLNE IOS,IOBEG ; IS THIS REALLY THE BEGINNING?
181 | POPJ PDP, ; YES, EXIT
182 | HRLZI IOS,IO+LPTEN1 ; TELL INTERRUPT SERVICE ROUTINES TO PRINT A CR-FF
183 | JRST LPTO3 ; START LPT AND LEAVE
184 |
185 | ; COME HERE IF LINE PRINTER IS HUNG
186 |
187 | LPTHNG: TRNE IOS,HNGTRP ;IS HE REQUESTING ERROR RETURN ON HUNG LPT
188 | JRST LPTHN1 ;YES
189 | PUSHJ PDP,LPTHN ; HANG USER
190 | JRST LPTOUT ; TRY AGAIN
191 |
192 | LPTHN: PUSHJ PDP,HNGSTP ; PRINT OUT "DEVICE LPT OK?" AND HANG USER
193 | UNHANG: MOVE IOS,[XWD LPTERF,IODERR] ; SET TO CLEAR THE ERROR FLAGS
194 | MOVEI A,LPTLOV+LPTERR+LPTDON
195 | CONO PI,LPTOFF ; SHUT OFF LPT
196 | HRRM A,LPTCON ; SET UP CONI BITS
197 | ANDCAB IOS,DEVIOS(DEVDAT)
198 | TLO IOS,DEVSBB ; SYSTEM BUFFER WILL NOW BE BUSY
199 | MOVEI A,0 ; ASSUME NO BIT
200 | TRZE IOS,DELBIT ; TRUE?
201 | TRO A,LPTALT ; NO, SET BIT
202 | CONO LPT,LPTCHB+LPTDON(A); START UP LPT
203 | MOVEM IOS,DEVIOS(DEVDAT)
204 | CONO PI,LPTON ; RESTORE PI CHANNEL
205 | LDB C,PDVTIM ; RESET HUNG COUNT
206 | DPB C,PDVCNT
207 | JRST LPTOUT ; DO SOME MORE OUTPUTS
208 |
209 | LPTCLT: HRLZI IOS,LPTERF ; KILL THE ERROR BIT
210 | CONO PI,LPTOFF ; WITH LPT OFF
211 | ORB IOS,LPTIOS ; SET ERROR BIT FOR UUO-LEVEL ROUTINES TO SEE
212 | TLZ IOS,DEVSBB ; SYSTEM BUFFER IS NO LONGER BUSY
213 | MOVEI DEVDAT,LPTDDB ; GET DDB ADDRESS FOR SETIOD
214 | TLZE IOS,IOW ; ARE WE IN IO WAIT?
215 | PUSHJ PDP,STTIOD ; YES, TAKE US OUT (PUT INTO TQ)
216 | MOVEM IOS,LPTIOS ; RESTORE IOS
217 | CONO PI,LPTON ; RESTORE PI CHANNEL
218 | JRST CPOPJ1 ; SKIP, FORCE HNGCHK TO IGNORE US
219 |
220 | LPTHN1: TRO IOS,IODERR ;GIVE HIM A DEVICE ERROR BIT
221 | IORB IOS,LPTIOS
222 | POPJ P,
223 | ; THIS PART OF THE PROGRAM BRINGS A BUFFERLOAD INTO SYSTEM CORE
224 |
225 | LPTSET: PUSHJ PDP,DEVSTU ; SET UP COUNT AND POINTR TO POINT AT THE DATA IN HIS BUFFER
226 | JRST LPTSE2 ; THIS BUFFER HAS ALREADY BEEN EMPTIED!
227 | CAILE COUNT,LPTBLN ; IS THE COUNT GREATER THAN THE SIZE OF THE WHOLE DAMN BUFFER?
228 | JRST BTLERR ; YES, KILL THE BASTARD!
229 | IMULI COUNT,5 ; CHANGE WORD COUNT INTO CHARACTER COUNT
230 | MOVE A,COUNT ; SEE IF WE CAN FIT A BUFFER IN NOW
231 | IMULI A,3 ; COMPARE FREE SPACE WITH WORST CASE
232 | CAML A,LPTCC ; SEE IF THERE IS SPACE
233 | JRST LPTSE2 ; NO, PERFORM EXIT MAGIC
234 | PUSHJ PDP,LPTBF ; TRANSFER DATA TO THE SYSTEM BUFFER
235 | PUSHJ PDP,ADVBFE ; ADVANCE THE BUFFER DOWN THE RING
236 | JRST LPTSE2 ; NO MORE BUFFERS, EXIT, STAGE LEFT
237 | JRST LPTSET ; SEE IF WE CAN SQUEEZE IN ANOTHER BUFFER
238 |
239 | LPTSE2: MOVE A,LPTCC ; SEE IF WE HAVE TRANSFERRED ANYTHING
240 | CAIGE A,5*LPTBLN-4 ; BY COMPARING WITH FULL COUNT
241 | AOS (PDP)
242 | POPJ PDP,
243 | ; TRANSFER BUFFERLOAD CHARACTER BY CHARACTER
244 | ; DO CHARACTER CONVERSION IF USER WANTS IT
245 |
246 | LPTBF: SOJL COUNT,CPOPJ ; EXIT IF COUNT IS EXHAUSTED.
247 | ILDB A,POINTR ; PICK UP BYTE FROM USER
248 | TRNE IOS,LPTNCC ; DOES HE WANT CONVERSION?
249 | JRST LPTB3 ; NO, SKIP IT
250 |
251 | CAIN A,134 ; IS THIS THAT GODDAMN CHARACTER?
252 | JRST LPTB2 ; YES, CUE UP TWO 177'S
253 | MOVE A,LPTCTB(A) ; PICK UP CORRECT CHARACTER FROM CONVERT TABLE
254 | LPTB1: PUSHJ PDP,LPTDPB ; DEPOSIT BYTE IN SYSTEM CORE
255 | JRST LPTBF
256 |
257 | LPTB2: MOVEI A,177 ; CUE UP TWO CONSEC. 177'S
258 | PUSHJ PDP,LPTDPB
259 | MOVEI A,177 ; ROUTINE DOESN'T ALWAYS PRESERVE A
260 | JRST LPTB1
261 |
262 | LPTB3: HLL A,LPTCTB(A) ; PICK UP HIS DISPATCH BITS
263 | JRST LPTB1
264 | ; ROUTINE TO DEPOSIT ONE BYTE IN THE SYSTEM BUFFER
265 | ; AND UPDATE ALL THE CRAZY COUNTS INVOLVED
266 |
267 | LPTDPB: MOVE IOS,DEVIOS(DEVDAT) ; DO WE HAVE A DANGLING DELETE?
268 | TLNE IOS,LPTDNG ; WAS LAST A SPECIAL?
269 | JRST LPTD2 ; YES!
270 | CAIE A,177 ; NO, IS THIS ONE?
271 | JRST LPTD1 ; NO, JUST REG CHAR.
272 | TLO IOS,LPTDNG ; SET FLAG FOR NEXT TIME
273 | MOVEM IOS,DEVIOS(DEVDAT)
274 | POPJ P,
275 | LPTD2: PUSHJ PDP,LPTCCH ; YES, SEE IS IT IS A CONTROL CHARACTER
276 | LPTD1: HLRZ D,A
277 | SKIPE D ; DOES THIS CHAR HAVE A DISPATCH ADDRESS?
278 | JRST LPTD7 ; YES, IT WILL TAKE CARE OF ITSELF
279 | SKIPG LPTLCC ; NO, HAVE WE OVERFLOWED THE LINE?
280 | PUSHJ PDP,LPTMCR ; YES, MAKE A CRLF
281 |
282 | LPTD7: TLNN IOS,LPTDNG ; NEED WE SEND A 177 FIRST?
283 | JRST LPTD7A ; NO
284 | PUSH P,A
285 | MOVEI A,177
286 | PUSHJ P,LPTDB ; SEND 177
287 | POP P,A
288 | LPTD7A: PUSHJ PDP,LPTDB ; OTHERWISE, DEPOSIT CHARACTER AND UPDATE COUNTS
289 | CAIN A,11
290 | JRST LPTD11 ;SPECIAL DISPATCH FOR TAB
291 | HLRZS A ; PUT THE DISPATCH ADDRESS IN THE RH
292 | JUMPN A,(A) ; STRANGE CHARACTER, DISPATCH TO SEPARATE ROUTINE
293 | LPTD5A: SOS LPTLCC ; NORMAL CHARACTER, DECREMENT COUNT
294 | LPTD5: MOVSI IOS,LPTDNG ; ZERO OUT THE DANGLING 177 BIT
295 | ANDCAB IOS,DEVIOS(DEVDAT)
296 | POPJ PDP,
297 |
298 | LPTDV: TLNN IOS,LPTDNG ; IS THIS A VERTICAL CHAR?
299 | JRST LPTD5 ; YES
300 | JRST LPTD5A ; JUST ANOTHER CHAR!
301 |
302 | LPTD15: TLNE IOS,LPTDNG ; IS IT REALLY A CR
303 | JRST LPTD5A ; NO, JUST REG CHAR.
304 | MOVEI A,LPTCPL ; RESET COUNT TO #CHARS PER LINE
305 | MOVEM A,LPTLCC
306 | JRST LPTD5 ; EXIT, AND ZERO DANGLING 177 BIT
307 |
308 | LPTD11: SOS D,LPTLCC ; HOW FAR TO NEXT TAB STOP(AT LEAST ONE).
309 | ANDCMI D,7 ; MAYBE MORE
310 | TLNN IOS,LPTDNG ; WHEN PRECEEDED BY 177 IS JUST GAMMA, NOT TAB
311 | MOVEM D,LPTLCC ; THIS FAR!
312 | JRST LPTD5
313 |
314 | LPTMCR: PUSH PDP,A ; SAVE CURRENT CHARACTER
315 | MOVEI A,15 ; MAKE A CRLF
316 | PUSHJ PDP,LPTDB
317 | MOVEI A,12
318 | PUSHJ PDP,LPTDB
319 | MOVEI A,LPTCPL ; RESET LINE COUNT
320 | MOVEM A,LPTLCC
321 | POP PDP,A
322 | POPJ PDP,
323 |
324 | LPTCCH: HRRZ D,A
325 | CAIE D,20 ;SAME AS V. TAB
326 | CAIN D,22 ; "
327 | HRLI A,LPTD5
328 | CAIE D,23 ; "
329 | CAIN D,24 ; "
330 | HRLI A,LPTD5
331 | CAIN D,21 ;LINE FEED OVER PAGE BOUNDARIES
332 | HRLI A,LPTD5
333 | POPJ PDP,
334 | ; BASIC LEVEL DEPOSIT BYTE AND WRAP AROUND POINTER
335 |
336 | LPTDB: CONO PI,LPTOFF ; SHUT OFF LINE PRINTER A SEC.
337 | MOVE B,LPTUBP ; PICK UP BYTE POINTER
338 | IBP B ; INCREMENT IT
339 | HRRZ C,B ; NOW GET ADDRESS PART
340 | CAIL C,LPTIBF+LPTBLN ; CHECK FOR WRAP AROUND
341 | MOVE B,[POINT 7,LPTIBF,6]
342 | DPB A,B ; DEPOSIT THE CHARACTER
343 | MOVEM B,LPTUBP ; REPLACE THE BYTE POINTER
344 | SOSG LPTCC ; UPDATE CHARACTER COUNT
345 | JSP DAT,UERROR ;BLAST THE BASTARD!
346 | CONO PI,LPTON ; SPEED UP THE LPT
347 | POPJ PDP,
348 | ; CHARACTER CONVERSION TABLE
349 |
350 | LPTCTB: XWD LPTD5,0 ; NULL, DOESN'T AFFECT POSITION ON LINE
351 | 1
352 | 2
353 | 3
354 | 4
355 | 5
356 | 6
357 | 7
358 | 10
359 | 11 ; HORIZONTAL TAB, SCREWS UP LINE POSITION
360 | XWD LPTDV,12 ; LINE FEED, DOESN'T AFFECT POSITION
361 | XWD LPTDV,13 ; VERTICAL TAB
362 | XWD LPTDV,14 ; FORM FEED
363 | XWD LPTD15,15 ; CARRIAGE RETURN, ZEROS COUNT
364 | 16
365 | 17
366 | 20
367 | 21
368 | 22
369 | 23
370 | 24
371 | 25
372 | 26
373 | 27
374 | 137 ; 137_30
375 | 31
376 | 134 ; 134_32
377 | 33
378 | 34
379 | 35
380 | 36
381 | 37
382 | 40
383 | 41
384 | 42
385 | 43
386 | 44
387 | 45
388 | 46
389 | 47
390 | 50
391 | ; MORE CHARACTER TABLE, CHARACTERS 51 TO 123
392 |
393 | 51
394 | 52
395 | 53
396 | 54
397 | 55
398 | 56
399 | 57
400 | 60
401 | 61
402 | 62
403 | 63
404 | 64
405 | 65
406 | 66
407 | 67
408 | 70
409 | 71
410 | 72
411 | 73
412 | 74
413 | 75
414 | 76
415 | 77
416 | 140 ; 140_100
417 | 101
418 | 102
419 | 103
420 | 104
421 | 105
422 | 106
423 | 107
424 | 110
425 | 111
426 | 112
427 | 113
428 | 114
429 | 115
430 | 116
431 | 117
432 | 120
433 | 121
434 | 122
435 | 123
436 |
437 | ; MORE CHARACTER CONVERSION TABLE, CHARACTERS 124 TO 177
438 |
439 | 124
440 | 125
441 | 126
442 | 127
443 | 130
444 | 131
445 | 132
446 | 133
447 | 134
448 | 135
449 | 32 ; 32_136
450 | 30 ; 30_137
451 | 100 ; 100_140
452 | 141
453 | 142
454 | 143
455 | 144
456 | 145
457 | 146
458 | 147
459 | 150
460 | 151
461 | 152
462 | 153
463 | 154
464 | 155
465 | 156
466 | 157
467 | 160
468 | 161
469 | 162
470 | 163
471 | 164
472 | 165
473 | 166
474 | 167
475 | 170
476 | 171
477 | 172
478 | 173
479 | 176 ; 176_174
480 | 175
481 | 175 ; 175_176
482 | 177
483 | SUBTTL LPTSER - JAM 25 SEPT 1968 - INTERRUPT LEVEL ROUTINES
484 | ; THIS PART IS ENTIRELY AUTONOMUS AND DOES NOT TRY TO
485 | ; TICKLE THE USER'S CORE, BECAUSE IT ISN'T THERE!
486 |
487 | ^LPTINT:
488 | JSR LPTSAV ; SAVE ACCUMULATORS AND SET RETURN ADDRESS
489 | CONSZ LPT,LPTLOV ; LINE OVERFLOW?
490 | JRST LPTLOI
491 | MOVEI DEVDAT,LPTDDB ; SET UP DEVICE DATA BLOCK ADDRESS FOR SETIOD AND PDVTIM
492 | MOVE IOS,LPTIOS ; LET'S SEE WHAT THE UUO-LEVEL ROUTINES ARE TRYING TO TELL US
493 | CONSZ LPT,70 ; IS THE ERROR CHANNEL DEASSIGNED?
494 | CONSO LPT,LPTDON ; OR MAYBE THIS IS REALLY AN ERROR?
495 | JRST LPTERI ; GO CHECK IT OUT
496 | CONSZ LPT,LPTERR ; IS LPT TURNED OFF?
497 | JRST LPTERH ; YES, FORCE HUNG DEVICE MESSAGE
498 |
499 | MOVE A,LPTCC ; FIRST, IS THERE ANYTHING TO PRINT
500 | CAIL A,5*LPTBLN ; COMPARE WITH TOTAL COUNT
501 | JRST LPTOF ; NOTHING TO PRINT, SHUT OFF LPT
502 |
503 | SKIPN LPTBG1 ;IS THIS THE FIRST INTERRUPT?
504 | JRST LPTIN3 ;NO.
505 | DATAO LPT,[BYTE (7) 15,177,20] ;YES. HERE WE SEND A TOP OF DOUBLE FORM
506 | SETZM LPTBG1 ;AVOID THIS NEXT TIME
507 | JRST LPTCF1 ;GO DISMISS THIS INTERRUPT
508 |
509 | LPTIN3: CAIE A,4*LPTBLN ; CHECK FOR NEARLY EMPTY
510 | JRST LPTIN2 ; NOT NEARLY EMPTY, CONTINUE NORMALLY
511 | TLZE IOS,IOW ; ARE WE IN AN IO WAIT?
512 | PUSHJ PDP,STTIOD ; YES, GET US OUT!
513 | LPTIN2: LDB C,PDVTIM ; PICK UP HUNG COUNT TIME
514 | DPB C,PDVCNT ; DEPOSIT IT, INITIATE HUNG COUNTING
515 | SKIPN A,LPTDCN ; SEE IF WE TRANSMIT LESS THAN 5 CHARS THIS TIME
516 | MOVEI A,5 ; WE WILL PRINT 5 CHARACTERS
517 | SETZM LPTDCN ; INDICATE 5 CHARACTERS NEXT TIME
518 | ADD A,LPTCC ; ADD IN COUNT
519 | CAILE A,5*LPTBLN ; COMPARE WITH TOTAL COUNT
520 | JRST LPTIN1 ; IF TOO LARGE, THERE IS NOT A MULTIPLE OF 5 CHARS
521 | MOVEM A,LPTCC ; STORE CHAR. COUNT
522 | DATAO LPT,@LPTIBP ; SEND WORD TO LINE PRINTER
523 | SETZM @LPTIBP ; ZERO THAT WORD TO AVOID CONFUSION
524 | AOS A,LPTIBP ; OTHERWISE THERE IS, AND WE CAN INCREMENT OUT POINTER
525 | CAIL A,LPTIBF+LPTBLN ; CHECK FOR BUFFER OVERFLOW . . .
526 | MOVEI A,LPTIBF ; AND RESET POINTER IF SO
527 | MOVEM A,LPTIBP ; AND RE-STORE POINTER FOR NEXT TIME
528 | POPJ PDP, ; SO LONG, BEEN GOOD TO SERVE YOU
529 | ; COME HERE WHEN THERE IS NOT A FULL WORD TO BE PRINTED
530 |
531 | LPTIN1: TLNN IOS,LPTEN1 ; IS THIS THE LAST WORD IN BUFFER?
532 | JRST LPTOF ; NO, FORGET IT
533 | DATAO LPT,@LPTIBP ; SEND PARTIAL WORD
534 | SETZM @LPTIBP ; AND ZERO IT FOR POSTERITY
535 | SUBI A,5*LPTBLN ; GET NUMBER OF CHARS WE WILL TRANSMITT NEXT TIME
536 | MOVEM A,LPTDCN ; PUT IT HERE FOR FUTURE REFERENCE
537 | MOVEI A,5*LPTBLN ; RESET COUNT TO MAXIMUM
538 | MOVEM A,LPTCC
539 | POPJ PDP, ; NO WORRY ABOUT WRAP-AROUND EITHER
540 | LPTCRF: CONO LPT,LPTCHB+LPTDON+LPTALT ;SET ALT FLAG
541 | DATAO LPT,[BYTE(7) 20,177,20,177,20] ;3 TOP OF DOUBLE FORMS
542 | SETZM LPTBG1
543 | JRST LPTCF1 ;NO NEED TO ADVANCE FORM AT THE START
544 |
545 | LPTCF2: SETOM LPTBG1 ; MAKE CR-FF ON NEXT OUTPUT.
546 | LPTCF1: LDB C,PDVTIM ; PICK UP HUNG COUNT TIME, DEFINED IN LOWCOR
547 | DPB C,PDVCNT ; DEPOSIT IT, INITIATE HUNG COUNTING
548 | LPTXIT: MOVEM IOS,LPTIOS ; STORE IOS IN LPT DDB
549 | POPJ P, ; AND EXIT, CHANNEL 5
550 |
551 | LPTOF: TLZE IOS,LPTEN2 ; HAVE WE GIVEN TERMINAL 5 FF'S
552 | JRST LPTCRF ; GO DO IT AND RETURN IMMEDIATELY
553 | TLZE IOS,LPTEN1 ; IS THIS THE END
554 | JRST LPTCF2 ; YES - ARRANGE TO MAKE FF'S NEXT
555 | PUSHJ P,LPTERH ; CLEAR LPT (PRESERVING DELETE BIT]
556 | TLZE IOS,IOW ; ARE WE IN AN IO WAIT?
557 | PUSHJ PDP,STTIOD ; YES, CHANGE TO WAIT SATISFIED!
558 | TLZ IOS,DEVSBB ; SYSTEM BUFFER IS NO LONGER BUSY
559 | JRST LPTXIT ; EXIT
560 |
561 | ; COME HERE IF WE FIND THE LPT IS NOT ON
562 | ; JUST CLEAR LPT AND WAIT FOR HUNG DEVICE MESSAGE
563 |
564 | LPTERH: HLLZS LPTCON
565 | CONSZ LPT,LPTALT ; IS DELETE FLAG CURRENTLY SET?
566 | TRO IOS,DELBIT ; YES, REMEMBER IT!
567 | MOVEM IOS,LPTDDB+DEVIOS ; IN MEMORY TOO
568 | CONO LPT,0
569 | POPJ P,
570 | ; THIS PART HANDLES THE ERROR SYSTEM
571 |
572 | LPTERI: CONSO LPT,70 ; IS THE ERROR CHANNEL ASSIGNED?
573 | JRST LPTER1 ; NO, GO REASSIGN IT AND CONTINUE
574 | MOVEI A,0 ; ASSUME NO BIT
575 | TRZE IOS,DELBIT ; TRUE?
576 | TRO A,LPTALT ; NO, SET BIT
577 | CONO LPT,LPTCLB+LPTDON(A); YES, DEASSIGN IT
578 | MOVEM IOS,LPTDDB+DEVIOS
579 | MOVEI A,LPTDON ; SET TO INTERRUPT ONLY WHEN DONE
580 | LPTER2: HRRM A,LPTCON ; TELL INTERRUPT SERVICE ABOUT IT
581 | POPJ PDP,
582 |
583 | LPTER1: CONI LPT,A ; GET CURRENT CONDITIONS, EVEN THOUGH I KNOW EXACTLY WAT THEY ARE
584 | ANDI A,300 ; MASK OUT THE RIGHT ONES
585 | CONO LPT,LPTCHB(A) ; RESTORE ALL CONO BITS
586 | MOVEI A,LPTDON+LPTERR+LPTLOV
587 | JRST LPTER2 ; AND PRETEND NOTHING EVER HAPPENED
588 |
589 | LPTLOI: CONI LPT,A ; GET LPT BITS
590 | TRZ A,LPTLOV ; KILL LINE OVERFLOW BIT
591 | CONO LPT,(A) ; GIVE THEM BACK
592 | DATAO LPT,[BYTE (7) 15,12]
593 | POPJ PDP,
594 |
595 | BEND LPTSER
596 |
--------------------------------------------------------------------------------
/sys/J17-1974/lup.MAC:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00002 PAGES
2 | RECORD PAGE DESCRIPTION
3 | 00001 00001
4 | 00002 00002 TITLE LUP LOWER TO UPPER CASE.
5 | 00004 ENDMK
6 | ;
7 | TITLE LUP LOWER TO UPPER CASE.
8 | ;BEWARE: THIS PROGRAM IS VERY STUPID.
9 | ;ALSO CONVERTS 175 (ALT MODE) TO CLOSE CURLY BRACKET
10 | A_1
11 | B_2
12 | IBUF: BLOCK 3
13 | OBUF: BLOCK 3
14 | INNAM: 'MAIL '
15 | 0
16 | 0
17 | 0
18 | OUTNAM: 'MAIL '
19 | 0
20 | 0
21 | 0
22 | BEGIN: CALLI
23 | INIT 1,0
24 | 'DSK '
25 | IBUF
26 | HALT
27 | INBUF 1,22
28 | INIT 2,0
29 | 'DSK '
30 | OBUF,,0
31 | HALT
32 | OUTBUF 2,22
33 | LOOKUP 1,INNAM
34 | HALT
35 | ENTER 2,OUTNAM
36 | HALT
37 | MOVEI
38 | READ: SOSLE IBUF+2
39 | JRST READ.1
40 | INPUT 1,
41 | STATZ 1,740000
42 | HALT
43 | STATZ 1,20000
44 | JRST EOF
45 | READ.1: ILDB A,IBUF+1
46 | MOVE B,@IBUF+1
47 | TRNN B,1
48 | JRST WRITE
49 | MOVNI B,5
50 | ADDM B,IBUF+2
51 | AOS IBUF+1
52 | JRST READ
53 |
54 | WRITE: AOJE WRIT.0
55 | CAIL A,"a"
56 | CAILE A,"z"
57 | JRST .+2
58 | TRZ A,40
59 | WRIT.0: CAIN A,175
60 | MOVEI A,"~"
61 | CAIN A,42
62 | MOVNI 1
63 | SOSLE OBUF+2
64 | JRST WRIT.1
65 | OUTPUT 2,
66 | STATZ 2,740000
67 | HALT
68 | WRIT.1: IDPB A,OBUF+1
69 | JRST READ
70 |
71 | EOF: CLOSE 1,
72 | CLOSE 2,
73 | RELEAS 1,
74 | RELEAS 2,
75 | CALLI 12
76 | END BEGIN
77 |
--------------------------------------------------------------------------------
/sys/J17-1974/mail.MAC:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00004 PAGES
2 | C REC PAGE DESCRIPTION
3 | C00001 00001
4 | C00002 00002 BEGIN MAIL SUBTTL MAIL SERVICE.
5 | C00005 00003 WRCV: PUSHJ P,SRCV
6 | C00006 00004 ROUTINE TO GET THE JOB NUMBER OF THE ADDRESSEE
7 | C00008 ENDMK
8 | C;
9 | BEGIN MAIL SUBTTL MAIL SERVICE.
10 |
11 | ^UMAIL: CAILE UCHN,MAXMAIL ;AC FIELD IN BOUNDS?
12 | JRST UUOERR ;NO LOSE.
13 | HRRZ AC1,UUO ;GET THE EFFECTIVE ADDRESS
14 | CAML AC1,USRREL(PID) ;IS THIS INSIDE OF USER'S MAXIMUM?
15 | JRST UUOERR ;NO LOSE.
16 | JRST @MALTBL(UCHN) ;DISPATCH TO APPROPRIATE ROUTINE
17 |
18 | DEFINE UUOS{FOR X IN(SEND,WRCV,SRCV,SKPME,SKPHIM,SKPSEN)~
19 |
20 | UUOMAC MALTBL,MAIL
21 | MAXMAIL__UUOCNT-1
22 |
23 | SKPSEN: JSP AC3,GETJOB ;THIS JSP MUST BE LABELED SKPSEN
24 | JRST SEND1 ;ADDRESSEE EXISTS, BEHAVE LIKE "SEND" UUO
25 | SEND: JSP AC3,GETJOB ;DAT _ JOB# OF RECEIVING JOB
26 | SEND1: SKIPE JBTMAIL(DAT) ;DOES THIS GUY HAVE MAIL ALREADY?
27 | POPJ P, ;YES. CAN'T DO IT.
28 | XCTR XR,[HRRZ TAC,1(UUO)] ;GET THE ADDRESS OF THE MAIL BLOCK
29 | MOVEI AC1,37(TAC) ;GET ADDRESS OF LAST WORD.
30 | CAMLE AC1,USRREL(PID) ;GOD FORBID HE SHOULD SEND MAIL FROM UPPER.
31 | JRST ADRERR
32 | MOVEI AC3,40
33 | PUSHJ P,UFSGET
34 | HRRZM AC1,JBTMAIL(DAT)
35 | ADDI TAC,(PROG)
36 | HRL AC1,TAC
37 | MOVE AC2,AC1
38 | BLT AC1,37(AC2)
39 | MOVEI J,(DAT)
40 | MOVM TAC,JOBQUE(J) ; WAKE HIM UP IF HE IS IN IOWQ
41 | SKIPG JBTSTS(J) ; IF NOT RUNNABLE, DON'T REQUE HIM
42 | CAIE TAC,IOWQ
43 | JRST NOWAKE
44 | MOVEI TAC,RUNQ
45 | MOVNM TAC,JOBQUE(J)
46 | PUSHJ P,REQUE
47 | NOWAKE: MOVSI AC1,INTMAIL ; IS HE ENABLED FOR A MAIL INTERRUPT?
48 | AOS (P) ;SET UP SUCCESS RETURN FROM SEND
49 | TDNN AC1,JBTIEN(J)
50 | POPJ P, ;NO RETURN QUICK
51 | IORM AC1,JBTIRQ(J) ; YES, GIVE HIM THE INTERRUPT.
52 | SETOM INTREQ(PID)
53 | JRST WSCHED ;SHUT US OFF TO GET THE INTERRUPT PROCESSED.
54 | WRCV: PUSHJ P,SRCV
55 | TROA AC1,IOWQ
56 | POPJ P,
57 | MOVNM AC1,JOBQUE(J)
58 | PUSHJ P,WSCHED
59 | JRST WRCV
60 |
61 | SRCV: SKIPN AC1,JBTMAIL(J)
62 | POPJ P,
63 | SETZM JBTMAIL(J)
64 | HRL TAC,AC1
65 | HRRI TAC,@UUO
66 | MOVEI TAC1,37(TAC)
67 | BLT TAC,(TAC1)
68 | PUSHJ P,FSGIVE
69 | JRST CPOPJ1
70 |
71 | SKPME: SKIPA DAT,J
72 | SKPHIM: JSP AC3,GETJOB
73 | SKIPN JBTMAIL(DAT)
74 | POPJ P,
75 | JRST CPOPJ1
76 |
77 | ; ROUTINE TO GET THE JOB NUMBER OF THE ADDRESSEE
78 |
79 | ^FNDJOB: ;A ROSE BY ANY OTHER NAME, ETC.
80 | GETJOB: MOVE DAT,@UUO ;GET USER'S ARGUMENT
81 | TDNN DAT,[-1,,777700] ;IS IT A NAME?
82 | JRST GJ1 ;NO THIS IS A NUMBER
83 | MOVSI TAC,-JOBN ;SEARCH ALL JOB NAMES.
84 | CAME DAT,JOBNAM(TAC) ;IS THIS ONE?
85 | AOBJN TAC,.-1 ;NOT A MATCH. LOOP.
86 | JUMPGE TAC,GJERR ;JUMP IF NO NAMES
87 | MOVE TAC1,TAC ;CONTINUE SCAN. LOOK FOR ANOTHER
88 | AOBJP TAC1,GJ2 ;TEST AT TOP OF LOOP. JUMP WHEN DONE
89 | CAME DAT,JOBNAM(TAC1) ;SAME NAME?
90 | JRST .-2 ;NO. LOOP.
91 | MOVEI TAC,GTGARP ;PICKUP THE AMBIGUOUS NAME ERROR MESSAGE
92 | JRST GJERR1 ;GO TO ERROR STUFF
93 |
94 | GJ2: MOVEI DAT,(TAC) ;GET JOB NUMBER.
95 | GJ1: MOVE TAC,JBTSTS(DAT) ;GET JOB STATUS
96 | TLNE TAC,JNA ;IS THIS JOB SLOT ASSIGNED?
97 | JRST (AC3) ;YES. RETURN WITH JOB NUMBER IN DAT
98 | GJERR: MOVEI TAC,GTGAR1 ;GET ADDRESS OF ERROR ROUTINE
99 | GJERR1: HRRZ AC3,AC3 ; FIND OUT WHO CALLED GETJOB
100 | CAIN AC3,SKPSEN+1 ; WAS IT SKPSEN UUO?
101 | JRST CPOPJ2 ; YES, TERMINATE THE UUO
102 | PUSHJ P,HNGMES ; NO, COME BACK WHEN HE TYPES CONTINUE
103 | JRST GETJOB ;
104 |
105 | GTGAR1: ASCIZ/
106 | ?NON-EX JOB NAME OR NUMBER
107 | /
108 |
109 | GTGARP: ASCIZ /
110 | ?AMBIGUOUS JOB NAME
111 | /
112 | BEND
113 |
--------------------------------------------------------------------------------
/sys/J17-1974/parser.MAC:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00005 PAGES
2 | C REC PAGE DESCRIPTION
3 | C00001 00001
4 | C00002 00002 BEGIN PARSER SUBTTL PARSER - PARITY ERROR SERVICE ROUTINE
5 | C00006 00003 SUBTTL HERE WE SEARCH FOR REAL ERRORS.
6 | C00012 00004 SUBTTL HERE WHEN A REAL ERROR IS FOUND.
7 | C00026 00005 SUBTTL P2 PARITY ERROR INTERRUPT
8 | C00031 ENDMK
9 | C;
10 | BEGIN PARSER SUBTTL PARSER - PARITY ERROR SERVICE ROUTINE
11 | ;R. E. GORIN 7 AUG 72.
12 |
13 | AP2CHL_CAT(P2CH,\APRCHN)
14 |
15 | ^PARCLK: ;CALLED BY: SKIPE PARFLG
16 | ; PUSHJ P,PARCLK
17 | CONO PI,APROFF ;TURN OFF APR TO AVOID TIMING ERRORS
18 | SETOM P2RFLG ;SET SECOND LEVEL FLAG
19 | SETZM PARFLG ;CLEAR PRIMARY FLAG
20 | JRST PARIN0 ;JOIN PARITY ERROR INTERRUPT CODE
21 |
22 | ^PARINT: ;HERE FROM APR CHANNEL FOR P1 PARITY ERROR,
23 | CONO PI,APROFF ;TURN OFF APR SO WE CAN TEST FOR BAD PARITY.
24 | PARIN0: MOVEM P,PARPSAV ;ASSUME WE HAVE NO AC'S.
25 | MOVE P,APRPDL ;GET A STACK.
26 | PUSHACS ;SAVE ALL THE AC'S
27 | MOVEI PID,P1PID ;SET PROCESSOR IDENTIFICATION
28 | PUSHJ P,DISCRLF ;START STUFFING THE TYPEOUT BUFFER
29 | PUSHJ P,DISDATE ;ANNOUNCE THE DATE AND TIME
30 | SKIPN P2RFLG ;IS THE PDP-6 HALUCINATING AGAIN?
31 | JRST PARIN1 ;NO IT MUST BE P1
32 |
33 | PUSHJ P,DISMES ;BLAME ON THE STONES
34 | ASCIZ /PDP-6 DETECTED PARITY ERROR. PC = /
35 | MOVE TAC,AP2CHL ;GET THE PC OF PDP-6'S ERROR.
36 | TLNE TAC,USRMOD ;IS THIS IN USER MODE?
37 | TRNN TAC,777760 ;YES. IS THIS ABOVE THE AC'S
38 | JRST PARIN3 ;EXEC MODE OR RUNNING IN THE AC'S
39 | HRRZ TAC1,LASTPR+P2PID ;GET CURRENT RELOCATION DATA
40 | ANDI TAC1,776000 ;LOWER PART OF THE RELOCATION ONLY
41 | ADDI TAC,(TAC1) ;ADD RELOCATION
42 | JRST PARIN3 ;SAVE ERROR PC AND PRINT IT.
43 |
44 | PARIN1: PUSHJ P,DISMES ;HERE FOR P1 PARITY ERROR
45 | ASCIZ /PARITY ERROR. PC = /
46 | MOVE TAC,APRCHL ;GET THE PC FROM
47 | TLNE TAC,USRMOD ;IS THIS IN USER MODE?
48 | TRNN TAC,777760 ;YES. IS THIS ABOVE THE AC'S
49 | JRST PARIN3 ;EXEC MODE OR RUNNING IN THE AC'S
50 | TRNN TAC,400000 ;POSSIBLE UPPER?
51 | JRST PARIN2 ;NO THIS HAS TO BE A LOWER.
52 | HRRZ TAC1,APRCHL ;GET THE USER MODE PC.
53 | HLRZ AC3,LASTPR+P1PID ;GET THE CURRENT PROTECTION
54 | TRO AC3,1777 ;TURN ON LOW ORDER BITS.
55 | CAIG TAC1,(AC3) ;IS THIS PC IN THE LOWER?
56 | JRST PARIN2 ;YES
57 | CAIGE AC3,400000 ;IS THE LOWER GREATER THAN 128K (HA HA)
58 | MOVEI AC3,400000 ;NO. THIS IS THE NUMBER TO SUBTRACT FROM PC
59 | SUBI TAC,(AC3) ;LEAVING RELATIVE PC IN UPPER
60 | HRRZ AC3,LASTPR+P1PID ;GET THE RELOCATION
61 | LSH AC3,=9 ;SHIFT IT TO SELECT RELOC OF UPPER.
62 | ANDI AC3,776000 ;MASK
63 | TRC AC3,400000 ;UN-BUGGER IT -- RPH 2-7-73
64 | ADDI TAC,(AC3) ;ADD IT TO THE PC.
65 | MOVEM TAC,ERRPC ;SAVE ERROR PC.
66 | PUSHJ P,DISMES
67 | ASCIZ /#/ ;DENOTE BY THIS A PC IN THE UPPER
68 | JRST PARIN4
69 |
70 | SUBTTL HERE WE SEARCH FOR REAL ERRORS.
71 | PARIN2: HRRZ TAC1,LASTPR+P1PID ;GET CURRENT RELOCATION DATA
72 | ANDI TAC1,777000 ;LOWER PART OF RELOCATION
73 | ADDI TAC,(TAC1) ;ADD RELOCATION
74 | PARIN3: MOVEM TAC,ERRPC ;SAVE ERROR PC.
75 | PARIN4: PUSHJ P,DISOCT ;WRITE THE ERROR PC
76 | PUSHJ P,DISCRLF ;AND A CRLF
77 |
78 | CONO PI,@PARCON ;TURN OFF ERROR FLAG.
79 | SETOM ERRLOC ;SET TO SIGNIFY NONE FOUND YET.
80 | SETOM LASLOS ;JOB NUMBER OF LAST LOSER FOUND.
81 | SETZB TAC1,PARSJN
82 | SETZM SYSERR ;ASSUME NO ERRORS SYSTEM CORE.
83 | MOVE TAC,ERRPC ;GET THE ERROR PC
84 | TLNE TAC,USRMOD ;USER MODE?
85 | JRST PARIN5 ;YES.
86 | SETOM SYSERR ;EXEC MODE. PROBABLE SYSTEM ERROR.
87 | ANDI TAC,-1 ;PC ONLY
88 | CAIE TAC,SHFBLT ;IS THIS THE BLT IN THE SHUFFLER?
89 | CAIN TAC,SHFBLT+1 ;OR POSSIBLY HERE.
90 | MOVE TAC1,PARSJB ;SHUFFLE OPERATION. GET THE JOB NUMBER
91 | MOVEM TAC1,PARSJN ;SET FLAG IF A SHUFFLER OPERATION.
92 |
93 | PARIN5: SETZM ERRJOB ;ZERO OUR TABLE OF LOSING JOBS
94 | SETZM ERRJOB+1 ;
95 |
96 | REPEAT 0,< ;12/3/73
97 | CONI APR,TAC ;GET STATE OF SYS WR REF KLUGE
98 | HRRM TAC,SYSERR ;SAVE IN RIGHT SIDE OF SYSERR.
99 | DATAO PTR,[0] ;DISABLE SYS WR REF KLUGE.
100 | >
101 |
102 | MOVE TAC1,RMEMSIZ ;GET SIZE OF REAL MEMORY
103 | CAILE TAC1,400000 ;IS IT SMALL ENOUGH FOR ONE AOBJN?
104 | MOVEI TAC1,400000 ;NO. WE'LL DO THIS MUCH AT ONCE.
105 | MOVNI TAC1,-20(TAC1) ;OFFSET TO SKIP ACS
106 | HRLZ TAC1,TAC1 ;SWAP COUNT
107 | HRRI TAC1,20 ;OFFSET PAST ACS
108 | MOVEI AC3,@PARCON ;GET THE MASK FOR THE CONO
109 | PARL0: MOVE 0,(TAC1) ;LOOK AT MEMORY
110 | CONSO PI,(AC3) ;SKIP IF ERROR
111 | PARL1: AOBJN TAC1,PARL0 ;LOOP AND COUNT
112 | JUMPGE TAC1,PARL2 ;JUMP IF COUNT WAS EXHAUSTED.
113 | CONO PI,(AC3) ;SHUT OFF ERROR INDICATOR.
114 | MOVEM 0,(TAC1) ;STORE GOOD PARITY IN MEMORY
115 | PUSH P,TAC1 ;HAVE TO SAVE THIS FOR LATER.
116 | PUSHJ P,PARERF ;PARITY ERROR FOUND
117 | POP P,TAC1 ;RESTORE COUNTER
118 | MOVEI AC3,@PARCON ;RESTORE CONO MASK
119 | JRST PARL1 ;RESTORE COUNT AND REJOIN THE LOOP.
120 |
121 | PARL2: MOVE TAC1,RMEMSIZ ;GET THE SIZE OF OUR MEMORY
122 | CAIG TAC1,400000 ;IS IT TOO BIG TO HAVE BEEN SEARCHED?
123 | JRST PARL5 ;SMALL MEMORY HAS ALL BEEN SEARCHED.
124 | SUBI TAC1,400000 ;LEAVE US WITH COUNT OF HOW MUCH TO LOOK AT
125 | MOVN TAC1,TAC1 ;NEGATE
126 | HRLZ TAC1,TAC1 ;SWAP
127 | HRRI TAC1,400000 ;OFFSET TO UPPER REACHES OF MEMORY
128 | MOVEI AC3,@PARCON ;GET MASK FOR CONSO/CONO
129 | PARL3: MOVE 0,(TAC1)
130 | CONSO PI,(AC3) ;ANY ERROR?
131 | PARL4: AOBJN TAC1,PARL3 ;LOOP
132 | JUMPGE TAC1,PARL5 ;JUMP IF ALL DONE
133 | CONO PI,(AC3) ;SHUT OFF ERROR INDICATORS
134 | MOVEM 0,(TAC1) ;STORE GOOD PARITY IN MEMORY.
135 | PUSH P,TAC1 ;SAVE COUNTER
136 | PUSHJ P,PARERF ;SERVICE THIS ERROR
137 | POP P,TAC1
138 | MOVEI AC3,@PARCON ;RESTORE CONSO/CONO MASK
139 | JRST PARL4 ;AND RETURN TO LOOP
140 |
141 | PARL5: SKIPL ERRLOC ;HAS THIS BEEN SET UP?
142 | JRST PARL6 ;YES. WE MUST HAVE PRINTED SOMETHING
143 | PUSHJ P,DISMES ;WE DIDN'T FIND ANY.
144 | ASCIZ /LOCATION INDETERMINATE
145 | /
146 | PUSHJ P,ZSHAD ;ZERO SHADOW MEMORY IN CASE WE LOST THERE.
147 | JFCL ;SKIPS IF NO FAST ACS
148 | HRROS SYSERR ;CHECK THE SYSTEM. DEPT. OF REDUNDANCY DEPT.
149 | PARL6:
150 | MOVE TAC,SYSERR ;ERROR IN SYSTEM CORE?
151 | REPEAT 0,< ;12/1/73
152 | TRNE TAC,SWRENB ;WAS SYS WR REF KLUGE ENABLED?
153 | DATAO PTR,[1] ;YES. RE-ENABLE IT
154 | >
155 | JUMPGE TAC,PARL7 ;JUMP IF ERROR WAS NOT IN SYSTEM
156 | PUSHJ P,SYSFIX ;JUST IN CASE WE NEED THIS
157 | JFCL ;NO ERROR
158 | JFCL ;ERROR AND DIDN'T FIX
159 | ;ALL FIXED.
160 | PARL7: PUSHJ P,DISCRLF
161 | POPACS ;RESTORE ALL THE AC'S THAT WE SAVED
162 | MOVE P,PARPSAV ;GET STACK BACK (OR WHATEVER WAS IN IT).
163 | SKIPN P2RFLG ;WAS THIS THE PDP-6 HACKING?
164 | JRST PARL9 ;NO. THIS WAS THE PDP-10
165 | SETZM P2RFLG ;CLEAR ERROR FLAG
166 | CONO PI,APRON ;RESTORE INTERRUPT SYSTEM
167 | POPJ P, ;RETURN TO P1 CLOCK LEVEL
168 |
169 | PARL9: CONO PI,APRON ;TURN ON THE APR CHANNEL
170 | JEN @APRCHL ;DISMISS THIS INTERRUPT
171 |
172 |
173 | SUBTTL HERE WHEN A REAL ERROR IS FOUND.
174 | PARERF: MOVE TAC,ERRLOC ;REMEMBER OLD VALUE OF ERRLOC
175 | HRRZM TAC1,ERRLOC ;SAVE PRESENT ERROR LOCATION
176 | JUMPGE TAC,PARER1 ;JUMP IF THIS IS NOT THE FIRST TIME HERE.
177 | PUSHJ P,DISMES ;PUT OUT THE HEADING
178 | ASCIZ /LOC DATA RELOC NAME(J)
179 | /
180 | PARER1: HRRZ TAC,ERRLOC ;GET LOCATION
181 | PUSHJ P,DISLOC ;WRITE LOCATION
182 | PUSHJ P,DISTAB ;WRITE A TAB
183 | HRRZ TAC,ERRLOC ;GET LOCATION
184 | MOVE TAC,(TAC) ;GET DATA
185 | PUSHJ P,DISOCH ;WRITE LOSING DATA AS OCTAL HALF WORDS
186 | PUSHJ P,DISTAB ;PUT NEXT THING UNDER HEADING
187 | HRRZ DSER,ERRLOC ;GET THE LOCATION AGAIN (LOC = DSER)
188 | PUSHJ P,CORGBP ;MAKE A BYTE POINTER TO CORTAB
189 | ILDB J,TAC ;LOAD JOB NUMBER INTO J
190 | CAIGE J,JOBN ;IS THIS A SPECIAL CODE?
191 | JUMPG J,PARER4 ;JUMP IF CORE IS ASSIGNED TO NORMAL JOB
192 | SKIPE PARSJN ;ARE WE IN A SHUFFLE?
193 | JUMPE J,PARR4B ;YES. JUMP IF ALLEGED UNASSIGNED CORE.
194 | PARR1A: CAMN J,LASLOS ;SAME AS LAST LOSER?
195 | JRST DISCRLF ;YES. JUST TYPE A CRLF AND RETURN
196 | MOVEM J,LASLOS ;SAVE CODE FOR LAST LOSER
197 | JUMPG J,PARER2 ;JUMP IF NOT UNASSIGNED CORE
198 | PUSHJ P,DISMES ;FOR UNASSIGNED CORE
199 | ASCIZ /UNUSED
200 | /
201 | POPJ P, ;RETURN LOOK FOR MORE.
202 |
203 | PARER2: CAIE J,101 ;IS THIS THE SYSTEM?
204 | JRST PARER3 ;NO. MUST BE FREE STORAGE.
205 | HRROS SYSERR ;REMEMBER TO CHECKSUM THE SYSTEM
206 | PUSHJ P,DISMES
207 | ASCIZ /SYS
208 | /
209 | POPJ P,
210 |
211 | PARER3: PUSHJ P,DISMES
212 | ASCIZ /FS
213 | /
214 | POPJ P,
215 |
216 |
217 | PARR4B: MOVE J,PARSJN ;JOB NUMBER OF GUY BEING SHUFFLED.
218 | HRRZ TAC,PARBLK ;GET LOC OF OLD CORE
219 | SUBI DSER,(TAC) ;MAKE RELATIVE LOCATION.
220 | JUMPL DSER,PARR4C ;THIS ISN'T PART OF THE OLD CORE.
221 | HLRZ TAC,PARBLK ;GET SIZE OF OLD CORE
222 | CAILE DSER,(TAC) ;SKIP IF ERROR IS IN OLD SHUFFLED CORE.
223 | PARR4C: MOVEI J,0
224 | JUMPE J,PARR1A ;TREAT THIS AS UNUSED CORE.
225 | PARER4: PUSH P,J ;SAVE JOB NUMBER
226 | HRRZ TAC1,JBTADR(J) ;GET THE BASE ADDRESS OF THIS JOB
227 | CAMN J,PARSJN ;THIS JOB SHUFFLE IN PROGRESS?
228 | HRRZ TAC1,PARBLK ;YES. GET THE OLD JOB LOCATION.
229 | HRRZ TAC,ERRLOC ;GET THE ERROR LOCATION
230 | SUBI TAC,(TAC1) ;FORM THE USER RELATIVE ADDRESS
231 | MOVEM TAC,RERLOC ;SAVE RELOCATED ERROR LOCATION.
232 | PUSHJ P,DISLOC ;TYPE 6 CHARACTERS
233 | MOVE J,(P) ;GET THE JOB NUMBER INTO J AGAIN
234 | CAMN J,LASLOS ;SAME AS LAST TIME?
235 | JRST PARR4A ;YES. DON'T TELL JOB NAME AGAIN
236 | MOVEM J,LASLOS ;REMEMBER FOR NEXT TIME
237 | PUSHJ P,DISTAB ;TYPE A TAB FOR SEPARATION
238 | MOVE J,(P) ;MAKE SURE NO ONE CLOBBERS J.
239 | PUSHJ P,DISJOB ;TYPE JOB NUMBER(JOB NAME)
240 | CAME J,PARSJN ;IS THIS A SHUFFLE OPERATION?
241 | JRST PARR4A
242 | PUSHJ P,DISMES
243 | ASCIZ / SHUFFLE/
244 | PARR4A: PUSHJ P,DISCRLF
245 | MOVE J,(P) ;RESTORE J (AGAIN)
246 | MOVE TAC,JBTSTS(J) ;GET THE JOB STATUS WORD
247 | TLNN TAC,JSEG ;IS THIS REALLY AN UPPER?
248 | JRST PARER8 ;NO, JUST A SIMPLE LOWER.
249 | PUSHJ P,MARKERR ;HAS THIS UPPER LOST BEFORE (OR IS IT FIXABLE)?
250 | JRST TPOPJ ;YES. DON'T TELL LOWERS AGAIN
251 | MOVEI TAC,400000 ;IN CASE OF A SEGMENT
252 | ADDM TAC,RERLOC ;ADD 400000 TO RELOCATED ERROR ADDRESS
253 | MOVEI J,JOBN-1 ;FOR ALL THE JOBS IN THE WORLD....
254 | PARER5: LDB TAC,PSEGN ;GET THE JOB NUMBER OF THIS GUY'S UPPER
255 | CAME TAC,(P) ;SAME AS THIS UPPER?
256 | SOJG J,PARER5 ;NO.
257 | JUMPLE J,PARER6 ;JUMP IF NO MORE USERS OF THIS UPPER
258 | PUSH P,J ;SAVE THIS JOB ON THE STACK
259 | PUSHJ P,TELUSR ;TELL A LOWER SEGMENT.
260 | POP P,J
261 | SOJG J,PARER5 ;DECREMENT J AND LOOK FOR MORE.
262 | PARER6: POP P,J ;GET THE NUMBER OF THIS UPPER.
263 | MOVE TAC,PRJPRG(J) ;GET A RIDICULOUS NAME
264 | MOVEM TAC,JOBNAM(J) ;SAVE IT AS THE JOB NAME
265 | POPJ P, ;NO ONE WILL ATTACH TO THIS AGAIN.
266 |
267 | PARER8: PUSHJ P,TELUSR ;TELL THE USER ABOUT WHAT BEFELL HIM
268 | JRST TPOPJ ;ADJUST STACK AND RETURN.
269 |
270 | TELUSR: PUSHJ P,MARKERR ;MARK THIS JOB HAS ERROR
271 | POPJ P, ;HE'S BEEN TOLD BEFORE.
272 | MOVSI TAC,INTPAR ;PICKUP PARITY ERROR ENABLE BIT
273 | TDNN TAC,JBTIEN(J) ;IS THIS USER ENABLED FOR THIS?
274 | JRST TELUS1 ;NO. TELL HIM AND STOP HIM
275 | IORM TAC,JBTIRQ(J) ;SET PARINT BIT FOR THIS USER
276 | SETOM INTREQ(PID) ;REQUEST A USER INTERRUPT
277 | MOVE TAC1,RERLOC ;GET THE RELOCATED ADDRESS OF ERROR
278 | MOVEM TAC1,INTDTM(J) ;SAVE IT FOR THIS USER.
279 | CONO PI,1B24!1(7-CLKCHN) ;REQUEST INTERRUPT ON CLOCK CHANNEL
280 | POPJ P,
281 |
282 | TELUS1: PUSHJ P,TTYERR ;GET THE USER'S TTY
283 | MOVE TAC,RERLOC
284 | HLRZ AC3,JBTADR(J)
285 | CAMN J,PARSJN ;SHUFFLED JOB?
286 | HLRZ AC3,PARBLK ;YES. USE THIS ADDRESS.
287 | CAILE TAC,(AC3) ;IN LOWER?
288 | JRST TELUS2 ;NO. IT IS IN THE UPPER
289 | PUSHJ P,INLMES ;STUFF DATA INTO TTY
290 | ASCIZ /PARITY ERROR IN YOUR CORE IMAGE. LOC = /
291 | JRST TELUS3
292 |
293 | TELUS2: PUSHJ P,INLMES
294 | ASCIZ /PARITY ERROR IN YOUR UPPER SEGMENT. LOC = /
295 | TELUS3: MOVE TAC,RERLOC ;GET THE RELOCATED ERROR
296 | PUSHJ P,OCTPNT ;TELL HIM THE LOCATION.
297 | PUSHJ P,PRCRCC
298 | PUSHJ P,TTYSTR ;START THE USER'S TTY TYPING
299 | SKIPL JBTSTS(J) ;IS THIS GUY RUNNABLE?
300 | POPJ P, ;NO.
301 | TELSTP: MOVE TAC,JBTSTS(J)
302 | TLNE TAC,JLOG ;LOGGED IN?
303 | JRST STOP1 ;YES. JUST STOP IT.
304 | JRST ESTOP ;NO. KILL THE PHANTOM
305 |
306 | ;CALL THIS ROUTINE TO SEE IF HE NEEDS TO BE TOLD
307 | ;WILL TRY TO REPEAT SWAPIN IF POSSIBLE
308 |
309 | MARKERR: ;PUSHJ HERE TO MARK JOB IN J AS HAVING ERROR.
310 | JUMPLE J,CPOPJ ;IMPOSSIBLE JOB NUMBER
311 | CAIL J,JOBN
312 | POPJ P, ;IMPOSSIBLE JOB, UNNATURAL ACTS
313 | MOVEI TAC,(J) ;GET JOB NUMBER
314 | SETZ TAC1,
315 | LSHC TAC,-5
316 | ROT TAC1,5
317 | MOVEI AC3,1
318 | ROT AC3,-20(TAC1) ;ROTATE TO AN UNUSUAL POSITION
319 | TDNE AC3,ERRJOB(TAC) ;IS THIS BIT SET ALREADY?
320 | POPJ P, ;YES.
321 | IORM AC3,ERRJOB(TAC) ;NO. SET IT
322 | MOVE TAC,RERLOC
323 | HLRZ AC3,JBTADR(J)
324 | CAIG TAC,(AC3) ;CAN'T FIX HIS UPPER HERE
325 | SKIPE STIME(J) ;NOW SEE IF THE SWAPPER CAN FIX IT
326 | JRST CPOPJ1 ;MODIFIED SINCE SWAPIN
327 | HLRZ TAC,JBTSWP(J)
328 | JUMPE TAC,CPOPJ1 ;NOT SWAPPED OUT YET
329 | SKIPN XJOB(J)
330 | AOS XJOB
331 | AOS XJOB(J) ;THIS SHOULD MAKE IT GET SWAPPED
332 | POPJ P,
333 | SUBTTL P2 PARITY ERROR INTERRUPT
334 | ^P2RINT:
335 | CONO PI,@P2RCON ;ZERO ERROR BIT
336 | MOVEM TAC,P2SA ;SAVE TAC
337 | MOVEI TAC,17 ;SCAN THE AC'S
338 | MOVES (TAC)
339 | SOJGE TAC,.-1 ;LOOP
340 | CONSZ PI,@P2RCON ;IS THAT WHERE IT IS?
341 | JRST PARACS ;YES
342 | SETOM PARFLG ;NO, TELL THE TEN
343 | MOVE TAC,PARFLG ;WAIT FOR THE PDP-10 TO SEE THE FLAG
344 | JUMPN TAC,.-1 ;WAIT UNTIL IT GOES ZERO
345 | MOVE TAC,P2RFLG ;WAIT FOR THE PDP-10 TO FINISH PARSER
346 | JUMPN TAC,.-1 ;
347 | JRST P2ROUT ;RESTORE TAC AND DISMISS
348 | PARACS: CONO PI,@P2RCON ;CLEAR PARITY ERROR
349 | P2ROUT: MOVE TAC,P2SA ;RESTORE ACCUMULATOR
350 | JEN @AP2CHL ;DISMISS INTERRUPT
351 |
352 | BEND PARSER
353 |
--------------------------------------------------------------------------------
/sys/J17-1974/patch.MAC:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00002 PAGES
2 | C REC PAGE DESCRIPTION
3 | C00001 00001
4 | C00002 00002 FORCE OUT THE LITERALS (XLISTED FOR YOUR READING PLEASURE)
5 | C00004 ENDMK
6 | C;
7 | ;FORCE OUT THE LITERALS (XLISTED FOR YOUR READING PLEASURE)
8 | XLIST ;FOR CRISSAKE SAVE 100 PAGES OF PAPER
9 | LIT
10 | LIST
11 | CHKEND__. ;END OF CHECKSUMMED REGION.
12 | VAR
13 |
14 | ;PATCH - PATCH AREA FOR T. S. MONITOR
15 |
16 | ;THIS PROGRAM SHOULD BE LOADED AFTER LAST NEEDED PROGRAM
17 | ;BUT BEFORE SYSMAK,EXEC DDT,USER DDT, AND ONCE
18 |
19 | ^PATCH: BLOCK 100
20 |
--------------------------------------------------------------------------------
/sys/J17-1974/ptrser.MAC:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00005 PAGES
2 | C REC PAGE DESCRIPTION
3 | C00001 00001
4 | C00002 00002 BEGIN PTRSER SUBTTL PTRSER PAPER TAPE READER SERVICE, J. SAUTER, 11-NOV-68
5 | C00003 00003 UUO DISPATCH TABLE:
6 | C00009 00004 PAPER TAPE READER INTERRUPT.
7 | C00013 00005 P1 CLOCK LEVEL AND HUNG TIMEOUT CODE
8 | C00019 ENDMK
9 | C;
10 | BEGIN PTRSER SUBTTL PTRSER PAPER TAPE READER SERVICE, J. SAUTER, 11-NOV-68
11 |
12 | ;PTR CONTROL REGISTER
13 | POWER__400 ;POWER ON ON PDP-6, NOT EOT ON PDP-10.
14 | BINARY__40 ;BINARY MODE.
15 | BUSY__20 ;PTR IS BUSY READING A WORD.
16 | DONE__10 ;PTR HAS A WORD.
17 |
18 | ;SPECIAL ASCII CHARACTERS:
19 | NULL__200 ;NULL CHARACTER
20 | RUBOUT__377 ;RUBOUT.
21 |
22 | ;SPECIAL BITS IN LH OF IOS:
23 | PTRPOW__200000 ;PTR HAS (HAD) POWER ON.
24 | PTRNPW__100000 ;PTR DOESN'T HAVE POWER ON FOR FIRST OPERATION.
25 | STOPTR__40000 ;HUNG TIMEOUT ASSUMES EOF.
26 | ;UUO DISPATCH TABLE:
27 | JRST PTRINI ;INITIALIZE.
28 | JRST PTRHNG ;HUNG TIMEOUT.
29 | ^PTRDSP:
30 | JRST PTRXRL ;RELEASE.
31 | POPJ P, ;CLOSE.
32 | JRST ILLOUT ;OUTPUT
33 |
34 | ;INPUT UUO
35 | PTRINP: PSYNC PTRCSC
36 | PUSHJ P,SETACT ;SET IOACT.
37 | TLNN IOS,IOBEG ;FIRST TIME?
38 | JRST @PTRIN1 ;NO.
39 | TLO IOS,IOFST ;YES. SET UP THINGS.
40 | TLZ IOS,PTRPOW
41 | PUSHJ P,SETBYT ;SET UP TAC.
42 | MOVEM TAC,PTRPTR ;SAVE FOR INTERRUPT ROUTINES.
43 | PTRIN5: TLZN IOS,PTRNPW ;HAS THE LOSER FLAG BEEN SEEN ALREADY?
44 | JRST @PTRIN1 ;TO PTRP1U FOR 1 PROCESSOR, OR PTRP2U FOR TWO.
45 | ;HERE ON SECOND INPUT AFTER FIRST INPUT DISCOVERED POWER OFF ON THE PDP-6 READER
46 | PUSHJ P,CLRACT ;CLEAR IO ACTIVE
47 | XSYNC PTRCSC ;RELEASE SYNCHRONIZER.
48 | PUSHJ P,HNGSTP ;PRINT DEVICE PTR OK? AND STOP JOB.
49 | JRST PTRINP
50 |
51 | PTRP2U: PUSHJ P,STOIOS ;STORE IOS.
52 | SETOM PTRACT ;REQUEST P2 TO START READER.
53 | JRST XPOPJ ;DESYNCHRONIZE AND EXIT
54 |
55 | ;HERE AT P2 CLOCK LEVEL
56 | ^PTRP2: MOVE TAC,PTRACT ;P2 START REQUEST?
57 | JUMPE TAC,CPOPJ ;NO.
58 | PSYNC PTRCSC ;SYNCHRONIZE.
59 | SETZM PTRACT ;INDICATE REQUEST GRANTED.
60 | MOVEI DDB,PTRDDB ;SET UP DDB AND IOS.
61 | MOVE IOS,DEVIOS(DDB)
62 | TLZE IOS,STOPTR ;
63 | JRST PTRYRL ;HUNG TIMEOUT REQUESTS THAT THE READER STOP.
64 | PTRP1U:
65 | PTRIN2: TLZN IOS,IOBEG ;FIRST TIME?
66 | JRST PTRIN3 ;NO.
67 | CONSZ PTR,POWER ;YES. POWER ON?
68 | TLOA IOS,PTRPOW ;YES.
69 | JUMPN PID,PTRIN4 ;POWER OFF ON PDP-6 READER.
70 | SKIPA TAC1,[PTRCHN!BUSY] ;SET TAC1 WITH CONO START
71 | PTRIN3: MOVEI TAC1,PTRCHN!DONE ;SET TAC1 WITH CONO CONTINUE
72 | PUSHJ P,STOIOS ;STORE IOS, RESET HUNG COUNT.
73 | LDB TAC,PIOMOD ;GET MODE.
74 | CAIE TAC,IB ;IMAGE BINARY?
75 | CAIN TAC,B ;OR BINARY?
76 | TRO TAC1,BINARY ;YES. SET READER INTO BINARY MODE.
77 | MOVEM TAC1,PTRSTR ;REMEMBER FOR INTERRUPT LEVEL.
78 | MOVEI TAC,DONE ;WAIT FOR DONE FLAG.
79 | CONO PI,PTROFF
80 | SETZM PTRDSC ;SET NOT PTR DISCONNECTING.
81 | HRRM TAC,@PTRCON ;SET UP BITS.
82 | CONSO PTR,7 ;SKIP IF READER IS RUNNING!
83 | CONO PTR,@PTRSTR ;READER IDLE. KICK IT.
84 | CONO PI,PTRON
85 | CONSZ PTR,POWER ;WE SHOULD SEE POWER OR TAPE BY NOW.
86 | JRST XPOPJ ;DESYNCRONIZE AND RETURN.
87 | PTRIN4: TLO IOS,PTRNPW!IOBEG ;FLAG NO POWER AVAILABLE
88 | TLZN IOS,STOPTR
89 | SETOM PTRADV ;FLAG THE PDP-10
90 | PUSHJ P,STOIOS ;STORE IOS
91 | JUMPN PID,XPOPJ
92 | JRST PTRIN5 ;HANG ON THE PDP-10
93 |
94 | PTRINI: SYNINI PTRCSC ;INITIALIZE SYNCHRONIZER CELLS.
95 | ;DETERMINE WHICH PROCESSOR TO USE. IF ONE PROCESSOR IS A
96 | ;PDP-6, USE IT. IF P2 DOES NOT EXIST, USE P1, OTHERWISE,
97 | ;USE P2.
98 | MOVEI AC1,PTRP1U ;ASSUME P1
99 | MOVEI AC2,PTRCN1
100 | HRRZ TAC,P2NUM ;GET NUMBER OF P2 (=6 OR =10)
101 | CAIN TAC,6 ;IS IT A PDP-6?
102 | JRST USEP2 ;YES. USE IT.
103 | JUMPE TAC,USEP1 ;IF THERE IS NO P2, USE P1.
104 | HRRZ TAC,P1NUM ;GET NUMBER OF P1.
105 | CAIN TAC,6 ;IS IT A PDP-6?
106 | JRST USEP1 ;YES. USE IT.
107 | USEP2: MOVEI AC1,PTRP2U
108 | MOVEI AC2,PTRCN2
109 | USEP1: MOVEM AC1,PTRIN1 ;SET DISPATCH FOR INPUT UUO'S
110 | MOVEM AC2,PTRCON ;SET ADDRESS FOR CONSZ BITS.
111 | HLLZS PTRCN1
112 | HLLZS PTRCN2
113 |
114 | PTRXRL: SETZM PTRDDB+DEVIOS ;CLEAR READER STATUS. RELEASE UUO.
115 | ^PTRREL: ;ALSO CALLED FROM SYSINI
116 | CONO PTR,0 ;STOP READER, DISCONNECT IT FROM PI
117 | HLLZS @PTRCON
118 | POPJ P,
119 |
120 | PTRYRL: PUSHJ P,IOSET
121 | JRST PWROFF ;SIMULATE POWER OFF.
122 | ;PAPER TAPE READER INTERRUPT.
123 | ^PTRINT:
124 | SKIPL PTRDSC ;SKIP DATAI IF WE ARE DISCONNECTING.
125 | DATAI PTR,PTRCHR ;READ CHAR FROM READER.
126 | JSR @PTRSAV ;SAVE ACCUMULATORS.
127 | PSYNC PTRCSC
128 | MOVEI DDB,PTRDDB ;SET UP REGISTERS
129 | PUSHJ P,IOSET
130 | MOVE IOS,DEVIOS(DDB)
131 | CONSO PTR,POWER ;POWER ON?
132 | JRST PWROFF ;NO.
133 | TLON IOS,PTRPOW ;POWER IS ON NOW, WAS IT BEFORE?
134 | JRST PTRXIT ;POWER IS ON FOR THE FIRST TIME.
135 | SKIPE PTRDSC ;IS PTR BEING DISCONNECTED?
136 | JRST PTRDIS ;YES. DO IT.
137 | MOVE DAT,PTRCHR ;GET CHARACTER.
138 | PTRIN0: TRNE IOS,B ;BINARY MODE?
139 | JRST PTRI0 ;YES. (MODES 10,13,14)
140 | IORI DAT,200 ;IGNORE PARITY.
141 | CAIE DAT,NULL ;NULL CHARACTER?
142 | CAIN DAT,RUBOUT ;OR RUBOUT?
143 | JRST PTRXIT ;YES. IGNORE CHAR AND START READING NEXT.
144 | PTRI0: PUSHJ P,STODAT ;STORE DATA IN BUFFER.
145 | JFCL ;CHECKSUM ERROR.
146 | JRST PTRI1 ;BLOCK COMPLETE.
147 | MOVEM ITEM,DEVCTR(DDB);INCOMPLETE. STORE ITEM.
148 | PTRXIT:
149 | PTRXT1: PUSHJ P,STOIOS ; STORE IOS, RESET HUNG COUNT
150 | XPOPJ: XSYNC PTRCSC
151 | POPJ P, ;DISMISS INTERRUPT.
152 |
153 | ;MORE I-LEVEL ROUTINES.
154 | PWROFF: TLZ IOS,PTRPOW ;NOTE THAT READER IS OFF.
155 | TLO IOS,IOEND+IOBEG
156 | PUSHJ P,PTRREL ;SHUT IT OFF!
157 | LDB TAC,PIOMOD ;GET MODE.
158 | CAIE TAC,B ;CHECKSUM-BINARY?
159 | JRST PTREI ;NO.
160 | TLNN IOS,IOFST ;INCOMPLETE BLOCK?
161 | TRO IOS,IOIMPM ;YES. COMPLAIN.
162 | PUSHJ P,CLRACT ;CLEAR I/O ACTIVE BIT.
163 | JRST PTRI1A
164 |
165 | ;BLOCK INCOMPLETE
166 | PTREI: PUSHJ P,STOSQD ;TRUNCATE BUFFER, STORE W.C.
167 | JFCL ;FALL INTO PTRI1
168 | ;BLOCK COMPLETE.
169 | PTRI1: MOVEM ITEM,DEVCTR(DDB);STORE ITEM COUNT.
170 | PTRI1A: JUMPE PID,PTRI2 ;NO. ONE PROCESSOR
171 | SETOM PTRDSC ;MUST DISCONNECT PTR
172 | TLZN IOS,STOPTR
173 | SETOM PTRADV ;REQUEST BUFFER ADVANCE.
174 | JRST PTRXT1 ;RELEASE CONTROL OF IOS AND DISMISS
175 |
176 | PTRI2: TLO IOS,IOFST ;(SINGLE PROCESSOR)
177 | TLZE IOS,IOW ;UNWAIT THE JOB.
178 | PUSHJ P,SETIOD ;IF NEEDED.
179 | TLNE IOS,PTRPOW ;POWER OFF?
180 | PUSHJ P,ADVBFF ;NOT POWER OFF, ADVANCE BUFFERS
181 | JRST PTRI3 ;NO MORE BUFFER SPACE.
182 | JRST PTRXIT ;START READER, STORE IOS, AND DISMISS INTERRUPT.
183 |
184 | PTRI3: PUSHJ P,CLRACT ;NO BUFFER SPACE. CLEAR IOACT.
185 | SETOM PTRDSC ;REQUST PTR DISCONNECT.
186 | JRST PTRXT1 ;RELEASE SYNCHRONIZER. DISMISS INTERRUPT.
187 |
188 | PTRDIS: JUMPN PID,PTRDS1
189 | SKIPG @PTRADR ;BUFFER FREE?
190 | JRST PTRDS1 ;NO. MUST DISCONNECT.
191 | DATAI PTR,DAT
192 | JRST PTRIN0 ;INPUT CHARACTER AND PROCESS AS NORMAL.
193 |
194 | PTRDS1: PUSHJ P,PTRREL ;STOP PTR.
195 | JRST PTRXT1 ;DISMISS INTERRUPT
196 | ;P1 CLOCK LEVEL AND HUNG TIMEOUT CODE
197 |
198 | PTRHNG: MOVE TAC,PTRIN1
199 | CAIN TAC,PTRP1U
200 | POPJ P, ;ON PDP-10 I DON'T UNDERSTAND HANGS.
201 | PSYNC PTRCSC ;SYNCHRONIZE.
202 | MOVE IOS,PTRDDB+DEVIOS ;GET IOS
203 | TLZN IOS,PTRPOW ;HAVE WE SEEN POWER ON?
204 | JRST XPOPJ ;NO. LET IT HANG.
205 | TLON IOS,STOPTR!IOEND ;MAKE PTR STOP. PRETEND END OF TAPE.
206 | AOS (P) ;SET SKIP RETURN TO AVOID HUNG PTR MESSAGE
207 | MOVEM IOS,PTRDDB+DEVIOS ;STORE IOS
208 | SETOM PTRACT ;KICK PDP-6
209 | JRST XPOPJ ;RELEASE SYNCHRONIZER AND WAIT FOR PDP-6.
210 |
211 |
212 | ;HERE AT P1 CLOCK LEVEL
213 | ^PTRP1: SETZM PTRADV ;CLEAR REQUEST
214 | PSYNC PTRCSC
215 | MOVEI DDB,PTRDDB ;LOAD UP REGISTERS.
216 | MOVE IOS,DEVIOS(DDB)
217 | TLNE IOS,PTRNPW
218 | TRO IOS,IOIMPM ;READING WITHOUT READER ON.
219 | TLO IOS,IOFST ;NEXT ITEM WILL BE FIRST OF A BUFFER.
220 | TLZE IOS,IOW ;IS JOB WAITING FOR PTR?
221 | PUSHJ P,SETIOD ;YES. UNWAIT IT.
222 | LDB J,PJOBN ;SET J
223 | MOVE PROG,JBTADR(J) ;
224 | PUSHJ P,ADVBFF ;ADVANCE BUFFERS.
225 | JRST PTRP1A ;OUT OF BUFFER SPACE.
226 | TLNE IOS,IOEND!PTRNPW ;END OF FILE OR ERROR?
227 | JRST PTRP1A ;YES. STOP READER.
228 | PUSHJ P,STOIOS ;STORE IOS.
229 | SETOM PTRACT ;ACTIVATE PTR.
230 | JRST XPOPJ ;RELEASE SYNCHRONIZER AND RETURN
231 |
232 | PTRP1A: PUSHJ P,CLRACT ;CLEAR IOACTIVE, DON'T RESTART THE READER
233 | JRST XPOPJ
234 |
235 | BEND PTRSER
236 |
--------------------------------------------------------------------------------
/sys/J17-1974/spwser.MAC:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00008 PAGES
2 | C REC PAGE DESCRIPTION
3 | C00001 00001
4 | C00002 00002 BEGIN SPWSER SUBTTL SPACEWAR SERVICE
5 | C00003 00003 ROUTINE TO KILL 2-PROCESSOR SPACE WAR FOR JOB N
6 | C00006 00004 ENTER HERE FROM UUOCON TO SET UP A SPW JOB
7 | C00010 00005 BASIC LEVEL SPW CLOCK AND RUN ROUTINES
8 | C00013 00006 HERE, WE KNOW THIS JOB IS RUNABLE. NOW, IS IT TIME TO RUN?
9 | C00017 00007 INTERRUPT LOCATIONS FOR BOTH PROCESSORS
10 | C00021 00008 WE GET HERE ON ERROR IN SPW MODE JOB OR DISMISS
11 | C00024 ENDMK
12 | C;
13 | BEGIN SPWSER SUBTTL SPACEWAR SERVICE
14 | ; JAM. STANFORD, 8-NOV-68
15 |
16 | AP2CHL_CAT(P2CH,\APRCHN)
17 |
18 | ; INITIALIZE ALL SPACEWAR TABLES
19 |
20 | ^SPWINI:
21 | SETZM SPWGO ; ZERO OUT P1 SPW TABLE
22 | MOVE TAC,[XWD SPWGO,SPWGO+1]
23 | BLT TAC,JBTST2+JOBN-1 ;CLEAR SPWGO,SP2GO,JBTST2
24 |
25 | SYNINI SPWCSC
26 |
27 | CONI 404,SPWBUT ; SET UP SPW BUTTONS
28 | SETZM SPWACT ; KILL SPW JOB COUNT
29 | SETZM SPWUUF ;NOT AT SPACEWAR LEVEL ON EITHER PROCESSOR
30 | SETZM SPWUUF+P2PID
31 | SETZM SPWTMO ;AND INITIALLY, NO TIMEOUT ACTIVE
32 | SETZM SPWTMO+P2PID
33 | POPJ P,
34 | ; ROUTINE TO KILL 2-PROCESSOR SPACE WAR FOR JOB N
35 | ; CALLING . . .
36 | ; MOVE J,JOB ; GET JOB NUMBER IN ITEM
37 | ; PUSHJ P,KILSPW ; KILLS SPACEWAR, SAVES AC'S
38 |
39 | ^KILSPW:PUSH P,TAC
40 | MOVSI TAC,SPWSNB
41 | PUSHJ P,CLRSIN ; CLEAR ANY SPACEWAR SWAPIN REQUEST
42 | POP P,TAC
43 | PUSH P,TAC1
44 | PSYNC SPWCSC ; GET CONTROL OF SPW CELLS
45 | SKIPN JBTST2(J) ; IS A JOB ACTIVE HERE?
46 | JRST KILSP1
47 | IFN FTSTAT,<
48 | PUSH P,TAC
49 | MOVEI TAC,SPWSTA+7700
50 | PUSHJ P,STAPUT
51 | POP P,TAC
52 | >;FTSTAT
53 | SKIPE SPWGO(J) ;DOES HE HAVE A P1 SPW JOB
54 | PUSHJ P,P1REL ;RELEASE SPW ON PDP 10
55 | SKIPE SP2GO(J) ;AND P2
56 | PUSHJ P,P2REL ;RELEASE SPW ON PDP 6
57 | SETZM JBTST2(J)
58 | KILSP1: XSYNC SPWCSC
59 | POP P,TAC1
60 | POPJ P,
61 |
62 | P1REL: SETZ TAC1,
63 | MOVE TAC,TAC1
64 | LDB TAC1,[POINT 6,SPWGO(TAC),5]
65 | CAME TAC1,J
66 | JUMPN TAC1,.-3
67 | JUMPE TAC1,CPOPJ
68 | LDB TAC1,[POINT 6,SPWGO(J),5]
69 | DPB TAC1,[POINT 6,SPWGO(TAC),5]
70 | SETZM SPWGO(J)
71 | SOS SPWACT
72 | POPJ P,
73 |
74 | P2REL: SETZ TAC1,
75 | MOVE TAC,TAC1
76 | LDB TAC1,[POINT 6,SP2GO(TAC),5]
77 | CAME TAC1,J
78 | JUMPN TAC1,.-3
79 | JUMPE TAC1,CPOPJ
80 | LDB TAC1,[POINT 6,SP2GO(J),5]
81 | DPB TAC1,[POINT 6,SP2GO(TAC),5]
82 | SETZM SP2GO(J)
83 | SOS SPWACT
84 | POPJ P,
85 |
86 | OFSPW: PUSHJ P,KILSPW ;HERE IF HE GOOFS.
87 | JSP TAC,UUOMES
88 | ASCIZ /ATTEMPT TO INITIATE SPW JOB WITH ONE ALREADY RUNNING
89 | UUO/
90 | ; ENTER HERE FROM UUOCON TO SET UP A SPW JOB
91 | ; CALL FROM UUOCON:
92 | ; MOVE UCHN,[MODE-BITS,,TICKS]
93 | ; MOVE UUO,[ANYTHING,,STARTING ADDRESS]
94 |
95 | ^SPWCON:
96 | MOVE J,JOB(PID) ; GET CURRENT JOB NUMBER
97 | MOVEI TAC,(UUO) ;GET STARTING ADDRESS
98 | JUMPN UCHN,SPW0 ;ZERO TICKS?
99 | CAIN TAC,'SSW' ;STOP CODE?
100 | JRST KILSPW ;YES, STOP SPACEWAR
101 | SPW0: CAIGE TAC,140 ;ABOVE JOB DATA AREA?
102 | JRST UADRER ;GIVE HIM ADDRESS CHECK FOR STARTING ADR
103 | XCTR XR,[MOVE TAC,(TAC)] ;ADDRESS CHECK HIS STARTING ADDRESS
104 | ;HERE, P2 IS ALIVE.
105 | TLNN UCHN,200000 ;REQUESTING PDP-6?
106 | JUMPL UCHN,SPW1 ;NO, HOW ABOUT PDP-10?
107 | SKIPE SP2GO(J) ;IS THERE ALREADY A JOB RUNNING HERE?
108 | JRST OFSPW ;YES, HE GOOFED
109 | SPW4H: SKIPL PALIVE+P2PID ;IS THE PDP-6 REALLY THERE?
110 | JRST SPW4G
111 | TLNN UCHN,200000 ;WAS HE REALLY SURE ABOUT USING THE SIX?
112 | JRST SPW1 ;NO, TRY THE TEN
113 | JUMPN PID,SPW4G
114 | MOVEI TAC,[ASCIZ /
115 | HUNG DEVICE: PDP-6
116 | /]
117 | PUSHJ P,HNGMES
118 | JRST SPW4H
119 |
120 | SPW4G: AOS SPWACT
121 | IFN FTSTAT, <
122 | HRRZ TAC,UCHN
123 | LSH TAC,6
124 | TRO TAC,SPWSTA+4000 ;FLAG PDP-6
125 | PUSHJ P,STAPUT
126 | >;FTSTAT
127 | PSYNC SPWCSC ; GET CONTROL OF JBTST2
128 | MOVSI DAT,SPWRUN
129 | TLNE UCHN,40000 ;SUPPRESS TIMEOUT?
130 | MOVSI DAT,SPWRUN!SPWNT2 ;YES. SET TIMEOUT SUPRESSION BIT TOO
131 | IORM DAT,JBTST2(J) ; MARK US AS RUNNING
132 | TSO UCHN,SP2GO ; COPY FIRST LINK INTO UCHN (RIGHT)
133 | DPB J,[POINT 6,SP2GO,5] ;NEW FIRST LINK
134 | HRLM UCHN,SP2GO(J) ;DO THIS STUFF NOW TOO
135 | HRRM UUO,SP2GO(J)
136 | XSYNC SPWCSC ; RELEASE CONTROL OF JBTST2
137 | JUMPGE UCHN,CPOPJ ;IS HE REQUESTING IT TO BE RUN ON THE PDP-10 ALSO?
138 |
139 | SPW1: ;HERE FOR P1 SPACEWAR
140 | SKIPE SPWGO(J) ; IS THERE ALREADY A JOB THERE?
141 | JRST OFSPW ; YES, GO SHOOT HIM!
142 | AOS SPWACT ; WE HAVE ONE MORE SPW JOB NOW
143 | IFN FTSTAT, <
144 | HRRZ TAC,UCHN
145 | LSH TAC,6
146 | TRO TAC,SPWSTA ;FLAG PDP-10
147 | PUSHJ P,STAPUT
148 | >;FTSTAT
149 | PSYNC SPWCSC ; GET CONTROL CELLS
150 | MOVSI DAT,SPWRUN ; INDICATE THAT A JOB IS RUNNING
151 | TLNE UCHN,100000 ;P1 TIMEOUT SUPRESSION?
152 | MOVSI DAT,SPWRUN!SPWNT1 ;YES. SET TIMEOUT SUPRESSION BIT
153 | IORM DAT,JBTST2(J) ; PUT IN 'RUNNING' BIT
154 | TSO UCHN,SPWGO
155 | DPB J,[POINT 6,SPWGO,5]
156 | HRLM UCHN,SPWGO(J) ; PUT JIFFIES IN LH
157 | HRRM UUO,SPWGO(J) ; PUT ADDRESS IN RH
158 | XSYNC SPWCSC
159 | POPJ P,
160 | ; BASIC LEVEL SPW CLOCK AND RUN ROUTINES
161 | ; FIRST, ACCUMULATOR RE-DEFINITIONS
162 | AC_DEVDAT
163 | GO_DAT
164 | A_DSER
165 | B_UCHN
166 | C_UUO
167 | D_PROG
168 | ; REGISTER AC CONTAINS THE ADDRESS OF THE PROCESSOR'S AC STORAGE TABLE
169 | ; REGISTER GO CONTAINS SPWGO OR SP2GO, DEPENDING ON WHERE WE ARE
170 |
171 | ^SPWP2: MOVEI AC,SPWB ; LOAD UP AC WITH P2 STORAGE TABLE ADDRGSS
172 | MOVEI GO,SP2GO ; AND P2 RUN TABLE
173 | JRST SPWPP
174 |
175 | ^SPWP1: MOVEI AC,SPWA ; AC STORAGE FOR P1
176 | MOVEI GO,SPWGO ; APPROPRIATE RUN TABLE
177 | SPWPP: PUSH P,JOB(PID) ;SAVE SO WE CAN RUN SPW UUOS.
178 | SETOM SPWUUF(PID) ; FLAG SPW LEVEL.
179 | HRLI GO,J ; INDEX SPWGO BY JOB NUMBER
180 | MOVEI J,0 ; START AT FRONT
181 | SPWPP3: PSYNC SPWCSC
182 | LDB J,[POINT 6,@GO,5] ; LINK
183 | JUMPN J,SPWPP2 ; DISPATCH IF NON-ZERO
184 | XSYNC SPWCSC
185 | POP P,JOB(PID)
186 | MOVE J,JOB(PID) ; PUT JOB NUMBER UP
187 | MOVE A,JBTADR(J) ; GET PROT-RELOC FOR JOB WE INTERRUPTED
188 | MOVEM A,JOBADR(PID) ;YES.
189 | HLRZM A,USRREL(PID)
190 | SETZM SPWUUF(PID)
191 | JUMPE J,CPOPJ ;DON'T RESTORE PROT-RELOC FOR JOB 0
192 | PUSHJ P,GETPR ;GET JOB'S PROT-RELOC
193 | DATAO APR,TAC ;SET PR
194 | POPJ P, ;END OF LOOP, GO HOME
195 |
196 | SPWPP2: MOVE D,@GO ;GET LATEST COPY OF SPW WORD
197 | TRNE D,-1 ;IS HE BEING FLUSHED?
198 | SKIPL A,JBTST2(J) ;IS THIS JOB RUNNABLE?
199 | JRST SPWPP5 ;NO, EXIT NOW
200 | JUMPN PID,SWPP2B ;JUMP IF P2
201 | TLNN A,SPWST1 ;IS HE SUSPENDED SOMEHOW?
202 | JRST SPWPP4 ;NO, GO RUN HIM
203 | SKIPE SP2GO(J) ;IS HE RUNNING ON P2 TOO?
204 | JRST SPWPP5 ;YES THEN LET ONLY P2 COUNT THE SUSPENSION.
205 | ADDI A,1 ;INCREMENT THE SUSPENSION COUNT.
206 | SWPP2A: HRRM A,JBTST2(J) ;STORE NEW SUSPENSION COUNT.
207 | JRST SPWPP5 ;RELEASE CELLS AND CONTINUE SCAN.
208 |
209 | SWPP2B: TLNN A,SPWST2 ;SUSPENDED ON P2?
210 | JRST SPWPP4 ;NO.RUN THIS ONE.
211 | AOJA A,SWPP2A ;COUNT THE SUSPENSION
212 |
213 | SPWPP9: DPB A,[POINT 4,D,13];UPDATE COUNT
214 | MOVEM D,@GO ;REPLACE IN CONTROL WORD
215 | SPWPP5: XSYNC SPWCSC
216 | JRST SPWPP3
217 | ; HERE, WE KNOW THIS JOB IS RUNABLE. NOW, IS IT TIME TO RUN?
218 |
219 | SPWPP4: LDB A,[POINT 4,D,13] ; PICK UP SPW COUNT
220 | LDB B,[POINT 4,D,17] ; PICK UP SPW TIME
221 | JUMPE B,[JUMPN A,SPWPP9 ;ZERO TICKS HE HAS RUN ONCE.
222 | AOJA A,SPWPP0] ;RUN HIM HIS ONE TIME.
223 | CAIGE A,-1(B) ;WILL IT BE TIME WHEN WE INCREMENT A?
224 | AOJA A,SPWPP9 ;NOT TIME YET. INCREMENT AND REPLACE.
225 | SETZ A, ; YES, ZERO COUNT AND RUN JOB
226 | SPWPP0: DPB A,[POINT 4,D,13]
227 | MOVEM D,@GO
228 | MOVE B,JBTST2(J) ; GET STATUS REGISTER
229 | HLLZS JBTST2(J) ; NOW ZERO ERROR DELAY COUNT
230 | TLNE B,SPWSUS ; SHOULD WE WARN HIM OF AN IMPENDING DELAY?
231 | JRST SPWPP6 ; YES
232 | HRRZ B,B ; COUNT OF TICKS WHILE SUSPENDED.
233 | JRST SPWPP8 ; RUN HIM.
234 | SPWPP6: JUMPE PID,.+2 ; COME HERE IF WE MUST GIVE A WARNING
235 | TLOA B,SPWSU2 ;TURN ON SUSPENSION WARNING FLAG P2
236 | TLO B,SPWSU1 ;TELL JOB A SUSPENSION IS INDICATED P1
237 | MOVEM B,JBTST2(J) ; REPLACE JOB STATUS
238 | MOVNI B,1 ; PUT WARNING IN B
239 | SPWPP8: MOVSI A,SPWNT1 ;TIMEOUT SUPRESSION BIT (P1)
240 | JUMPE PID,.+2
241 | MOVSI A,SPWNT2 ;TIMEOUT SUPRESSION BIT(P2)
242 | TDNN A,JBTST2(J) ;SKIP IF TSB IS ON
243 | MOVEI A,JIFSEC/2 ;TIMEOUT IS HALF A SECOND
244 | HRRZM A,SPWTMO(PID) ;STORE THE TIMEOUT WORD
245 | MOVE A,[JRST 2,@UUO0]
246 | ADDI A,(PID)
247 | MOVEM A,SPWXCT(PID) ;SET UP THE UUO EXIT INSTRUCTION
248 | ;WHICH IS CLOBBERED BY CH3 ON TIMEOUTS
249 | XSYNC SPWCSC
250 | HRRZ A,AC
251 | BLT A,17(AC) ; BLT THEM INTO SPWA OR SPWB
252 | SETZM A(AC) ; AND ZERO OUT ACCUMULATOR A IN CORE
253 | HRRZ 17,D ; GET JOB STARTING ADDRESS
254 | HRLI 17,4000 ; PUT IN IOT USER MODE BIT
255 | PUSHJ P,GETPR ; GET HIS PR
256 | DATAO APR,TAC
257 | MOVE 2,JBTADR(J) ; GET HIS PROTECTION-RELOCATION
258 | TLZ 2,1777 ; ZERO OUT THESE BITS FOR PDP-10
259 | MOVE 1,SPWBUT ; GET SPACEWAR BUTTONS FOR HIM
260 |
261 | MOVN 15,J ;
262 | MOVSI 2,400000
263 | LSH 2,(15)
264 | JUMPN PID,.+2
265 | DATAO PI,2 ;TURN ON MI WITH JOB NUMBER.
266 |
267 | SETOM STIME(J) ;FLAG THAT CORE IMAGE HAS BEEN RUN (I.E. MODIFIED)
268 | MOVE 15,J ; SAVE JOB NUMBER
269 | MOVE 2,JBTADR(J) ; RESTORE TRUE PROT-REL
270 | MOVE 7,JOBRL2(PROG) ; UPPER TOO
271 | MOVE 6,JBTSTS(J)
272 | MOVE 3,B ; GET FLAG REGISTER
273 | MOVEI 4,1
274 | SKIPE PID
275 | MOVEI 4,2
276 | SETZM 5
277 | SKIPN P2NUM
278 | JRST SIXDED
279 | JUMPN PID,SIXTST
280 | SKIPGE PALIVE+P2PID
281 | SETOM 5
282 | JRST 3,@17
283 | SIXTST: SKIPGE PALIVE+P1PID
284 | SIXDED: SETOM 5
285 | JRST 3,@17
286 | ; INTERRUPT LOCATIONS FOR BOTH PROCESSORS
287 |
288 | ^SPWINT:
289 | CONI APR,A
290 | TRNE A,ILM
291 | TLO A,ILMSPW
292 | TRNE A,NXM
293 | TLO A,NXMSPW
294 | TRNE A,POV
295 | TLO A,POVSPW
296 | CONO APR,531110+APRCHN ; CLEAR ANY CONCEIVABLE ERROR
297 | HRR A,APRCHL ; GET LOCATION OF ERROR
298 | MOVEM A,SPWA+A ; SET INTO SAVED ACCUMULATOR
299 | MOVE PID,[P1PID]
300 | JRST 10,SPWUUX ; TREAT AS A UUO
301 |
302 | ^SPWERR:
303 | MOVE J,JOB(PID)
304 | MOVE A,UUOPC(J)
305 | SKIPN PID
306 | HRRZM A,SPWA+A
307 | SKIPE PID
308 | HRRZM A,SPWB+A
309 | ^SPWXIT: ;COME HERE ON DISMIS UUO(SEE US BE SNEAKY)!
310 | MOVE P,SPWA+P
311 | SKIPE PID
312 | MOVE P,SPWB+P
313 | AOBJP P,.+1 ;GET OLD UUOPC (SAVED BY SPWUUO)
314 | POP P,UUOPC(J) ; RESTORE UUO-LEVEL PC WORD
315 | JRST SPWUUX
316 |
317 | ^SP2INT:
318 | CONI APR,A
319 | TRNE A,ILM
320 | TLO A,ILMSPW
321 | TRNE A,NXM
322 | TLO A,NXMSPW
323 | TRNE A,POV
324 | TLO A,POVSPW
325 | TRNE A,CNS
326 | TLO A,CNSSPW
327 | CONO APR,531110+APRCHN ; CLEAR APR ERROR
328 | HRR A,AP2CHL ; GET LOCATION OF ERROR
329 | MOVEM A,SPWB+A
330 | MOVE PID,[P2PID]
331 | JRST 10,SPWUUX
332 |
333 | ^SPWUUO:
334 | ;THE FOLLOWING 2 INST. PREVENT UUO'S FROM SPACEWAR--RPH 12-26-71
335 | ; SKIPL @UUOLOC(PID)
336 | ; JRST SPWUUX
337 | JUMPN PID,SPWUUX ;NO UUO'S ON 6 GODDAMMIT!
338 | MOVE J,J+SPWA ;GET JOB NO. OF SPW JOB.
339 | SKIPE 17,UUOPTR(J) ;MUST CHECK THIS HERE SO WE DON'T DO TESTS ON UUO
340 | JRST SPWUU3
341 | SPWUU1: SKIPE 17,@UUOLOC(PID) ;STOP ON 0
342 | CAMN 17,[CALL] ;OR CALL WITH 0 ADR
343 | JRST SPWUUX
344 | HLRZ 17,17
345 | CAIN 17,() ;OR HALT
346 | JRST SPWUUX
347 | ; SKIPE PID
348 | ; MOVE J,J+SPWB
349 | SPWUU2: MOVEM J,JOB(PID) ;PUT WHERE UUOCON WILL SEE IT.
350 | MOVE PROG,JBTADR(J) ;ALSO RELOCATION.
351 | MOVEM PROG,JOBADR(PID)
352 | HLRZM PROG,USRREL(PID)
353 | MOVE P,SPWA+P ;GET A PDL FOR UUOCON.
354 | ; SKIPE PID
355 | ; MOVE P,SPWB+P
356 | PUSH P,UUOPC(J) ; AND SAVE THE OLD UUO PC WORD
357 | MOVE DAT,UUO0(PID) ; PICK UP RETURN
358 | MOVE UUO,@UUOLOC(PID) ; AND UUO ITSELF
359 | JRST UUOSY1 ;LET UUOCON HANDLE IT.
360 |
361 | SPWUU3: XCTR XR,[SKIPN SPWBLK+1(17)] ;IF SIMULATOR IS ENABLED FOR SPACEWAR,
362 | XCTR XR,[SKIPN SPWBLK+2(17)] ;WE'LL BYPASS THE DISMISSAL TESTS
363 | JRST SPWUU1
364 | JRST SPWUU2
365 |
366 | ^SPTMOE: ;HERE IN EXEC MODE IN CH7 FOR TIME-OUT
367 | MOVEI PID,0 ;ASSUME PDP-10
368 | CONSO APR,MAOFF ;SKIP IF WE ARE THE PDP-10
369 | MOVEI PID,P2PID ;PDP-6
370 | MOVSI A,ILLTMO ;SET TIMEOUT BIT
371 | HRR A,SPWBLO(PID) ;LOOK AT HOW WE WERE SHOT DOWN
372 | SKIPE PID
373 | MOVEM A,SPWB+A ;STORE EVIL BITS
374 | SKIPN PID
375 | MOVEM A,SPWA+A
376 | JRST SPWUUX ;PRETEND UUO
377 | ; WE GET HERE ON ERROR IN SPW MODE JOB OR DISMISS
378 |
379 | ^SPWUUX:
380 | MOVSI 17,SPWA ; RESTORE P1 ACCUMULATORS
381 | SKIPE PID
382 | MOVSI 17,SPWB ; RESTORE P2 ACCUMULATORS
383 | BLT 17,17
384 | JUMPE A,SPWUU0 ; NO ERRORS, SCAN FOR NEXT JOB.
385 | PSYNC SPWCSC
386 | HLLZS @GO ; ERROR, KILL THIS JOB
387 | TLO A,SPWERB ; ADD ERROR BIT TO THOSE ALREADY THERE
388 | MOVEM A,JBTST2(J) ; MOVE IN ERROR BIT
389 | XSYNC SPWCSC
390 | SPWUU0: JRST 2,@[SPWPPB]
391 |
392 | SPWPPB: PSYNC SPWCSC
393 | SKIPN @GO
394 | JRST SPWPPC
395 | LDB A,[POINT 4,@GO,17] ;GET HIS TIME FIELD
396 | JUMPN A,SPWPPC
397 | JUMPN PID,SPWPPD
398 | PUSHJ P,P1REL ;ZERO TICKS. RELEASE P1 SPACEWAR
399 | SKIPE SP2GO(J)
400 | JRST SPWPPC
401 | JRST SPWPPE
402 | SPWPPD: PUSHJ P,P2REL ;ZERO TICKS. RELEASE P2 SPACEWAR
403 | SKIPN SPWGO(J)
404 | SPWPPE: SETZM JBTST2(J) ;ZERO THIS IF NOT SPW ACTIVE ON OTHER P.
405 | SPWPPC: MOVE A,JBTST2(J) ;PICK UP JOB STATUS
406 | JUMPN PID,SPWPPF
407 | MOVSI D,SPWST1 ;P1 SUSPEND BIT
408 | SKIPN SP2GO(J) ;IS THERE SPACEWAR ON P2 ALSO?
409 | MOVSI D,SPWST1!SPWST2 ;NONE ON P2. GET BOTH PROC. SUSP BITS.
410 | TLZE A,SPWSU1 ;HAS WARNING BEEN GIVEN?
411 | TDO A,D ;YES, SUSPEND THIS JOB
412 | TLC A,SPWST1!SPWST2 ;ARE BOTH NOW SUSPENDED?
413 | TLCN A,SPWST1!SPWST2 ;
414 | TLZ A,SPWSUS ;BOTH NOW SUSPENDED, CLEAR SUSPENSION REQ.
415 | MOVEM A,JBTST2(J) ; AND REPLACE JOB STATUS
416 | XSYNC SPWCSC
417 | JRST SPWPP3
418 | SPWPPF: MOVSI D,SPWST2 ;P2 SUSPEND BIT.
419 | SKIPN SPWGO(J)
420 | MOVSI D,SPWST1!SPWST2
421 | TLZE A,SPWSU2 ;HAS SUSPENSION WARNING BEEN GIVEN?
422 | TDO A,D ;YES. SET SUSPENSION.
423 | TLC A,SPWST1!SPWST2 ;ARE BOTH NOW SUSPENDED?
424 | TLCN A,SPWST1!SPWST2 ;
425 | TLZ A,SPWSUS ;BOTH NOW SUSPENDED, CLEAR SUSPENSION REQ.
426 | MOVEM A,JBTST2(J) ;STORE JOB STATUS
427 | XSYNC SPWCSC
428 | JRST SPWPP3
429 | BEND SPWSER
430 |
--------------------------------------------------------------------------------
/sys/J17-1974/sttget.MAC:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00002 PAGES
2 | C REC PAGE DESCRIPTION
3 | C00001 00001
4 | C00002 00002 title STTGET
5 | C00011 ENDMK
6 | C;
7 | title STTGET
8 | subttl Statistics gathering service
9 |
10 | nbufs__3 ; Number of buffers
11 |
12 | INIBYT__(11+1)/2;11 BYTES PER JOB 18 BITS PER BYTE
13 |
14 | ;JOB TABLE POINTERS FOR INTIALIZING STATS
15 | JOBN__400222
16 | JBTSTS__400210
17 | JNA__40000
18 | SWP__2000
19 | JBTADR__400223
20 | JOBQUE__400231
21 | JBTSIN__400307
22 | JBTGLU__400310
23 | SPWGO__400213
24 | SP2GO__400230
25 | JOBNAM__400225
26 | JBTSWP__400212
27 |
28 | DEFINE XD(A,B)
29 |
30 |
31 | ;STAT OP-CODES
32 | XD CSZSTA,000000 ;BYTE(1)0(3)0(8)HIGH ORDER BITS OF CORE SIZE(6)J#
33 | XD CPSSTA,040000 ;BYTE(1)0(3)1(8)HIGH ORDER BITS OF CORE POSITION(6)J#
34 | XD NAMSTA,400000 ;BYTE(1)1(5)0(6)UNUSED(6)J#
35 | ;FOLLOWING TWO 18 BIT BYTES ARE JOBNAME
36 | XD QUESTA,410000 ;BYTE(1)1(5)1(6)QUEUE CODE(6)J#
37 | XD SINSTA,420000 ;BYTE(1)1(5)2(6)JBTSIN BIT #(6)J#
38 | XD SEGSTA,430000 ;BYTE(1)1(5)3(6)SEGMENT #(6)J#
39 | XD SPWSTA,440000 ;BYTE(1)1(5)4(6)0-17:TICS OF SPW, 77:SPW OFF(6)J#
40 | XD GLUSTA,450000 ;BYTE(1)1(5)5(6)JBTGLU COUNT(6)J#
41 | XD LOKSTA,460000 ;BYTE(1)1(5)6(6)1:LOCKING, 0:UNLOCKING(6)J#
42 |
43 | stat__400241 ; Address of statistics table
44 | sttlen__400243 ; Length of such
45 | sttptr__400244 ; Address of statistics pointer
46 | sttnum__400245 ; Address of wrap-around COUNTER
47 |
48 | t__12
49 | t1__13
50 | t2__14
51 | T3_15
52 | T4_16
53 | J_17
54 |
55 | external jobapr
56 |
57 | START: RESET
58 | MOVSI T,376001 ;128K CORE STARTING AT BOTTOM (WRITE PROTECTED)
59 | SETPR2 T, ;SET IT AS UPPER
60 | JRST [ OUTSTR[ASCIZ/SETPR2 FAILED!
61 | /]
62 | EXIT]
63 | SKIPN STAT
64 | JRST [ OUTSTR[ASCIZ/SORRY, THIS SYSTEM DOESN'T HAVE ANY STATISTICS INFO!
65 | /]
66 | EXIT]
67 | init 1,17
68 | sixbit /DSK/
69 | 0
70 | jrst [ outstr [asciz Can't INIT disk
71 | ]
72 | EXIT]
73 | setzm efile+3
74 | hllzs efile+1
75 | setzm efile+2
76 | enter 1,efile
77 | jrst [ outstr [asciz Can't ENTER file
78 | ]
79 | EXIT]
80 | hrrzi t,ints
81 | movem t,jobapr
82 | setzm nbufo
83 | movei t,buff
84 | movem t,iptr
85 | movem t,optr
86 | setzm lose
87 | FOR @! I IN(JBTSTS,JBTADR,JOBQUE,JBTSIN,JBTGLU,SPWGO,SP2GO,JOBNAM,JBTSWP)
88 | < MOVE T,I
89 | ADDI T,400000
90 | HRRM T,$!I
91 | >
92 | SETOM FIRST#
93 | TRYINI: MOVE T,JOBN
94 | SUBI T,1
95 | IMULI T,INIBYT
96 | ADD T,JOBFF^
97 | CORE T,
98 | JRST [ OUTSTR[ASCIZ/CAN'T GET CORE FOR INITIALIZATION!
99 | /]
100 | CALLI 1,12
101 | JRST TRYINI]
102 | MOVE T,JOBFF
103 | SETZM (T)
104 | MOVE T1,T
105 | HRL T,T
106 | ADDI T,1
107 | MOVE T1,JOBN
108 | SUBI T1,1
109 | IMULI T1,INIBYT
110 | ADD T1,JOBFF
111 | BLT T,(T1)
112 | PJOB T1,
113 | MOVEM T1,JOB#
114 | HRLZM T1,@JOBFF
115 | LOCK T,
116 | movei t2,1
117 | INTENB T2,
118 | IWKMSK [1]
119 | clkint 1,1 ;EVERY TIC ON PDP-10
120 | IWAIT ;WAIT FOR INITIALIZATION TO FINISH
121 | MOVN T,JOBN
122 | ADDI T,1
123 | IMULI T,INIBYT
124 | SUBI T,1
125 | HRLZ T,T
126 | HRR T,JOBFF
127 | SUBI T,1
128 | SETZ T1,
129 | OUTPUT 1,T
130 | loop: INCHRS T
131 | JRST LOOP0
132 | EXIT
133 |
134 | LOOP0: MTAPE 1,['GODMOD'
135 | 17] ;MAKE SURE FILE IS UPDATED
136 | IWAIT
137 | loop1: skipg t,nbufo
138 | jrst loop
139 | sos nbufo
140 | caile t,nbufs
141 | jrst [ outchr ["X"]
142 | output 1,[iowd 200,mones0]
143 | jrst loop2]
144 | hrrz t,optr
145 | subi t,1
146 | hrrm t,oiowd
147 | output 1,oiowd
148 | loop2: movei t,200
149 | addb t,optr
150 | caige t,buff+nbufs*200
151 | jrst loop1
152 | movei t,buff
153 | movem t,optr
154 | jrst loop1
155 |
156 | INTS: SKIPN FIRST
157 | JRST INTS1
158 | SETZM FIRST
159 | MOVE T2,JOBFF
160 | HRLI T2,();SKIP OVER OUR JOB #
161 | MOVEI J,1
162 | INI0:
163 | $JBTSTS:MOVE T1,JBTSTS(J)
164 | CAME J,JOB ;SKIP US
165 | TLNN T1,JNA
166 | JRST INI1
167 | TLNE T1,SWP
168 | TDZA T,T
169 | $JBTADR:HRRZ T,JBTADR(J)
170 | LSH T,-4
171 | TRO T,CPSSTA(J)
172 | IDPB T,T2
173 | HLRZ T,@$JBTADR
174 | LSH T,-=10
175 | ADDI T,1
176 | TLNE T1,SWP
177 | LDB T,$JBTSWP
178 | LSH T,6
179 | TRO T,CSZSTA(J)
180 | IDPB T,T2
181 | $JBTSIN:HLLZ T,JBTSIN(J)
182 | JRST INI2
183 | $JBTSWP:POINT 8,JBTSWP(J),35 ;IMGIN
184 |
185 | INI3: MOVN T3,T1
186 | MOVSI T4,400000
187 | LSH T4,(T3)
188 | TDZ T,T4
189 | LSH T1,6
190 | TRO T1,SINSTA(J)
191 | IDPB T1,T2
192 | INI2: JFFO T,INI3
193 | $JBTGLU:MOVE T,JBTGLU(J)
194 | ANDI T,77
195 | LSH T,6
196 | TRO T,GLUSTA(J)
197 | IDPB T,T2
198 | $SPWGO: SKIPN SPWGO(J)
199 | JRST INI4
200 | LDB T,[POINT 12,@$SPWGO,23]
201 | ANDI T,7700
202 | TRO T,SPWSTA(J)
203 | IDPB T,T2
204 | INI4:
205 | $SP2GO: SKIPN SP2GO(J)
206 | JRST INI5
207 | LDB T,[POINT 12,@$SP2GO,23]
208 | ANDI T,7700
209 | TRO T,SPWSTA+4000(J)
210 | INI5: HRRZ T,@$JBTSTS
211 | ANDI T,77
212 | LSH T,6
213 | TRO T,SEGSTA(J)
214 | IDPB T,T2
215 | MOVEI T,NAMSTA(J)
216 | IDPB T,T2
217 | $JOBNAM:MOVS T,JOBNAM(J)
218 | IDPB T,T2
219 | HLRZ T,T
220 | IDPB T,T2
221 | $JOBQUE:MOVM T,JOBQUE(J)
222 | ANDI T,77
223 | LSH T,6
224 | TRO T,QUESTA(J)
225 | IDPB T,T2
226 | INI1: CAMGE J,JOBN
227 | AOJA J,INI0
228 | ;INIT POINTERS
229 | move t,sttptr
230 | move t,400000(t)
231 | hrrzi t,1(t)
232 | sub t,stat
233 | ori t,177
234 | subi t,177
235 | add t,stat
236 | movem t,sttpt
237 | addi t,200
238 | move t1,stat
239 | add t1,sttlen
240 | movem t1,sttend
241 | setzm sttn
242 | camge t,t1
243 | jrst ints4
244 | aos sttn
245 | move t,stat
246 | ints4: movem t,sttyet
247 | move t,sttnum
248 | move t,400000(t)
249 | addm t,sttn
250 | ;INIT DONE
251 | movei t,1
252 | INTGEN T, ;TELL HIM TO GO
253 | DISMIS
254 |
255 | ints1: move t,sttptr
256 | hrrz t,400000(t)
257 | addi t,1
258 | camge t,sttyet
259 | DISMIS
260 | hrr t,sttnum
261 | move t,400000(t)
262 | camge t,sttn
263 | DISMIS
264 | came t,sttn
265 | aos lose
266 | hrr t,sttpt
267 | HRLI T,400000(T)
268 | hrr t,iptr
269 | hrrz t1,iptr
270 | addi t1,177
271 | blt t,(t1)
272 | movei t,200
273 | addb t,iptr
274 | caige t,buff+nbufs*200
275 | jrst ints2
276 | movei t,buff
277 | movem t,iptr
278 | ints2: aos nbufo
279 | movei t,1
280 | INTGEN T,
281 | move t,sttyet
282 | movem t,sttpt
283 | addi t,200
284 | camge t,sttend
285 | jrst ints3
286 | aos sttn
287 | move t,stat
288 | ints3: movem t,sttyet
289 | jrst ints1
290 |
291 | ; Data storage . . .
292 |
293 | mones: -1
294 | -1
295 | -1
296 | -1
297 | lose: 0
298 | sttend: 0 ; First address beyond table
299 |
300 | sttn: 0 ; Trigger value of wrap-around pointer
301 | sttpt: 0 ; Last pointer to 200-wd block
302 | sttyet: 0 ; Place where pointer has to be to trigger transfer of 200-wds
303 |
304 | nbufo: 0 ; Counter of number of full buffers
305 | iptr: buff ; Load-up pointer
306 | optr: buff ; Empty pointer
307 | buff: block 200*nbufs
308 | oiowd: iowd 200,buff
309 | 0
310 |
311 | efile: sixbit /STATS/
312 | sixbit /DAT/
313 | 0
314 | 0
315 |
316 | end start
317 |
--------------------------------------------------------------------------------
/sys/J17-1974/sttint.sai:
--------------------------------------------------------------------------------
1 | COMMENT VALID 00003 PAGES
2 | C REC PAGE DESCRIPTION
3 | C00001 00001
4 | C00002 00002 BEGIN "STATISTICS INTERPRETER"
5 | C00004 00003 FOR I_0 STEP 1 UNTIL '77 DO JOBS[QUEUE,I]_-1
6 | C00009 ENDMK
7 | C;
8 | BEGIN "STATISTICS INTERPRETER"
9 | EXTERNAL INTEGER SKIP;
10 | INTEGER I,J,K,L,OP,EOF,VAL,OTHERHALF,OURJOB,LINES;
11 | LABEL SKIPOURJOB;
12 | STRING S1,S2,S3,FILE;
13 | DEFINE CRLF="'15&'12",TAB="'11",MAXLINES="52";
14 | DEFINE NAME="1",SIZE="2",POSITION="3",QUEUE="4",JBTSIN="5",SEGMENT="6",
15 | GLUE="7",LOCK="8",SPW10="9",SPW6="10",MAXVAL="SPW6";
16 | DEFINE NQUEUES="'234",QNAMS="'235";
17 | INTEGER ARRAY JOBS[1:MAXVAL,0:'77];
18 | STRING ARRAY QNAMS[-1:'77];
19 | PRELOADWITH "INT",
20 | "PHANTOM",
21 | "COMMAND",
22 | "JOBRD",
23 | "SPW",
24 | ['37-4]"UNDEF";
25 | STRING ARRAY SINNAMES[0:'37];
26 | DEFINE TITLE=
27 | """JOB # OP VALUE SIZE(K) POS QUEUE SEG # JOBNAME JBTSIN JBTGLU SPW10 SPW6""";
28 | BOOLEAN HALF,DIRDEV,SPECIAL;
29 | INTEGER PROCEDURE WORD;
30 | IF HALF THEN BEGIN
31 | HALF_FALSE;
32 | RETURN(OTHERHALF);
33 | END
34 | ELSE BEGIN
35 | INTEGER TEMP;
36 | HALF_TRUE;
37 | TEMP_WORDIN(0);
38 | OTHERHALF_TEMP LAND '777777;
39 | RETURN(TEMP LSH -18);
40 | END;
41 | PROCEDURE COUNTLINE;
42 | IF (LINES_LINES-1)<0 THEN BEGIN
43 | OUT(1,'14&TITLE&CRLF&CRLF);
44 | LINES_MAXLINES-3;
45 | END;
46 | FOR I_0 STEP 1 UNTIL '77 DO JOBS[QUEUE,I]_-1;
47 | I_CALL(NQUEUES,"PEEK");
48 | J_CALL(QNAMS,"PEEK");
49 | FOR K_0 STEP 1 UNTIL I DO QNAMS[K]_CVSTR(CALL(J+K,"PEEK"));
50 | FOR I_I STEP 1 UNTIL '77 DO QNAMS[I]_"UNDEF";
51 | OPEN(0,"DSK",'10,2,0,0,0,EOF);
52 | LOOKUP(0,"STATS.DAT",EOF);
53 | IF EOF THEN USERERR(0,0,"Can't find STATS.DAT");
54 | HALF_FALSE;
55 | S1_(IF CALL(CVSIX("LST"),"DEVCHR") THEN "LST" ELSE "DSK");
56 | OPEN(1,S1,0,0,2,0,0,0);
57 | DIRDEV_CALL(CVSIX(S1),"DEVCHR") LAND '4000000;
58 | IF DIRDEV THEN BEGIN
59 | OUTSTR("Output file : ");
60 | IF EQU(NULL,FILE_INCHWL) THEN FILE_"STATS.LST";
61 | IF SKIP='175 THEN BEGIN
62 | OUTSTR(CRLF);
63 | SPECIAL_TRUE
64 | END ELSE SPECIAL_FALSE;
65 | ENTER(1,FILE,EOF);
66 | IF EOF THEN USERERR(0,0,"Can't enter "&FILE);
67 | PTOSTR(0,"SPOOL "&FILE);
68 | END;
69 | OUT(1,TITLE&CRLF&CRLF);
70 | LINES_MAXLINES-2;
71 | OURJOB_WORD;
72 | WHILE TRUE DO BEGIN
73 | SKIPOURJOB: VAL_WORD;
74 | IF EOF THEN DONE;
75 | IF VAL=0 THEN GO TO SKIPOURJOB;
76 | J_VAL LAND '77;
77 | IF VAL LAND '400000 THEN BEGIN
78 | OP_(VAL LSH -12)LAND '37;
79 | VAL_(VAL LSH -6)LAND '77;
80 | END
81 | ELSE BEGIN
82 | OP_-1-(VAL LSH -14);
83 | VAL_(VAL LSH -6)LAND '377;
84 | END;
85 | S1_TAB&CVS(JOBS[SIZE,J])&TAB&
86 | (IF JOBS[SIZE,J] (I_JOBS[POSITION,J])=0 THEN "SWAPPED" ELSE CVOS(I))&
87 | TAB&QNAMS[JOBS[QUEUE,J]]&
88 | TAB&CVS(JOBS[SEGMENT,J])&TAB&CVXSTR(JOBS[NAME,J])&
89 | TAB&CVOS(JOBS[JBTSIN,J])&TAB&CVS(JOBS[GLUE,J])&
90 | TAB&CVOS(JOBS[SPW10,J])&TAB&CVOS(JOBS[SPW6,J])&CRLF;
91 | IF (-3