1 IFNDEF T30,<T30=0>;ASSUME TYPE 30 DISPLAY IF T30 IS UNDEFINED
\r
3 TITLE DIST30 - TYPE 30 DISPLAY SERVICE ROUTINES
\r
8 TITLE DIS340 - TYPE 340 DISPLAY SERVICE ROUTINES
\r
12 SUBTTL R. GRUEN/RCC TS 03 JUN 69 V004
\r
14 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP
\r
15 ; THESE ROUTINES HANDLE INTERRUPTS FROM THE DISPLAY DATA
\r
16 ; CHANNEL. THEY SEARCH THE COMMAND POINTER LIST SUPPLIED
\r
17 ; BY THE USER AND OUTPUT SECTIONS OF DATA AS SPECIFIED THEREIN.
\r
18 ; ALL OUTPUT IS DONE USING THE BLKO COMMAND.
\r
20 ; THE FORMAT OF THE COMMAND POINTE RLIST IS AS FOLLOWS:
\r
22 ; RH=0 END OF COMMAND POINTER LIST
\r
24 ; RH=ADR LH=0 ADR IS ADDRESS OF THE NEXT SECTION OF THE
\r
25 ; COMMAND POINTER LIST
\r
26 ; RH=L-1 LH=-N OUTPUT TO DISPLAY THE N WORDS OF COMMANDS
\r
27 ; BEGINNING AT LOCATION L.
\r
29 ; NOTE THAT THE CHECK FOR END OF LIST IS MADE FIRST.
\r
31 ; ALL ADDRESS ARE CHECKED FOR VALIDITY (I.E.. THEY MUST
\r
32 ; BE WITHIN USER ARE) BEFORE ANY MEM REF IS MAD.
\r
34 ;IF THE T30 SWITCH = 1 THIS IS THE ROUTINE FOR A DEC
\r
35 ;TYPE 30 DISPLAY WITH A TYPE 348 INTERFACE.
\r
36 ;OTHERWISE IT IS THE ROUTINE FOR A DEC TYPE 340.
\r
40 INTERNAL FTCHECK,FTMONP
\r
41 IFN FTCHECK+FTMONP,<
\r
42 EXTERNAL DISDDB,DISIOS,PENLOC,DISNT,DISBKO,DISHI,DISONE,DISAV,OFFDIS
\r
43 EXTERNAL DISAV1,DISREL,DISCON,DISNXT
\r
46 IFE FTCHECK+FTMONP,<
\r
47 ;DIS DEVICE DATA BLOCK
\r
49 DISDDB: SIXBIT /DIS/
\r
53 XWD DVDIS+DVOUT+DVIN+DVLNG,2000
\r
72 XP PENDDR,0 ;TO SATISFY A REQUEST IN COMMON.
\r
73 ; THERE IS NOT REALLY A PEN DDB.
\r
77 DIS=134 ;TYPE 30 DISPLAY DEVICE NUMBER
\r
79 DISTAR=100 ;CLOCK FINISHED BEFORE PICTURE
\r
80 DISWAT=200 ;PICTURE FINISHED BEFORE CLOCK
\r
81 DISCKR=400 ;CLOCK REQUEST IN CLOCK QUEU
\r
95 EXTERN DISSAV,DISBLK,DISJSR,PENSAV
\r
96 EXTERN DISCHN,PENCHN
\r
97 EXTERN DISCHL,PENCHL
\r
98 EXTERN DISSAV,DISRET
\r
99 EXTERN DISPON,DISPOF
\r
101 EXTERN ADRERR,SETIOD
\r
102 EXTERN PION,PIOFF,CLOCK
\r
103 EXTERN CPOPJ1,UERROR,URREL,STOTAC,JOB,JBTSTS,JBTADR,PJOBN
\r
104 IFE T30,< EXTERN ONDIS,NONDIS>
\r
106 INTERN PENINT,DISINT,DISFIN
\r
115 \f JRST DISINI ;INITIALIZATION
\r
116 POPJ PDP, ;PRINT ERROR AND STOP JOB
\r
117 DISDSP: JRST DISSTP ;RELEASE
\r
119 JSP DAT,UERROR ;OUTPUT
\r
120 JSP DAT,UERROR ;INPUT
\r
122 JRST CPOPJ1 ;LOOKUP
\r
123 JRST DISOUT ;DUMP OUPUT (THAT'S US)
\r
124 JRST DISIN ;DUMP INPUT (AS IN PEN)
\r
128 JRST CPOPJ1 ;RENAME
\r
129 POPJ PDP, ;CLOSE INPUT
\r
130 POPJ PDP, ;DIRECTORY CLEAR
\r
132 \f;DISINI IS CALLED FOR RELEASE, CLOSE, AND SUNDRY ILLEGAL CONDITIONS
\r
133 ; WHICH WANT TO TURN THE DISPLAY OFF. IT FIRST CONVINCES
\r
134 ; THE INTERRUPT LEVEL ROUTINES TO GO BACK TO SLEEP AND THEN
\r
135 ; TELLS THE MONITOR THAT THE DEVICE IS INACTIVE, LASTLY,
\r
136 ; IT TUERNS OFF THE INTERRUPT ASSIGNMENTS OF THE DISPLAY
\r
137 ; AND THE PI CHANNEL ASSOCIATED WITH THE DIS BLKO. IT RETURNS
\r
138 ; WITH A POPJ , SOMETIMES TO ITS CALLING ROUTINE AND SOMETIMES
\r
139 ; TO THE CHANNLE'S DISMISS ROUTINE, THE ADDRESS OF WHICH
\r
140 ; WAS CLEVERLY PLACED ON THE PUSHDOWN LIST WHEN AC'S
\r
141 ; WERE SAVED. THUS IT CAN BE CALLED WITH EITHER A
\r
142 ; PUSHJ PDP,DISINI OR A JRST DISINI.
\r
146 CONO DIS,100 ;PARAMETER MODE>
\r
148 MOVEI TAC,PENCHN ;SET UP CONO WORD WITH PROPER
\r
149 ASH TAC,3 ; CHANNEL ASSIGNMENTS
\r
151 TRO TAC,4000 ;SET DISPLAY READY BIT IN CONO WORD
\r
155 DISSTP: MOVE ITEM,JOB ;CLEAR NSHF SO JOB CAN BE SHUFFLED
\r
156 MOVSI TAC,NSHF+NSWP ;CLEAR NSWP SO JOB CAN BE SWAPPED(IN CASE THIS IS A SWAPPING SYSTEM
\r
157 ANDCAM TAC,JBTSTS(ITEM)
\r
159 DISIN1: SETOM PENLOC
\r
160 MOVSI TAC,DISWAT+DISUUI ;IGNORE FURTHER TRAPS
\r
161 HRRI TAC,IOACT ;INDICATED DEVICE INACTIVE
\r
162 ANDCAM TAC,DISIOS ;INTO DEVICE DATA BLOCK
\r
163 DISOFF: CONO DIS,OFFDIS ;REMOVE THE DISPLAY'S CHANNE; ASSIGNMENTS
\r
164 HLLZS PENINT ;DON'T EXPECT ANY ON LITE PEN
\r
165 CONO PI,DISPOF ;TURN OFF DISPLAY'S BLKO CHANNEL
\r
168 DISINT: JRST DISFIN
\r
171 ;PENINT RECIEVES CONTROL ON INTERRUPTS ON THE DISPLAY NON-DATA
\r
172 ; CHANNEL (SPECIAL CHANNEL). IT DECIDES IF THE INTERRUPT
\r
173 ; WAS VALID, AND IF SO, TRANSFERS CONTROL TO AN APPROPRIATE ROUTINE
\r
176 PENINT: CONSO DIS,0 ;CHECK FOR CONI FLAGS
\r
177 JRST PENINT ;TO OTHER DEVICES ON SAME CHANNEL
\r
178 CONSZ DIS,400 ;STOP FLAG
\r
180 CONSZ DIS,2000 ;PEN FLAG?
\r
181 PENFLG: DATAI DIS,PENLOC ;STORE CURRENT LITE PEN LOC
\r
182 CONO DIS,NONDIS ;CLEAR FLAG
\r
183 JEN @PENCHL ;DISMISS INTERRUPT
\r
185 ;STPFLG SERVICES STOP FLAGS (DISPLAY PROGRAMMED) BY DOING
\r
186 ; A CLOSE ON THE DISPLAY
\r
188 STPFLG: JSR PENSAV ;STOP FLAG, SAVE AC'S AND SETUP RETURN
\r
189 JRST DISDSP+DCL ;DO A CLOSE AND DISMISS INTERRUPT
\r
193 PENINT: CONSO DIS,0 ;CHECK FOR CONI FLAGS
\r
194 JRST PENINT ;TO OTHER DEVICES ON SAME CHANNEL
\r
195 DATAI DIS,PENLOC ;CLEAR PEN INTERRUPT
\r
196 MOVEM TAC,PENLOC ;SAVE AC TAC
\r
197 MOVE TAC,DISBKO ;GET ABSOLUTE ADR OF NEXT DATA ELEMENT
\r
198 SUB TAC,DISREL ;MAKE ADDRESS RELATIVE
\r
199 HRRZS TAC ;CLEAR OUT GARBAGE IN THE LEFT HALF
\r
200 EXCH TAC,PENLOC ;SAVE ADR IN PENLOC AND RESTORE TAC
\r
201 JEN @PENCHL ;DISMIS THE INTERRUPT
\r
203 \f;DISNXT IS CALLED WITH A JSR DISNXT, IT SETS UP THE NEXT
\r
204 ; POINTER FOR THE DISPLAY'S BLKO BY INTERPRETING A
\r
205 ; COMMAND LIST SUPPLIED BY THE USER, THIS COMMAND LIST
\r
206 ; IS DESCRIBED AT THE BEGINNING OF THE PROGRAM. IF THE
\r
207 ; DATA TO BE TRANSMITTED TO THE DISPLAY WOULD VIOLATE THE
\r
208 ; MEMORY PROTECTION, THEN THE ROUTINE RETURNS TO THE
\r
209 ; CALLING LOCATION +1. OTHERWISE, IF THERE
\r
210 ; IS NO FURRTHER DATA TO BE OUTPUT (AS INDICATED BY THE
\r
211 ; USER'S COMMAND LIST) THE ROUTINE RETURNS TO THE CALLING
\r
212 ; LOCATION +2. OTHERWISE, THE NEXT POINTER FOR THE BLKO
\r
213 ; IS PLACED IN DISBLKO AND THE ROUTINE RETURNS TO THE CALLING
\r
216 IFE FTCHECK+FTMONP,<
\r
217 DISNXT: 0 ;JSR AT INTERRUPT OF UUO LEVELS
\r
219 DISNX1: AOS TAC,DISPNT ;GET NEXT POINTER FROM LIST
\r
220 ILUP: HRRZM TAC,DISPNT ;UPDATE POINTER POINTER
\r
222 MOVE TAC,@DISREL ;GET NEXT WORD IN POINTER LIST
\r
223 MOVEM TAC,DISBKO ;PLACE IN BLOK POINTER
\r
224 HLROM TAC,DISAV1 ;GET NEGATIVE WORD COUNT(MAKE LH NEG. TOO)
\r
226 JUMPE TAC,EXIT1 ;END OF COMMAND LIST?
\r
227 TRNN TAC,-1 ;INTENSITY?
\r
230 TRNN TAC,-1 ;END OF COMMAND LIST?
\r
232 TLZN TAC,-1 ;NO. POINTER TO NEW LIST?
\r
234 CAIL TAC,JOBPFI ;NO. ADDRESS IN BOUNDS?
\r
237 SUB TAC,DISAV1 ;YES. ADR. OF LAST WORD IN BLOCK.
\r
239 HRRZ TAC,DISREL ;FORM ABSOLUTE ADDR
\r
240 ADDM TAC,DISBKO ;IN THE BLKO POINTER WORD
\r
241 AOS DISNXT ;RETURN 2,4
\r
243 EXIT2: MOVE TAC,DISAV
\r
244 CONO DIS,@DISCON ;SET UP DISPLAY STATUS WORD
\r
245 JRST 2,@DISNXT ;...
\r
248 INTCHK: MOVSS TAC ;PLACE INTENSITY IN CONO WORD
\r
250 JRST DISNX1 ;GET NEXT POINTER
\r
251 INTPNT: POINT 3,DISCON,29>
\r
252 \f;DISFIN RECEIVES CONTROL WHEN THE DISPLAY'S BLKO POINTER REACHES
\r
253 ; ZERO. IT SAVES THE TWO AC'S WHICH DISNXT USES AND
\r
254 ; DOES A JRST TO DISNXT. ON A NORMAL RETURN IT RESTORES THE
\r
255 ; AC'S AND DISMISSES THE INTERPUT. ON A "NO MORE DATA"
\r
256 ; RETURN IT TRANSFERS CONTROL TO OVT2 FOR FURTHER
\r
257 ; DECISION AS TO WHETHER OR NOT TO CONTINUE DISPLAYING.
\r
259 DISFIN: MOVEM TAC,DISAV ;SAVE AC'S
\r
260 JSR DISNXT ;SETUP NEXT BLKO POINTER
\r
262 JRST DVT2 ;RETURN HERE IF NO NEXT POINTER
\r
263 JEN @DISCHL ;LET THE SCOPE DO THE REST
\r
265 ;DVT2 RECIVES CONTROL AT INTERRUPT LEVEL WHEN THE COMMAND LIST
\r
266 ; (SUPPLIED BY THE USER) RUNS OUT. IT SAVES THE AC'S FOR
\r
267 ; THIS CHANNEL AND IN THE PROCESS ENABLES REUTRNS BY POPJ
\r
268 ; AND SIMILAR GOOD THINGS SINCE IT ALSO STORES THE PC FROM
\r
269 ; THE JSR IN THE GENERAL PC LOCATION FOR THIS CHANNEL
\r
270 ; IF THE DISPLAY IS OFF. IT DOES NOT RESTART IT.
\r
271 ; IT CHECKS TO SEE IF THE CLOCK HAS RUN OUT BEFORE THE PICTURE;
\r
272 ; IF SO, IT CALLS DISBEG TO RESTART THE DISPLAY WITH A NEW
\r
273 ; COMMAND LIST. IT TURNS OFF THE IO ACTIVE BIT WHICH WAS
\r
274 ; TURNED ON BY THE OUTPUT ROUTINE; THIS INSURES THAT ANY
\r
275 ; OUTPUT COMMAND WILL DISPLAY AT LEAST ONE PICTURE. IF
\r
276 ; THE JOB WAS IN AN IO-WAIT, IT IS RELEASED.
\r
278 DVT2: JSR DISSAV ;ASK EXEC TO SAVE AC'S
\r
279 MOVEI DEVDAT,DISDDB ;SETUP ACS
\r
284 MOVSI IOS,DISWAT ;INDICATE PICTURES FINISHED
\r
285 IORB IOS,DISIOS ;...
\r
286 TLON IOS,DISUUI ;RESUME DISPLAY, NEW UUO.
\r
287 JRST DVT6 ;YES, STAY IN IO WAIT
\r
288 TDNE TAC,JBTSTS(ITEM) ;DOES SYSTEM WANT TO SHUFFLE THIS JOB?>
\r
290 TLNE IOS,DISTAR ;HAS CLOCK TRIGGERED?
\r
291 PUSHJ PDP,DISBEG ;YES, RESTART DISPLAY
\r
293 DVT4: TLNE IOS,DISTAR ;DID CLOCK FINISH BEFORE PICTURE?
\r
294 PUSHJ PDP,CLKREQ ;YES, PUT IN CLOCK REQUEST.
\r
295 DVT5: ANDCAM DAT,JBTSTS(ITEM) ;TURN OFF NSHF SO JOB CAN BE SHUFFLED
\r
296 DVT3: MOVE IOS,DISIOS ;BIT FIDDLING TIME
\r
297 TRZ IOS,IOACT ;SIGNAL DISPLAY CAN BE CLOSED
\r
298 TLZE IOS,IOW ;IS DISPLAY CAUSING AN IO-WAIT?
\r
299 PUSHJ PDP,SETIOD ;UNWAIT THE JOB
\r
300 MOVEM IOS,DISIOS ;RESTORE IO CONTROL WORD
\r
301 JRST DISRET ;RESTORE AC'S AND DISMISS
\r
302 DVT6: MOVEM IOS,DISIOS
\r
303 PUSHJ PDP,DISBEG ;START NEW COMMAND LIST
\r
305 \f;DISREG IS CALLED WITH A PUSHJ PDP,DISBEG, IT DISABLES THE
\r
306 ; DISPLAY ITSELF (BY USING DISOFF) AND ALSO DISABLES THE
\r
307 ; CLOK RESTART AND RESETS THE POINTER TO THE USER'S
\r
308 ; COMMAND LIST TO THAT SPECIFIED ON THE LAST OUTPUT
\r
309 ; MINUS ONE. IT ASKES DISNXT TO SET UP THE NEXT BLKO POINTER
\r
310 ; IF DISNXT IS UNSUCCESSFUL (I.E., IF THE USER COMMAND LIST
\r
311 ; IS NULL), THEN THE ROUTINE DOES A CLOSE. OTHERWISE, A
\r
312 ; REQUEST IS ENTERED FOR A CLOCK INTERRUPT AT THE END OF
\r
313 ; AT MOST TWO JIFFIES. THIS CLOCK QUEUE REQUEST IS ENTERED
\r
314 ; ONLY IF THERE IS NONE ALREADY IN THE QUEUE. THE PI
\r
315 ; CHANNELS FOR THE DISPLAY ARE TURNED ON AGAIN AND THE
\r
316 ; DISPLAY IS INITIALIZED BY A CONO. IT SHOULD THEN REQUEST
\r
317 ; DATA AS SOON AS THE PI CHANNEL FOR THE BLKO IS TURNED ON.
\r
318 ; IT TURNS THIS CHANNEL ON AND RETURNS TO ITS CALLER.
\r
320 DISBEG: MOVSI IOS,DISTAR+DISWAT ;INDICATE FRESH DISPLAY
\r
321 ANDCAM IOS,DISIOS ;...
\r
322 HRRZ TAC1,DISONE ;GET POINTER LIST ADDR (-1)
\r
323 HRRZM TAC1,DISPNT ;RESET POINTER POINTER WITH IT
\r
324 JSR DISNXT ;ASK FOR FIRST WORD FOR BLKO
\r
326 JRST DISSTP ;NULL LIST, CLOSE
\r
327 PUSHJ PDP,CLKREQ ;ENTER CLOCK QUEUE REQUEST
\r
328 CONO DIS,@DISCON ;INITIALIZE THE DISPLAY
\r
329 MOVEI TAC,PENON ;ALLOW SPECIAL PI INTERRUPTS
\r
330 HRRM TAC,PENINT ;...
\r
331 CONO PI,DISPON ;ALLOW BLKO INTERRUPTS
\r
334 CLKREQ: MOVSI IOS,DISCKR ;IF NO CLOCK INTERRUPT REQUESTED
\r
335 MOVE TAC,CLOKRT ;RESET TIMER
\r
336 CONO PI,PIOFF ;INHIBIT INTERRUPTS
\r
337 TDON IOS,DISIOS ;ENTER ONLY A SINGLE CLOCK REQUEST
\r
338 IDPB TAC,CLOCK ;PLACE REUQEST IN QUEUE
\r
339 IORM IOS,DISIOS ;PROTECT AGAINST A DUPLICATE REQUEST
\r
340 CONO PI,PION ;UNINHIBIT INTERRUPTS
\r
343 CLOKRT: XWD CLOK,2 ;CONTROL FOR CLOCK QUEUE: 2 JIFFIES
\r
345 \f;CLOK IS CALLED AT THE CLOCK LEVEL IN RESPONSE TO A REQUEST
\r
346 ; IN THE CLOCK QUEUE. A BIT IS SET TO INDICATE THAT THE
\r
347 ; CLOCL PERIOD HAS ELAPSED. IF THE DISPLAY IS STILL IN
\r
348 ; PROGRESS, CLOK RETURNS AT THIS POINT. OTHERWISE, CLOK
\r
349 ; GOES TO DISBEG TO START UP THE DISPLAY. DISBEG RETURNS
\r
352 CLOK: MOVSI IOS,DISCKR ;INDICATE CLOCK REQUEST SERVICED
\r
353 ANDCAB IOS,DISIOS ;...
\r
355 MOVSI IOS,DISTAR ;ASK DISPLAY TO RESTART
\r
356 IORB IOS,DISIOS ;...
\r
357 TLNN IOS,DISWAT ;HAS DISPLAY FINISHED?
\r
358 POPJ PDP, ;NO. WIAT FOR IT TO DO SO
\r
359 MOVEI DEVDAT,DISDDB
\r
362 TDNE TAC,JBTSTS(ITEM) ;IS SHUFFLE LOCKED OUT?
\r
363 JRST DISBEG ;YES, RESTART DISPLAY AND RETURN
\r
364 IORM TAC,JBTSTS(ITEM) ;NO. LOCK IT OUT.
\r
365 MOVE TAC,JBTADR(ITEM) ;RESET DISHI AND DISREL AFTER SHUFFLING
\r
368 JRST DISBEG ;RESART DISPLAY AND RETURN
\r
370 ;ADRER SERVICES PROTECTION VIOLATIONS DISCOVERED BY DISNXT.
\r
371 ; IT DOES A CLOSE AND THEN CALLS THE MONITOR'S ERROR PRINTING
\r
372 ; ROUTINES TO INFORM THE USER.
\r
374 ADRER: JSR DISSAV ;SAVE AC'S AGAIN
\r
375 ADRER1: PUSHJ PDP,DISDSP+DCL ;DO A CLOSE
\r
376 MOVEI DEVDAT,DISDDB ;TELL ERROR ROUTINE WHO'S UNHAPPY
\r
377 JRST ADRERR ;GO GRIPE
\r
378 ;DISIN HANDLES LITE PEN UUO (INPUT) IN A RUDIMENTARY FASHION
\r
379 ; BY RETURNING (TO THE ADDR SPECIFIED BY THE ADDR FIELD
\r
380 ; OF THE INPUT UUO) THE LAST PEN COORIDNATES SEEN,
\r
383 EXCH TAC,PENLOC ;GET LATEST COORDINATES,
\r
384 JRST STOTAC ;STORE AND RETURN
\r
385 \f;DISOUT DOES THE WORK OF THE OUTPUT UUO. IT SETS A BIT TO
\r
386 ; INDICATE THAT THE DEVICE IS ACTIVE AND INHIBITS
\r
387 ; INTERUPTS WHICH MAY STILL BE IN PROGRESS. SINCE THE
\r
388 ; MONITOR CALLS WSYNCE BEFORE COMING HERE. THE USER IS
\r
389 ; GUARANTEED AT LEAST ONE PICTURE/OUTPUT. THE USERS MEMORY
\r
390 ; BOUNDS ARE STORED FOR QUICK USE AT INTERRUPT LEVEL W/0
\r
391 ; SAVING AC'S. THE LOCATION OF THE COMMAND LIST (-1) IS
\r
392 ; STORED FOR USE IN SETTING UP BLKO POINTERS. THE PI
\r
393 ; LOCATIONS (40 + 2J) ARE INITIALIZED WITH A BLKO IN
\r
394 ; THE EVEN LOCATIONS AND A JSR TO DISFIN IN THE ODD LOCATION,
\r
395 ; THE NON-DATA CHANNEL CONSO IS SETUP TO BELIEVE IN THE
\r
396 ; A POPJ PDP, IT RETURNS ON BEHALF OF THE OUTPUT UUO.
\r
398 DISOUT: TLO IOS,IO+DISWAT ;INDICATE OUTPUT; REQUEST START UP
\r
399 TRO IOS,IOACT ;INDICATE DEVICE ACTIVE
\r
400 SUBI UUO,1 ;ALLOW FOR INCREMENT AT INTERRUPT
\r
401 MOVE TAC,BLKLIT ;FEEDS WORDS TO THE DISPLAY
\r
402 MOVEM TAC,DISBLK ;FROM EVEN NUMBERED INTERRUPT LOC
\r
403 MOVE TAC,JSRLIT ;SERVICE THE END OF BLKO
\r
404 MOVEM TAC,DISJSR ;FROM ODD INTERRUPT LOC
\r
405 MOVEI TAC,PENON ;SETUP CONSO BITS ON SPECIAL CHANNEL
\r
406 HRRM TAC,PENINT ;...
\r
407 IORB IOS,DISIOS ;SET IOACT ON; INDICATE OUTPUT
\r
408 HRRZM UUO,DISONE ;SET NEW COMMAND LIST ORIGIN
\r
410 IORM IOS,DISIOS ;ALLOW DISPLAY
\r
411 CONSZ DIS,@DISCON ;DISPLAY ALREADY IN USE
\r
413 JRST CLKREQ ;ENTER CLOCK QUEUE REQUEST AND POPJ
\r
415 BLKLIT: BLKO DIS,DISBKO
\r