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
94 EXTERN DISSAV,DISBLK,DISJSR,PENSAV
\r
95 EXTERN DISCHN,PENCHN
\r
96 EXTERN DISCHL,PENCHL
\r
97 EXTERN DISSAV,DISRET
\r
98 EXTERN DISPON,DISPOF
\r
100 EXTERN ADRERR,SETIOD
\r
101 EXTERN PION,PIOFF,CLOCK
\r
102 EXTERN CPOPJ1,UERROR,URREL,STOTAC,JOB,JBTSTS,JBTADR,PJOBN
\r
103 IFE T30,< EXTERN ONDIS,NONDIS>
\r
105 INTERN PENINT,DISINT,DISFIN
\r
114 \f JRST DISINI ;INITIALIZATION
\r
115 POPJ PDP, ;PRINT ERROR AND STOP JOB
\r
116 DISDSP: JRST DISSTP ;RELEASE
\r
118 JSP DAT,UERROR ;OUTPUT
\r
119 JSP DAT,UERROR ;INPUT
\r
121 JRST CPOPJ1 ;LOOKUP
\r
122 JRST DISOUT ;DUMP OUPUT (THAT'S US)
\r
123 JRST DISIN ;DUMP INPUT (AS IN PEN)
\r
127 JRST CPOPJ1 ;RENAME
\r
128 POPJ PDP, ;CLOSE INPUT
\r
129 POPJ PDP, ;DIRECTORY CLEAR
\r
131 \f;DISINI IS CALLED FOR RELEASE, CLOSE, AND SUNDRY ILLEGAL CONDITIONS
\r
132 ; WHICH WANT TO TURN THE DISPLAY OFF. IT FIRST CONVINCES
\r
133 ; THE INTERRUPT LEVEL ROUTINES TO GO BACK TO SLEEP AND THEN
\r
134 ; TELLS THE MONITOR THAT THE DEVICE IS INACTIVE, LASTLY,
\r
135 ; IT TUERNS OFF THE INTERRUPT ASSIGNMENTS OF THE DISPLAY
\r
136 ; AND THE PI CHANNEL ASSOCIATED WITH THE DIS BLKO. IT RETURNS
\r
137 ; WITH A POPJ , SOMETIMES TO ITS CALLING ROUTINE AND SOMETIMES
\r
138 ; TO THE CHANNLE'S DISMISS ROUTINE, THE ADDRESS OF WHICH
\r
139 ; WAS CLEVERLY PLACED ON THE PUSHDOWN LIST WHEN AC'S
\r
140 ; WERE SAVED. THUS IT CAN BE CALLED WITH EITHER A
\r
141 ; PUSHJ PDP,DISINI OR A JRST DISINI.
\r
145 CONO DIS,100 ;PARAMETER MODE>
\r
147 MOVEI TAC,PENCHN ;SET UP CONO WORD WITH PROPER
\r
148 ASH TAC,3 ; CHANNEL ASSIGNMENTS
\r
150 TRO TAC,4000 ;SET DISPLAY READY BIT IN CONO WORD
\r
154 DISSTP: MOVE ITEM,JOB ;CLEAR NSHF SO JOB CAN BE SHUFFLED
\r
155 MOVSI TAC,NSHF+NSWP ;CLEAR NSWP SO JOB CAN BE SWAPPED(IN CASE THIS IS A SWAPPING SYSTEM
\r
156 ANDCAM TAC,JBTSTS(ITEM)
\r
158 DISIN1: SETOM PENLOC
\r
159 MOVSI TAC,DISWAT+DISUUI ;IGNORE FURTHER TRAPS
\r
160 HRRI TAC,IOACT ;INDICATED DEVICE INACTIVE
\r
161 ANDCAM TAC,DISIOS ;INTO DEVICE DATA BLOCK
\r
162 DISOFF: CONO DIS,OFFDIS ;REMOVE THE DISPLAY'S CHANNE; ASSIGNMENTS
\r
163 HLLZS PENINT ;DON'T EXPECT ANY ON LITE PEN
\r
164 CONO PI,DISPOF ;TURN OFF DISPLAY'S BLKO CHANNEL
\r
167 DISINT: JRST DISFIN
\r
170 ;PENINT RECIEVES CONTROL ON INTERRUPTS ON THE DISPLAY NON-DATA
\r
171 ; CHANNEL (SPECIAL CHANNEL). IT DECIDES IF THE INTERRUPT
\r
172 ; WAS VALID, AND IF SO, TRANSFERS CONTROL TO AN APPROPRIATE ROUTINE
\r
175 PENINT: CONSO DIS,0 ;CHECK FOR CONI FLAGS
\r
176 JRST PENINT ;TO OTHER DEVICES ON SAME CHANNEL
\r
177 CONSZ DIS,400 ;STOP FLAG
\r
179 CONSZ DIS,2000 ;PEN FLAG?
\r
180 PENFLG: DATAI DIS,PENLOC ;STORE CURRENT LITE PEN LOC
\r
181 CONO DIS,NONDIS ;CLEAR FLAG
\r
182 JEN @PENCHL ;DISMISS INTERRUPT
\r
184 ;STPFLG SERVICES STOP FLAGS (DISPLAY PROGRAMMED) BY DOING
\r
185 ; A CLOSE ON THE DISPLAY
\r
187 STPFLG: JSR PENSAV ;STOP FLAG, SAVE AC'S AND SETUP RETURN
\r
188 JRST DISDSP+DCL ;DO A CLOSE AND DISMISS INTERRUPT
\r
192 PENINT: CONSO DIS,0 ;CHECK FOR CONI FLAGS
\r
193 JRST PENINT ;TO OTHER DEVICES ON SAME CHANNEL
\r
194 DATAI DIS,PENLOC ;CLEAR PEN INTERRUPT
\r
195 MOVEM TAC,PENLOC ;SAVE AC TAC
\r
196 MOVE TAC,DISBKO ;GET ABSOLUTE ADR OF NEXT DATA ELEMENT
\r
197 SUB TAC,DISREL ;MAKE ADDRESS RELATIVE
\r
198 HRRZS TAC ;CLEAR OUT GARBAGE IN THE LEFT HALF
\r
199 EXCH TAC,PENLOC ;SAVE ADR IN PENLOC AND RESTORE TAC
\r
200 JEN @PENCHL ;DISMIS THE INTERRUPT
\r
202 \f;DISNXT IS CALLED WITH A JSR DISNXT, IT SETS UP THE NEXT
\r
203 ; POINTER FOR THE DISPLAY'S BLKO BY INTERPRETING A
\r
204 ; COMMAND LIST SUPPLIED BY THE USER, THIS COMMAND LIST
\r
205 ; IS DESCRIBED AT THE BEGINNING OF THE PROGRAM. IF THE
\r
206 ; DATA TO BE TRANSMITTED TO THE DISPLAY WOULD VIOLATE THE
\r
207 ; MEMORY PROTECTION, THEN THE ROUTINE RETURNS TO THE
\r
208 ; CALLING LOCATION +1. OTHERWISE, IF THERE
\r
209 ; IS NO FURRTHER DATA TO BE OUTPUT (AS INDICATED BY THE
\r
210 ; USER'S COMMAND LIST) THE ROUTINE RETURNS TO THE CALLING
\r
211 ; LOCATION +2. OTHERWISE, THE NEXT POINTER FOR THE BLKO
\r
212 ; IS PLACED IN DISBLKO AND THE ROUTINE RETURNS TO THE CALLING
\r
215 IFE FTCHECK+FTMONP,<
\r
216 DISNXT: 0 ;JSR AT INTERRUPT OF UUO LEVELS
\r
218 DISNX1: AOS TAC,DISPNT ;GET NEXT POINTER FROM LIST
\r
219 ILUP: HRRZM TAC,DISPNT ;UPDATE POINTER POINTER
\r
221 MOVE TAC,@DISREL ;GET NEXT WORD IN POINTER LIST
\r
222 MOVEM TAC,DISBKO ;PLACE IN BLOK POINTER
\r
223 HLROM TAC,DISAV1 ;GET NEGATIVE WORD COUNT(MAKE LH NEG. TOO)
\r
225 JUMPE TAC,EXIT1 ;END OF COMMAND LIST?
\r
226 TRNN TAC,-1 ;INTENSITY?
\r
229 TRNN TAC,-1 ;END OF COMMAND LIST?
\r
231 TLZN TAC,-1 ;NO. POINTER TO NEW LIST?
\r
233 CAIL TAC,JOBPFI ;NO. ADDRESS IN BOUNDS?
\r
236 SUB TAC,DISAV1 ;YES. ADR. OF LAST WORD IN BLOCK.
\r
238 HRRZ TAC,DISREL ;FORM ABSOLUTE ADDR
\r
239 ADDM TAC,DISBKO ;IN THE BLKO POINTER WORD
\r
240 AOS DISNXT ;RETURN 2,4
\r
242 EXIT2: MOVE TAC,DISAV
\r
243 CONO DIS,@DISCON ;SET UP DISPLAY STATUS WORD
\r
244 JRST 2,@DISNXT ;...
\r
247 INTCHK: MOVSS TAC ;PLACE INTENSITY IN CONO WORD
\r
249 JRST DISNX1 ;GET NEXT POINTER
\r
250 INTPNT: POINT 3,DISCON,29>
\r
251 \f;DISFIN RECEIVES CONTROL WHEN THE DISPLAY'S BLKO POINTER REACHES
\r
252 ; ZERO. IT SAVES THE TWO AC'S WHICH DISNXT USES AND
\r
253 ; DOES A JRST TO DISNXT. ON A NORMAL RETURN IT RESTORES THE
\r
254 ; AC'S AND DISMISSES THE INTERPUT. ON A "NO MORE DATA"
\r
255 ; RETURN IT TRANSFERS CONTROL TO OVT2 FOR FURTHER
\r
256 ; DECISION AS TO WHETHER OR NOT TO CONTINUE DISPLAYING.
\r
258 DISFIN: MOVEM TAC,DISAV ;SAVE AC'S
\r
259 JSR DISNXT ;SETUP NEXT BLKO POINTER
\r
261 JRST DVT2 ;RETURN HERE IF NO NEXT POINTER
\r
262 JEN @DISCHL ;LET THE SCOPE DO THE REST
\r
264 ;DVT2 RECIVES CONTROL AT INTERRUPT LEVEL WHEN THE COMMAND LIST
\r
265 ; (SUPPLIED BY THE USER) RUNS OUT. IT SAVES THE AC'S FOR
\r
266 ; THIS CHANNEL AND IN THE PROCESS ENABLES REUTRNS BY POPJ
\r
267 ; AND SIMILAR GOOD THINGS SINCE IT ALSO STORES THE PC FROM
\r
268 ; THE JSR IN THE GENERAL PC LOCATION FOR THIS CHANNEL
\r
269 ; IF THE DISPLAY IS OFF. IT DOES NOT RESTART IT.
\r
270 ; IT CHECKS TO SEE IF THE CLOCK HAS RUN OUT BEFORE THE PICTURE;
\r
271 ; IF SO, IT CALLS DISBEG TO RESTART THE DISPLAY WITH A NEW
\r
272 ; COMMAND LIST. IT TURNS OFF THE IO ACTIVE BIT WHICH WAS
\r
273 ; TURNED ON BY THE OUTPUT ROUTINE; THIS INSURES THAT ANY
\r
274 ; OUTPUT COMMAND WILL DISPLAY AT LEAST ONE PICTURE. IF
\r
275 ; THE JOB WAS IN AN IO-WAIT, IT IS RELEASED.
\r
277 DVT2: JSR DISSAV ;ASK EXEC TO SAVE AC'S
\r
278 MOVEI DEVDAT,DISDDB ;SETUP ACS
\r
283 MOVSI IOS,DISWAT ;INDICATE PICTURES FINISHED
\r
284 IORB IOS,DISIOS ;...
\r
285 TLON IOS,DISUUI ;RESUME DISPLAY, NEW UUO.
\r
286 JRST DVT6 ;YES, STAY IN IO WAIT
\r
287 TDNE TAC,JBTSTS(ITEM) ;DOES SYSTEM WANT TO SHUFFLE THIS JOB?>
\r
289 TLNE IOS,DISTAR ;HAS CLOCK TRIGGERED?
\r
290 PUSHJ PDP,DISBEG ;YES, RESTART DISPLAY
\r
292 DVT4: TLNE IOS,DISTAR ;DID CLOCK FINISH BEFORE PICTURE?
\r
293 PUSHJ PDP,CLKREQ ;YES, PUT IN CLOCK REQUEST.
\r
294 DVT5: ANDCAM DAT,JBTSTS(ITEM) ;TURN OFF NSHF SO JOB CAN BE SHUFFLED
\r
295 DVT3: MOVE IOS,DISIOS ;BIT FIDDLING TIME
\r
296 TRZ IOS,IOACT ;SIGNAL DISPLAY CAN BE CLOSED
\r
297 TLZE IOS,IOW ;IS DISPLAY CAUSING AN IO-WAIT?
\r
298 PUSHJ PDP,SETIOD ;UNWAIT THE JOB
\r
299 MOVEM IOS,DISIOS ;RESTORE IO CONTROL WORD
\r
300 JRST DISRET ;RESTORE AC'S AND DISMISS
\r
301 DVT6: MOVEM IOS,DISIOS
\r
302 PUSHJ PDP,DISBEG ;START NEW COMMAND LIST
\r
304 \f;DISREG IS CALLED WITH A PUSHJ PDP,DISBEG, IT DISABLES THE
\r
305 ; DISPLAY ITSELF (BY USING DISOFF) AND ALSO DISABLES THE
\r
306 ; CLOK RESTART AND RESETS THE POINTER TO THE USER'S
\r
307 ; COMMAND LIST TO THAT SPECIFIED ON THE LAST OUTPUT
\r
308 ; MINUS ONE. IT ASKES DISNXT TO SET UP THE NEXT BLKO POINTER
\r
309 ; IF DISNXT IS UNSUCCESSFUL (I.E., IF THE USER COMMAND LIST
\r
310 ; IS NULL), THEN THE ROUTINE DOES A CLOSE. OTHERWISE, A
\r
311 ; REQUEST IS ENTERED FOR A CLOCK INTERRUPT AT THE END OF
\r
312 ; AT MOST TWO JIFFIES. THIS CLOCK QUEUE REQUEST IS ENTERED
\r
313 ; ONLY IF THERE IS NONE ALREADY IN THE QUEUE. THE PI
\r
314 ; CHANNELS FOR THE DISPLAY ARE TURNED ON AGAIN AND THE
\r
315 ; DISPLAY IS INITIALIZED BY A CONO. IT SHOULD THEN REQUEST
\r
316 ; DATA AS SOON AS THE PI CHANNEL FOR THE BLKO IS TURNED ON.
\r
317 ; IT TURNS THIS CHANNEL ON AND RETURNS TO ITS CALLER.
\r
319 DISBEG: MOVSI IOS,DISTAR+DISWAT ;INDICATE FRESH DISPLAY
\r
320 ANDCAM IOS,DISIOS ;...
\r
321 HRRZ TAC1,DISONE ;GET POINTER LIST ADDR (-1)
\r
322 HRRZM TAC1,DISPNT ;RESET POINTER POINTER WITH IT
\r
323 JSR DISNXT ;ASK FOR FIRST WORD FOR BLKO
\r
325 JRST DISSTP ;NULL LIST, CLOSE
\r
326 PUSHJ PDP,CLKREQ ;ENTER CLOCK QUEUE REQUEST
\r
327 CONO DIS,@DISCON ;INITIALIZE THE DISPLAY
\r
328 MOVEI TAC,PENON ;ALLOW SPECIAL PI INTERRUPTS
\r
329 HRRM TAC,PENINT ;...
\r
330 CONO PI,DISPON ;ALLOW BLKO INTERRUPTS
\r
333 CLKREQ: MOVSI IOS,DISCKR ;IF NO CLOCK INTERRUPT REQUESTED
\r
334 MOVE TAC,CLOKRT ;RESET TIMER
\r
335 CONO PI,PIOFF ;INHIBIT INTERRUPTS
\r
336 TDON IOS,DISIOS ;ENTER ONLY A SINGLE CLOCK REQUEST
\r
337 IDPB TAC,CLOCK ;PLACE REUQEST IN QUEUE
\r
338 IORM IOS,DISIOS ;PROTECT AGAINST A DUPLICATE REQUEST
\r
339 CONO PI,PION ;UNINHIBIT INTERRUPTS
\r
342 CLOKRT: XWD CLOK,2 ;CONTROL FOR CLOCK QUEUE: 2 JIFFIES
\r
344 \f;CLOK IS CALLED AT THE CLOCK LEVEL IN RESPONSE TO A REQUEST
\r
345 ; IN THE CLOCK QUEUE. A BIT IS SET TO INDICATE THAT THE
\r
346 ; CLOCL PERIOD HAS ELAPSED. IF THE DISPLAY IS STILL IN
\r
347 ; PROGRESS, CLOK RETURNS AT THIS POINT. OTHERWISE, CLOK
\r
348 ; GOES TO DISBEG TO START UP THE DISPLAY. DISBEG RETURNS
\r
351 CLOK: MOVSI IOS,DISCKR ;INDICATE CLOCK REQUEST SERVICED
\r
352 ANDCAB IOS,DISIOS ;...
\r
354 MOVSI IOS,DISTAR ;ASK DISPLAY TO RESTART
\r
355 IORB IOS,DISIOS ;...
\r
356 TLNN IOS,DISWAT ;HAS DISPLAY FINISHED?
\r
357 POPJ PDP, ;NO. WIAT FOR IT TO DO SO
\r
358 MOVEI DEVDAT,DISDDB
\r
361 TDNE TAC,JBTSTS(ITEM) ;IS SHUFFLE LOCKED OUT?
\r
362 JRST DISBEG ;YES, RESTART DISPLAY AND RETURN
\r
363 IORM TAC,JBTSTS(ITEM) ;NO. LOCK IT OUT.
\r
364 MOVE TAC,JBTADR(ITEM) ;RESET DISHI AND DISREL AFTER SHUFFLING
\r
367 JRST DISBEG ;RESART DISPLAY AND RETURN
\r
369 ;ADRER SERVICES PROTECTION VIOLATIONS DISCOVERED BY DISNXT.
\r
370 ; IT DOES A CLOSE AND THEN CALLS THE MONITOR'S ERROR PRINTING
\r
371 ; ROUTINES TO INFORM THE USER.
\r
373 ADRER: JSR DISSAV ;SAVE AC'S AGAIN
\r
374 ADRER1: PUSHJ PDP,DISDSP+DCL ;DO A CLOSE
\r
375 MOVEI DEVDAT,DISDDB ;TELL ERROR ROUTINE WHO'S UNHAPPY
\r
376 JRST ADRERR ;GO GRIPE
\r
377 ;DISIN HANDLES LITE PEN UUO (INPUT) IN A RUDIMENTARY FASHION
\r
378 ; BY RETURNING (TO THE ADDR SPECIFIED BY THE ADDR FIELD
\r
379 ; OF THE INPUT UUO) THE LAST PEN COORIDNATES SEEN,
\r
382 EXCH TAC,PENLOC ;GET LATEST COORDINATES,
\r
383 JRST STOTAC ;STORE AND RETURN
\r
384 \f;DISOUT DOES THE WORK OF THE OUTPUT UUO. IT SETS A BIT TO
\r
385 ; INDICATE THAT THE DEVICE IS ACTIVE AND INHIBITS
\r
386 ; INTERUPTS WHICH MAY STILL BE IN PROGRESS. SINCE THE
\r
387 ; MONITOR CALLS WSYNCE BEFORE COMING HERE. THE USER IS
\r
388 ; GUARANTEED AT LEAST ONE PICTURE/OUTPUT. THE USERS MEMORY
\r
389 ; BOUNDS ARE STORED FOR QUICK USE AT INTERRUPT LEVEL W/0
\r
390 ; SAVING AC'S. THE LOCATION OF THE COMMAND LIST (-1) IS
\r
391 ; STORED FOR USE IN SETTING UP BLKO POINTERS. THE PI
\r
392 ; LOCATIONS (40 + 2J) ARE INITIALIZED WITH A BLKO IN
\r
393 ; THE EVEN LOCATIONS AND A JSR TO DISFIN IN THE ODD LOCATION,
\r
394 ; THE NON-DATA CHANNEL CONSO IS SETUP TO BELIEVE IN THE
\r
395 ; A POPJ PDP, IT RETURNS ON BEHALF OF THE OUTPUT UUO.
\r
397 DISOUT: TLO IOS,IO+DISWAT ;INDICATE OUTPUT; REQUEST START UP
\r
398 TRO IOS,IOACT ;INDICATE DEVICE ACTIVE
\r
399 SUBI UUO,1 ;ALLOW FOR INCREMENT AT INTERRUPT
\r
400 MOVE TAC,BLKLIT ;FEEDS WORDS TO THE DISPLAY
\r
401 MOVEM TAC,DISBLK ;FROM EVEN NUMBERED INTERRUPT LOC
\r
402 MOVE TAC,JSRLIT ;SERVICE THE END OF BLKO
\r
403 MOVEM TAC,DISJSR ;FROM ODD INTERRUPT LOC
\r
404 MOVEI TAC,PENON ;SETUP CONSO BITS ON SPECIAL CHANNEL
\r
405 HRRM TAC,PENINT ;...
\r
406 IORB IOS,DISIOS ;SET IOACT ON; INDICATE OUTPUT
\r
407 HRRZM UUO,DISONE ;SET NEW COMMAND LIST ORIGIN
\r
409 IORM IOS,DISIOS ;ALLOW DISPLAY
\r
410 CONSZ DIS,@DISCON ;DISPLAY ALREADY IN USE
\r
412 JRST CLKREQ ;ENTER CLOCK QUEUE REQUEST AND POPJ
\r
414 BLKLIT: BLKO DIS,DISBKO
\r