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
15 ;PUT VERSION NUMBER IN GLOB LISTING AND LOADER STORAGE MAP
\r
16 ; THESE ROUTINES HANDLE INTERRUPTS FROM THE DISPLAY DATA
\r
17 ; CHANNEL. THEY SEARCH THE COMMAND POINTER LIST SUPPLIED
\r
18 ; BY THE USER AND OUTPUT SECTIONS OF DATA AS SPECIFIED THEREIN.
\r
19 ; ALL OUTPUT IS DONE USING THE BLKO COMMAND.
\r
21 ; THE FORMAT OF THE COMMAND POINTE RLIST IS AS FOLLOWS:
\r
23 ; RH=0 END OF COMMAND POINTER LIST
\r
25 ; RH=ADR LH=0 ADR IS ADDRESS OF THE NEXT SECTION OF THE
\r
26 ; COMMAND POINTER LIST
\r
27 ; RH=L-1 LH=-N OUTPUT TO DISPLAY THE N WORDS OF COMMANDS
\r
28 ; BEGINNING AT LOCATION L.
\r
30 ; NOTE THAT THE CHECK FOR END OF LIST IS MADE FIRST.
\r
32 ; ALL ADDRESS ARE CHECKED FOR VALIDITY (I.E.. THEY MUST
\r
33 ; BE WITHIN USER ARE) BEFORE ANY MEM REF IS MAD.
\r
35 ;IF THE T30 SWITCH = 1 THIS IS THE ROUTINE FOR A DEC
\r
36 ;TYPE 30 DISPLAY WITH A TYPE 348 INTERFACE.
\r
37 ;OTHERWISE IT IS THE ROUTINE FOR A DEC TYPE 340.
\r
39 INTERNAL FTCHECK,FTMONP
\r
40 IFN FTCHECK+FTMONP,<
\r
41 EXTERNAL DISDDB,DISIOS,PENLOC,DISNT,DISBKO,DISHI,DISONE,DISAV,OFFDIS
\r
42 EXTERNAL DISAV1,DISREL,DISCON,DISNXT
\r
45 IFE FTCHECK+FTMONP,<
\r
46 ;DIS DEVICE DATA BLOCK
\r
48 DISDDB: SIXBIT /DIS/
\r
52 XWD DVDIS+DVOUT+DVIN+DVLNG,2000
\r
71 XP PENDDR,0 ;TO SATISFY A REQUEST IN COMMON.
\r
72 ; THERE IS NOT REALLY A PEN DDB.
\r
76 DIS=134 ;TYPE 30 DISPLAY DEVICE NUMBER
\r
78 DISTAR=100 ;CLOCK FINISHED BEFORE PICTURE
\r
79 DISWAT=200 ;PICTURE FINISHED BEFORE CLOCK
\r
80 DISCKR=400 ;CLOCK REQUEST IN CLOCK QUEU
\r
93 EXTERN DISSAV,DISBLK,DISJSR,PENSAV
\r
94 EXTERN DISCHN,PENCHN
\r
95 EXTERN DISCHL,PENCHL
\r
96 EXTERN DISSAV,DISRET
\r
97 EXTERN DISPON,DISPOF
\r
99 EXTERN ADRERR,SETIOD
\r
100 EXTERN PION,PIOFF,CLOCK
\r
101 EXTERN CPOPJ1,UERROR,URREL,STOTAC,JOB,JBTSTS,JBTADR,PJOBN
\r
102 IFE T30,< EXTERN ONDIS,NONDIS>
\r
104 INTERN PENINT,DISINT,DISFIN
\r
114 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
132 ;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
152 TRO TAC,4000 ;SET DISPLAY READY BIT IN CONO WORD
\r
156 DISSTP: MOVE ITEM,JOB ;CLEAR NSHF SO JOB CAN BE SHUFFLED
\r
157 MOVSI TAC,NSHF+NSWP ;CLEAR NSWP SO JOB CAN BE SWAPPED(IN CASE THIS IS A SWAPPING SYSTEM
\r
158 ANDCAM TAC,JBTSTS(ITEM)
\r
160 DISIN1: SETOM PENLOC
\r
161 MOVSI TAC,DISWAT+DISUUO ;IGNORE FURTHER TRAPS
\r
162 HRRI TAC,IOACT ;INDICATED DEVICE INACTIVE
\r
163 ANDCAM TAC,DISIOS ;INTO DEVICE DATA BLOCK
\r
164 DISOFF: CONO DIS,OFFDIS ;REMOVE THE DISPLAY'S CHANNE; ASSIGNMENTS
\r
165 HLLZS PENINT ;DON'T EXPECT ANY ON LITE PEN
\r
166 CONO PI,DISPOF ;TURN OFF DISPLAY'S BLKO CHANNEL
\r
169 DISINT: JRST DISFIN
\r
172 ;PENINT RECIEVES CONTROL ON INTERRUPTS ON THE DISPLAY NON-DATA
\r
173 ; CHANNEL (SPECIAL CHANNEL). IT DECIDES IF THE INTERRUPT
\r
174 ; WAS VALID, AND IF SO, TRANSFERS CONTROL TO AN APPROPRIATE ROUTINE
\r
177 PENINT: CONSO DIS,0 ;CHECK FOR CONI FLAGS
\r
178 JRST PENINT ;TO OTHER DEVICES ON SAME CHANNEL
\r
179 CONSZ DIS,400 ;STOP FLAG
\r
181 CONSZ DIS,2000 ;PEN FLAG?
\r
182 PENFLG: DATAI DIS,PENLOC ;STORE CURRENT LITE PEN LOC
\r
183 CONO DIS,NONDIS ;CLEAR FLAG
\r
184 JEN @PENCHL ;DISMISS INTERRUPT
\r
186 ;STPFLG SERVICES STOP FLAGS (DISPLAY PROGRAMMED) BY DOING
\r
187 ; A CLOSE ON THE DISPLAY
\r
189 STPFLG: JSR PENSAV ;STOP FLAG, SAVE AC'S AND SETUP RETURN
\r
190 JRST DISDSP+DCL ;DO A CLOSE AND DISMISS INTERRUPT
\r
194 PENINT: CONSO DIS,0 ;CHECK FOR CONI FLAGS
\r
195 JRST PENINT ;TO OTHER DEVICES ON SAME CHANNEL
\r
196 DATAI DIS,PENLOC ;CLEAR PEN INTERRUPT
\r
197 MOVEM TAC,PENLOC ;SAVE AC TAC
\r
198 MOVE TAC,DISBKO ;GET ABSOLUTE ADR OF NEXT DATA ELEMENT
\r
199 SUB TAC,DISREL ;MAKE ADDRESS RELATIVE
\r
200 HRRZS TAC ;CLEAR OUT GARBAGE IN THE LEFT HALF
\r
201 EXCH TAC,PENLOC ;SAVE ADR IN PENLOC AND RESTORE TAC
\r
202 JEN @PENCHL ;DISMIS THE INTERRUPT
\r
205 ;DISNXT IS CALLED WITH A JSR DISNXT, IT SETS UP THE NEXT
\r
206 ; POINTER FOR THE DISPLAY'S BLKO BY INTERPRETING A
\r
207 ; COMMAND LIST SUPPLIED BY THE USER, THIS COMMAND LIST
\r
208 ; IS DESCRIBED AT THE BEGINNING OF THE PROGRAM. IF THE
\r
209 ; DATA TO BE TRANSMITTED TO THE DISPLAY WOULD VIOLATE THE
\r
210 ; MEMORY PROTECTION, THEN THE ROUTINE RETURNS TO THE
\r
211 ; CALLING LOCATION +1. OTHERWISE, IF THERE
\r
212 ; IS NO FURRTHER DATA TO BE OUTPUT (AS INDICATED BY THE
\r
213 ; USER'S COMMAND LIST) THE ROUTINE RETURNS TO THE CALLING
\r
214 ; LOCATION +2. OTHERWISE, THE NEXT POINTER FOR THE BLKO
\r
215 ; IS PLACED IN DISBLKO AND THE ROUTINE RETURNS TO THE CALLING
\r
218 IFE FTCHECK+FTMONP,<
\r
219 DISNXT: 0 ;JSR AT INTERRUPT OF UUO LEVELS
\r
221 DISNX1: AOS TAC,DISPNT ;GET NEXT POINTER FROM LIST
\r
222 ILUP: HRRZM TAC,DISPNT ;UPDATE POINTER POINTER
\r
224 MOVE TAC,@DISREL ;GET NEXT WORD IN POINTER LIST
\r
225 MOVEM TAC,DISBKO ;PLACE IN BLOK POINTER
\r
226 HLROM TAC,DISAV1 ;GET NEGATIVE WORD COUNT(MAKE LH NEG. TOO)
\r
228 JUMPE TAC,EXIT1 ;END OF COMMAND LIST?
\r
229 TRNN TAC,-1 ;INTENSITY?
\r
232 TRNN TAC,-1 ;END OF COMMAND LIST?
\r
234 TLZN TAC,-1 ;NO. POINTER TO NEW LIST?
\r
236 CAIL TAC,JOBPFI ;NO. ADDRESS IN BOUNDS?
\r
239 SUB TAC,DISAV1 ;YES. ADR. OF LAST WORD IN BLOCK.
\r
241 HRRZ TAC,DISREL ;FORM ABSOLUTE ADDR
\r
242 ADDM TAC,DISBKO ;IN THE BLKO POINTER WORD
\r
243 AOS DISNXT ;RETURN 2,4
\r
245 EXIT2: MOVE TAC,DISAV
\r
246 CONO DIS,@DISCON ;SET UP DISPLAY STATUS WORD
\r
247 JRST 2,@DISNXT ;...
\r
250 INTCHK: MOVSS TAC ;PLACE INTENSITY IN CONO WORD
\r
252 JRST DISNX1 ;GET NEXT POINTER
\r
253 INTPNT: POINT 3,DISCON,29>
\r
255 ;DISFIN RECEIVES CONTROL WHEN THE DISPLAY'S BLKO POINTER REACHES
\r
256 ; ZERO. IT SAVES THE TWO AC'S WHICH DISNXT USES AND
\r
257 ; DOES A JRST TO DISNXT. ON A NORMAL RETURN IT RESTORES THE
\r
258 ; AC'S AND DISMISSES THE INTERPUT. ON A "NO MORE DATA"
\r
259 ; RETURN IT TRANSFERS CONTROL TO OVT2 FOR FURTHER
\r
260 ; DECISION AS TO WHETHER OR NOT TO CONTINUE DISPLAYING.
\r
262 DISFIN: MOVEM TAC,DISAV ;SAVE AC'S
\r
263 JSR DISNXT ;SETUP NEXT BLKO POINTER
\r
265 JRST DVT2 ;RETURN HERE IF NO NEXT POINTER
\r
266 JEN @DISCHL ;LET THE SCOPE DO THE REST
\r
268 ;DVT2 RECIVES CONTROL AT INTERRUPT LEVEL WHEN THE COMMAND LIST
\r
269 ; (SUPPLIED BY THE USER) RUNS OUT. IT SAVES THE AC'S FOR
\r
270 ; THIS CHANNEL AND IN THE PROCESS ENABLES REUTRNS BY POPJ
\r
271 ; AND SIMILAR GOOD THINGS SINCE IT ALSO STORES THE PC FROM
\r
272 ; THE JSR IN THE GENERAL PC LOCATION FOR THIS CHANNEL
\r
273 ; IF THE DISPLAY IS OFF. IT DOES NOT RESTART IT.
\r
275 ; IT CHECKS TO SEE IF THE CLOCK HAS RUN OUT BEFORE THE PICTURE;
\r
276 ; IF SO, IT CALLS DISBEG TO RESTART THE DISPLAY WITH A NEW
\r
277 ; COMMAND LIST. IT TURNS OFF THE IO ACTIVE BIT WHICH WAS
\r
278 ; TURNED ON BY THE OUTPUT ROUTINE; THIS INSURES THAT ANY
\r
279 ; OUTPUT COMMAND WILL DISPLAY AT LEAST ONE PICTURE. IF
\r
280 ; THE JOB WAS IN AN IO-WAIT, IT IS RELEASED.
\r
282 DVT2: JSR DISSAV ;ASK EXEC TO SAVE AC'S
\r
283 MOVEI DEVDAT,DISDDB ;SETUP ACS
\r
288 MOVSI IOS,DISWAT ;INDICATE PICTURES FINISHED
\r
289 IORB IOS,DISIOS ;...
\r
290 TLON IOS,DISUUI ;RESUME DISPLAY, NEW UUO.
\r
291 JRST DVT6 ;YES, STAY IN IO WAIT
\r
292 TDNE TAC,JBTSTS(ITEM) ;DOES SYSTEM WANT TO SHUFFLE THIS JOB?>
\r
294 TLNE IOS,DISTAR ;HAS CLOCK TRIGGERED?
\r
295 PUSHJ PDP,DISBEG ;YES, RESTART DISPLAY
\r
297 DVT4: TLNE IOS,DISTAR ;DID CLOCK FINISH BEFORE PICTURE?
\r
298 PUSHJ PDP,CLKREQ ;YES, PUT IN CLOCK REQUEST.
\r
299 DVT5: ANDCAM DAT,JBTSTS(ITEM) ;TURN OFF NSHF SO JOB CAN BE SHUFFLED
\r
300 DVT3: MOVE IOS,DISIOS ;BIT FIDDLING TIME
\r
301 TRZ IOS,IOACT ;SIGNAL DISPLAY CAN BE CLOSED
\r
302 TLZE IOS,IOW ;IS DISPLAY CAUSING AN IO-WAIT?
\r
303 PUSHJ PDP,SETIOD ;UNWAIT THE JOB
\r
304 MOVEM IOS,DISIOS ;RESTORE IO CONTROL WORD
\r
305 JRST DISRET ;RESTORE AC'S AND DISMISS
\r
306 DVT6: MOVEM IOS,DISIOS
\r
307 PUSHJ PDP,DISBEG ;START NEW COMMAND LIST
\r
310 ;DISREG IS CALLED WITH A PUSHJ PDP,DISBEG, IT DISABLES THE
\r
311 ; DISPLAY ITSELF (BY USING DISOFF) AND ALSO DISABLES THE
\r
312 ; CLOK RESTART AND RESETS THE POINTER TO THE USER'S
\r
313 ; COMMAND LIST TO THAT SPECIFIED ON THE LAST OUTPUT
\r
314 ; MINUS ONE. IT ASKES DISNXT TO SET UP THE NEXT BLKO POINTER
\r
315 ; IF DISNXT IS UNSUCCESSFUL (I.E., IF THE USER COMMAND LIST
\r
316 ; IS NULL), THEN THE ROUTINE DOES A CLOSE. OTHERWISE, A
\r
317 ; REQUEST IS ENTERED FOR A CLOCK INTERRUPT AT THE END OF
\r
318 ; AT MOST TWO JIFFIES. THIS CLOCK QUEUE REQUEST IS ENTERED
\r
319 ; ONLY IF THERE IS NONE ALREADY IN THE QUEUE. THE PI
\r
320 ; CHANNELS FOR THE DISPLAY ARE TURNED ON AGAIN AND THE
\r
321 ; DISPLAY IS INITIALIZED BY A CONO. IT SHOULD THEN REQUEST
\r
322 ; DATA AS SOON AS THE PI CHANNEL FOR THE BLKO IS TURNED ON.
\r
323 ; IT TURNS THIS CHANNEL ON AND RETURNS TO ITS CALLER.
\r
325 DISBEG: MOVSI IOS,DISTAR+DISWAT ;INDICATE FRESH DISPLAY
\r
326 ANDCAM IOS,DISIOS ;...
\r
327 HRRZ TAC1,DISONE ;GET POINTER LIST ADDR (-1)
\r
328 HRRZM TAC1,DISPNT ;RESET POINTER POINTER WITH IT
\r
329 JSR DISNXT ;ASK FOR FIRST WORD FOR BLKO
\r
331 JRST DISSTP ;NULL LIST, CLOSE
\r
332 PUSHJ PDP,CLKREQ ;ENTER CLOCK QUEUE REQUEST
\r
333 CONO DIS,@DISCON ;INITIALIZE THE DISPLAY
\r
334 MOVEI TAC,PENON ;ALLOW SPECIAL PI INTERRUPTS
\r
335 HRRM TAC,PENINT ;...
\r
336 CONO PI,DISPON ;ALLOW BLKO INTERRUPTS
\r
339 CLKREQ: MOVSI IOS,DISCKR ;IF NO CLOCK INTERRUPT REQUESTED
\r
340 MOVE TAC,CLOKRT ;RESET TIMER
\r
341 CONO PI,PIOFF ;INHIBIT INTERRUPTS
\r
342 TDON IOS,DISIOS ;ENTER ONLY A SINGLE CLOCK REQUEST
\r
343 IDPB TAC,CLOCK ;PLACE REUQEST IN QUEUE
\r
344 IORM IOS,DISIOS ;PROTECT AGAINST A DUPLICATE REQUEST
\r
345 CONO PI,PION ;UNINHIBIT INTERRUPTS
\r
348 CLOKRT: XWD CLOK,2 ;CONTROL FOR CLOCK QUEUE: 2 JIFFIES
\r
351 ;CLOK IS CALLED AT THE CLOCK LEVEL IN RESPONSE TO A REQUEST
\r
352 ; IN THE CLOCK QUEUE. A BIT IS SET TO INDICATE THAT THE
\r
353 ; CLOCL PERIOD HAS ELAPSED. IF THE DISPLAY IS STILL IN
\r
354 ; PROGRESS, CLOK RETURNS AT THIS POINT. OTHERWISE, CLOK
\r
355 ; GOES TO DISBEG TO START UP THE DISPLAY. DISBEG RETURNS
\r
358 CLOK: MOVSI IOS,DISCKR ;INDICATE CLOCK REQUEST SERVICED
\r
359 ANDCAB IOS,DISIOS ;...
\r
361 MOVSI IOS,DISTAR ;ASK DISPLAY TO RESTART
\r
362 IORB IOS,DISIOS ;...
\r
363 TLNN IOS,DISWAT ;HAS DISPLAY FINISHED?
\r
364 POPJ PDP, ;NO. WIAT FOR IT TO DO SO
\r
365 MOVEI DEVDAT,DISDDB
\r
368 TDNE TAC,JBTSTS(ITEM) ;IS SHUFFLE LOCKED OUT?
\r
369 JRST DISBEG ;YES, RESTART DISPLAY AND RETURN
\r
371 IORM TAC,JBTSTS(ITEM) ;NO. LOCK IT OUT.
\r
372 MOVE TAC,JBTADR(ITEM) ;RESET DISHI AND DISREL AFTER SHUFFLING
\r
375 JRST DISBEG ;RESART DISPLAY AND RETURN
\r
377 ;ADRER SERVICES PROTECTION VIOLATIONS DISCOVERED BY DISNXT.
\r
378 ; IT DOES A CLOSE AND THEN CALLS THE MONITOR'S ERROR PRINTING
\r
379 ; ROUTINES TO INFORM THE USER.
\r
381 ADRER: JSR DISSAV ;SAVE AC'S AGAIN
\r
382 ADRER1: PUSHJ PDP,DISDSP+DCL ;DO A CLOSE
\r
383 MOVEI DEVDAT,DISDDB ;TELL ERROR ROUTINE WHO'S UNHAPPY
\r
384 JRST ADRERR ;GO GRIPE
\r
385 ;DISIN HANDLES LITE PEN UUO (INPUT) IN A RUDIMENTARY FASHION
\r
386 ; BY RETURNING (TO THE ADDR SPECIFIED BY THE ADDR FIELD
\r
387 ; OF THE INPUT UUO) THE LAST PEN COORIDNATES SEEN,
\r
390 EXCH TAC,PENLOC ;GET LATEST COORDINATES,
\r
391 JRST STOTAC ;STORE AND RETURN
\r
393 ;DISOUT DOES THE WORK OF THE OUTPUT UUO. IT SETS A BIT TO
\r
394 ; INDICATE THAT THE DEVICE IS ACTIVE AND INHIBITS
\r
395 ; INTERUPTS WHICH MAY STILL BE IN PROGRESS. SINCE THE
\r
396 ; MONITOR CALLS WSYNCE BEFORE COMING HERE. THE USER IS
\r
397 ; GUARANTEED AT LEAST ONE PICTURE/OUTPUT. THE USERS MEMORY
\r
398 ; BOUNDS ARE STORED FOR QUICK USE AT INTERRUPT LEVEL W/0
\r
399 ; SAVING AC'S. THE LOCATION OF THE COMMAND LIST (-1) IS
\r
400 ; STORED FOR USE IN SETTING UP BLKO POINTERS. THE PI
\r
401 ; LOCATIONS (40 + 2J) ARE INITIALIZED WITH A BLKO IN
\r
402 ; THE EVEN LOCATIONS AND A JSR TO DISFIN IN THE ODD LOCATION,
\r
403 ; THE NON-DATA CHANNEL CONSO IS SETUP TO BELIEVE IN THE
\r
404 ; A POPJ PDP, IT RETURNS ON BEHALF OF THE OUTPUT UUO.
\r
406 DISOUT: TLO IOS,IO+DISWAT ;INDICATE OUTPUT; REQUEST START UP
\r
407 TRO IOS,IOACT ;INDICATE DEVICE ACTIVE
\r
408 SUBI UUO,1 ;ALLOW FOR INCREMENT AT INTERRUPT
\r
409 MOVE TAC,BLKLIT ;FEEDS WORDS TO THE DISPLAY
\r
410 MOVEM TAC,DISBLK ;FROM EVEN NUMBERED INTERRUPT LOC
\r
411 MOVE TAC,JSRLIT ;SERVICE THE END OF BLKO
\r
412 MOVEM TAC,DISJSR ;FROM ODD INTERRUPT LOC
\r
413 MOVEI TAC,PENON ;SETUP CONSO BITS ON SPECIAL CHANNEL
\r
414 HRRM TAC,PENINT ;...
\r
415 IORB IOS,DISIOS ;SET IOACT ON; INDICATE OUTPUT
\r
416 HRRZM UUO,DISONE ;SET NEW COMMAND LIST ORIGIN
\r
418 IORM IOS,DISIOS ;ALLOW DISPLAY
\r
419 CONSZ DIS,@DISCON ;DISPLAY ALREADY IN USE
\r
421 JRST CLKREQ ;ENTER CLOCK QUEUE REQUEST AND POPJ
\r
423 BLKLIT: BLKO DIS,DISBKO
\r