Table of Contents

EFORMAT

Table Of Contents

  • [00005] OUTPUT FORMATTING
  • [00019] -EFORMAT- OUTPUT TO ECS FORMAT BUFFER
  • [00181] -WFORMAT- WAIT FOR FORMAT INITIALIZATION
  • [00200] -FORMREQ- PROCESS FORMATTER REQUESTS
  • [00275] RXCB/WXCB READ/WRITE ECS CIRCULAR BUFFER

Source Code

EFORMAT.txt
  1. EFORMAT
  2. * /--- FILE TYPE = E
  3. * /--- BLOCK IDENT 00 000 79/06/19 18.19
  4. IDENT EFORMAT
  5. TITLE OUTPUT FORMATTING
  6. *
  7. * GET COMMON SYMBOL TABLE
  8. *
  9. CST
  10. *
  11. *
  12. EXT ECSPRTY SYSTEM ECS ERROR ACTION
  13. *
  14. *
  15. QDIV EQU 10 DIVIDING POINT FOR QUEUE CHOICE
  16. FASTMAX EQU 20 UPPER LIMIT FOR FAST QUEUE
  17. *
  18. * /--- BLOCK EFORMAT 00 000 79/10/08 23.15
  19. TITLE -EFORMAT- OUTPUT TO ECS FORMAT BUFFER
  20. *
  21. * 'IT IS ASSUMED THAT A5/B5/B7 ARE NOT USED HERE, SINCE
  22. * EFORMAT CAN BE CALLED FROM THE EXECUTOR (E.G., -SEND-).
  23. *
  24. *
  25. *
  26. * -EFORMAT-
  27. * OUTPUT *MOUT* BUFFER TO ECS FORMAT BUFFER
  28. *
  29. * EACH BUFFER CONSISTS OF A HEADER WORD, GIVING THE
  30. * LENGTH AND STATION NUMBER, FOLLOWED BY THE
  31. * CONTENTS OF THE MOUT BUFFER.
  32. *
  33. * ON THE BASIS OF WHETHER MOUTLOC IS LESS THAN
  34. * *QDIV*, THE OUTPUT IS PLACED EITHER IN THE FAST
  35. * FORMAT QUEUE OR THE MAIN BUFFER. THE RESULT IS
  36. * THAT SHORT AMOUNTS OF OUTPUT WILL RECEIVE PRIORITY
  37. * PROCESSING BY THE FORMATTER.
  38. * MOUTS LONGER THAN *QDIV* BUT LESS THAN *FASTMAX*
  39. * MAY ALSO BE ROUTED TO THE FAST FORMAT QUEUE IF
  40. * *FQHIGH* IS NON-ZERO
  41. *
  42. * 'A SPECIAL CASE IS THAT OF ALL-STATION -SEND- COMMANDS. 'SO
  43. * AS TO PRESERVE CORRECT TIME-ORDERING, THE ALL-STATION
  44. * SEND DRIVES EFORMAT FOR EACH STATION SENT TO. 'THE STATION
  45. * TO BE SENT TO IS SPECIFIED IN FORCSTN (NORMALLY NEGATIVE).
  46. * 'AT THE END OF THE EFORMAT CALL THE MOUT BUFFER IS RE-
  47. * INITIALIZED BY EFORMAT, TO BE READY FOR THE NEXT MESSAGE
  48. * TO BE SENT.
  49. *
  50. *
  51. ENTRY EFORMAT
  52. EFORMAT EQ *
  53. SA1 MOUTLOC CHECK IF ANY OUTPUT
  54. ZR X1,EFEND
  55. NG X1,EFEND
  56. SX0 X1-MOUTEND+1 CHECK IF TOO MUCH OUTPUT
  57. PL X0,EFEND
  58. *
  59. * /--- BLOCK EFORMAT 00 000 79/10/11 23.56
  60. *
  61. * SPECIAL HANDLING FOR -SEND-
  62. *
  63. EF100 SA2 FORCSTN OVERRIDE STATION FOR -SEND-
  64. NG X2,EF101 JUMP IF NO OVERRIDE
  65. CALL DMPSYSB
  66. SA3 STATION
  67. BX6 X3
  68. SA6 LFORCST SAVE SENDING STATION NO.
  69. SA2 FORCSTN
  70. BX6 X2
  71. SA6 A3 OVERRIDE STATION
  72. CALL LODSYSB GET SENT-TO STATION BANK
  73. *
  74. * DECIDE WHICH FORMAT BUFFER TO USE
  75. *
  76. EF101 INTLOK X,I.EFORM,W INTERLOCK FORMAT BUFFER
  77. SA1 MOUTLOC LENGTH OF OUTPUT
  78. SX1 X1+1 LENGTH OF OUTPUT + HEADER
  79. BX6 X1
  80. LX6 24 POSITION LENGTH OF OUTPUT
  81. SA2 STATION
  82. BX6 X2+X6 ATTACH STATION NUMBER
  83. SA6 POBUFF STORE HEADER WORD
  84. SA2 FORCSTN
  85. PL X2,EF114 IF SEND CASE, LONG QUEUE
  86. SA2 SUBMOUT CHECK IF OUTPUT ALREADY PENDING
  87. SA3 OUTMOUT
  88. IX2 X3-X2
  89. PL X2,EF112 JUMP IF FORMAT CAUGHT UP
  90. SA2 STFLAGS
  91. LX2 60-TPFQS POSITION PLATO-FORMAT QUEUE BIT
  92. NG X2,EF114 PREVIOUS OUTPUT IN LONG QUEUE
  93. EQ EF115 PREVIOUS OUTPUT IN FAST QUEUE
  94. *
  95. EF112 SX4 X1-FASTMAX CHECK IF TOO LONG FOR FAST QUE
  96. PL X4,EF114
  97. SX4 X1-QDIV-1 CHECK FOR SHORT OUTPUT LENGTH
  98. NG X4,EF115 ROUTE SHORT OUTPUT TO FAST QUE
  99. SA1 FQHIGH CHECK IF SHOULD FORCE FAST QUE
  100. NZ X1,EF115
  101. *
  102. * OUTPUT TO MAIN (LONG OUTPUT) FORMAT BUFFER
  103. *
  104. EF114 CALL WXCB,POBUFF,LONGQD
  105. SX0 1 X0 = 1 = LONG OUTPUT QUEUE
  106. ZR X6,EFFLOW IF LONG OUTPUT BUFFER IS FULL
  107. EQ EF120
  108. *
  109. * OUTPUT TO HIGH PRIORITY FORMAT BUFFER
  110. *
  111. EF115 CALL WXCB,POBUFF,FASTQD
  112. MX0 0 X0 = 0 = FAST OUTPUT QUEUE
  113. ZR X6,EFFLOW IF HIGH PRIORITY BUFFER IS FULL
  114. *
  115. * /--- BLOCK EFORMAT 00 000 79/10/10 20.46
  116. *
  117. EF120 SA2 FORCSTN
  118. PL X2,EF130 IF SEND CASE NO UPDATES
  119. LX0 TPFQS-1 POSITION FAST/LONG QUEUE BIT
  120. SX2 1
  121. LX2 TPFQS-1 POSITION MASK FOR QUEUE BIT
  122. SA1 STFLAGS
  123. BX1 -X2*X1 CLEAR CURRENT VALUE
  124. BX6 X0+X1 ATTACH NEW VALUE
  125. SA6 A1
  126. SA1 SUBMOUT INCREMENT NUMBER OF MOUTS SENT
  127. SX6 1 INCREMENT *MOUT* SUBMITTED
  128. IX6 X1+X6
  129. SA6 A1
  130. EQ EF140
  131.  
  132. EF130 SA2 LFORCST (X2) = ORIGINAL STATION
  133. BX6 X2
  134. SA6 STATION RESTORE STATION NUMBER
  135. CALL LODSYSB
  136. * SET TBPAUSE TO -1 SO THAT OK/NO WILL BE PLACED AT END
  137. * OF MOUT BUFFER INSTEAD OF AT BEGINNING';
  138. MX6 -1
  139. SA6 TBPAUSE
  140. EF140 INTCLR X,I.EFORM
  141. EFEND MX6 0
  142. SA6 MOUTLOC REINITIALIZE MOUT BUFFER
  143. MX6 -1
  144. SA6 FORCSTN RE-INITIALIZE FORCSTN
  145. EQ EFORMAT
  146. *
  147. *
  148. * PROCESS BUFFER OVERFLOW
  149. *
  150. EFFLOW BSS 0
  151. SA2 =5AFASTL CONFIG PARM - FAST OUTPUT QUEUE
  152. ZR X0,EFFLOW1 IF FAST OUTPUT QUEUE TOO SHORT
  153. SA2 =5AFORML CONFIG PARM - LONG OUTPUT QUEUE
  154.  
  155. EFFLOW1 BSS 0
  156. SB1 3 (B1) = (S=LOG) DAYFILE PARAM
  157. CALL S=CONF ISSUE DAYFILE / B-DISPLAY MSGS
  158.  
  159. SA1 FORFLOW INCREMENT OVERFLOW COUNT
  160. SX6 X1+1
  161. SA6 A1
  162. INTCLR X,I.EFORM CLEAR FORMAT BUFFER INTERLOCK
  163. CALL DMPSYSB RETURN /STATION/ BANK
  164. SA2 FORCSTN CHECK FOR SPECIAL -SEND-
  165. NG X2,EFFLOW2
  166. SA2 LFORCST
  167. BX6 X2
  168. SA6 STATION
  169. EFFLOW2 BSS 0
  170. CALL WFORMAT
  171. CALL ECSREQ PROCESS FRAMAT ECS REQUESTS
  172. CALL S=WAIT,100 IDLE FOR A WHILE
  173. CALL LODSYSB RE-LOAD /STATION/ BANK
  174. EQ EF100
  175. *
  176. *
  177. LFORCST BSS 1 SAVE ORIGINAL STATION NO.
  178. *
  179. *
  180. * /--- BLOCK WFORMAT 00 000 79/07/15 23.38
  181. TITLE -WFORMAT- WAIT FOR FORMAT INITIALIZATION
  182. *
  183. *
  184. *
  185. * -WFORMAT-
  186. * IDLE EXECUTOR WHILE FORMAT INITIALIZE FLAG SET
  187. *
  188. ENTRY WFORMAT
  189. WFORMAT EQ *
  190. SX0 FORINIP FRAMAT INITIALIZATION FLAG
  191. RX1 X0 (-RXX- 1 WD READ, MAY CHG *A1*)
  192. PL X1,WFORMAT
  193. CALL ECSREQ PROCESS FRAMAT ECS REQUESTS
  194. CALL S=BMSG,(=18CWAITING FOR FRAMAT)
  195. CALL S=WAIT,100 IDLE FOR A WHILE
  196. EQ WFORMAT
  197. *
  198. *
  199. * /--- BLOCK FORMREQ 00 000 81/06/29 10.39
  200. TITLE -FORMREQ- PROCESS FORMATTER REQUESTS
  201. *
  202. *
  203. *
  204. * -FORMREQ-
  205. * PROCESS ACTION REQUESTS MADE BY FORMATTER
  206. *
  207. * FORMAT OF REQUEST WORD -
  208. * 1ST 24 BITS = REQUEST INFO
  209. * NEXT 12 = LENGTH OF REQUEST (=1)
  210. * NEXT 12 = REQUEST TYPE
  211. * 0 = NO-OP
  212. * 1 = *CATCHUP* REQUEST
  213. * 2 = PARCELS AT MINIMUM THRESHOLD
  214. * NEXT 12 = STATION NUMBER
  215. *
  216. * FORMAT OF *CATCHUP* REQUEST -
  217. * 1ST 06 BITS = UNUSED
  218. * NEXT 18 = MILLISECOND DELAY TIME
  219. * NEXT 12 = 1 = REQUEST LENGTH
  220. * NEXT 12 = 1 = REQUEST TYPE
  221. * NEXT 12 = STATION
  222. *
  223. *
  224. ENTRY FORMREQ
  225. FORMREQ EQ *
  226. FR020 SX0 FORINIP FRAMAT INITIALIZATION FLAG
  227. RX1 X0 (-RXX- 1 WD READ, MAY CHG *A1*)
  228. NG X1,FR980
  229. SX6 20 SET UP MAX NUMBER OF REQUESTS
  230. SA6 FREQCNT TO PROCESS IN ONE POLL
  231. *
  232. FR100 SA1 FREQCNT
  233. SX6 X1-1 COUNT DOWN PERMISSIBLE ACTIONS
  234. NG X6,FORMREQ IF WE HAVE DONE THE MAXIMUM
  235. SA6 A1
  236. CALL RXCB,POBUFF,FREQQD,0
  237. ZR X6,FORMREQ EXIT IF NOTHING TO PROCESS
  238. EQ FPROC GO TO PROCESS REQUEST
  239. *
  240. FR980 CALL ECSREQ PROCESS ECS REQUESTS
  241. CALL S=WAIT,50 WAIT FOR FORMAT READY
  242. EQ FR020
  243. *
  244. *
  245. FREQCNT BSS 1
  246. *
  247. *
  248. * /--- BLOCK FORMREQ 00 000 81/06/24 22.29
  249. *
  250. * PROCESS NEXT FORMAT REQUEST
  251. *
  252. FPROC MX0 -12
  253. SA1 POBUFF 24/INFO, 12/1, 12/TYPE, 12/STN
  254. LX1 60-12
  255. BX2 -X0*X1 PICK OFF FORMAT REQUEST TYPE
  256. SB1 X2
  257. JP B1+*+1
  258. *
  259. + EQ FR100 0 = NO-OP
  260. + EQ "CRASH" 1 = CATCHUP (UNUSED)
  261. + EQ FR2001 2 = MINIMUM PARCELS LEFT
  262. SPACE 5,11
  263. * PRESS KEY INDICATING PARCELS AT MINIMUM THRESHOLD
  264.  
  265. FR2001 LX1 12 POSITION STATION NUMBER
  266. BX6 -X0*X1
  267. SA6 INFO
  268. CALL PRESKEY,FR200A,INFO
  269. EQ FR100
  270.  
  271. FR200A CON CATCHUP
  272. *
  273. *
  274. * /--- BLOCK -RXCB- 00 000 81/06/29 10.40
  275. TITLE RXCB/WXCB READ/WRITE ECS CIRCULAR BUFFER
  276. *
  277. *
  278. *
  279. * -RXCB- READ ECS CIRCULAR BUFFER
  280. * ON ENTRY - B1 = CM BUFFER ADDRESS
  281. * B2 = ADDR OF CIRCULAR BUFFER DESCRIPTOR
  282. * B3 = MAXIMUM LENGTH OF DATA ALLOWED
  283. * = 0 = NO BOUNDS TEST
  284. * ON EXIT - X6 = +N = NUMBER CPU WORDS OF DATA READ
  285. * 0 = BUFFER EMPTY
  286. * -1 = BUFFER ENTRY TOO LONG
  287. *
  288. * -WXCB- WRITE ECS CIRCULAR BUFFER
  289. * ON ENTRY - B1 = CM BUFFER ADDRESS
  290. * B2 = ADDR OF CIRCULAR BUFFER DESCRIPTOR
  291. * ON EXIT - X6 = 1 = DATA WRITTEN TO BUFFER
  292. * 0 = BUFFER FULL
  293. * X1 = NUMBER OF WORDS SHORT (IF X6=0)
  294. *
  295. * FORMAT OF CIRCULAR BUFFER DESCRIPTOR WORD -
  296. * 1ST 18 BITS = LENGTH OF BUFFER
  297. * NEXT 21 = ECS ADDRESS OF BUFFER
  298. * NEXT 21 = ECS ADDRESS OF BUFFER IN/OUT PTRS
  299. *
  300. * FORMAT OF 1ST WORD OF CIRCULAR BUFFER ENTRIES -
  301. * 1ST 24 BITS = UNUSED BY BUFFER ROUTINES
  302. * NEXT 12 = CPU WORD COUNT
  303. * NEXT 12 = PPU WORD COUNT (IF APPLICABLE)
  304. * NEXT 12 = UNUSED BY BUFFER ROUTINES
  305. *
  306. * /--- BLOCK -RXCB- 00 000 81/07/26 12.57
  307. *
  308. *
  309. RXCB EQ *
  310. *
  311. * READ CIRCULAR BUFFER IN/OUT POINTERS
  312. *
  313. MX7 -21 X7 = MASK
  314. SA1 B2 X1 = CIRCULAR BUFFER DESCRIPTOR
  315. ZR X1,RXC190
  316. BX4 -X7*X1 X4 = ECS ADDR OF IN/OUT PTRS
  317. BX0 X4
  318. SA0 RXPTRS
  319. + RE 2 READ IN/OUT POINTERS TO CM
  320. RJ ECSPRTY
  321. SA2 A0 X2 = *IN* POINTER
  322. SA3 A0+1 X3 = *OUT* POINTER
  323. IX6 X2-X3
  324. ZR X6,RXC190 JUMP IF BUFFER EMPTY
  325. *
  326. * READ 1ST WORD OF BUFFER ENTRY
  327. *
  328. AX1 21 POSITION ADDRESS OF BUFFER
  329. BX7 -X7*X1 X7 = ECS ADDRESS OF BUFFER
  330. IX0 X3+X7 COMPUTE ADDRESS OF NEXT ENTRY
  331. SA0 B1 A0 = CM ADDRESS
  332. + RE 1 READ 1ST WORD OF BUFFER ENTRY
  333. RJ ECSPRTY
  334. *
  335. * DETERMINE REMAINING AMOUNT TO READ
  336. *
  337. AX1 21
  338. SX1 X1 X1 = LENGTH OF CIRCULAR BUFFER
  339. MX0 -12
  340. SA2 A0 LOAD ENTRY HEADER WORD
  341. AX2 24
  342. BX2 -X0*X2 X2 = CPU WORD COUNT
  343. SX0 X2-1
  344. ZR X0,RXC120 JUMP IF SINGLE WORD ENTRY
  345. ZR B3,RXC115 JUMP IF NO BOUNDS TEST
  346. SB1 X2
  347. LT B3,B1,RXC195 JUMP IF ENTRY TOO LONG
  348. *
  349. RXC115 IX0 X2+X3 COMPUTE ENDING ADDRESS OF READ
  350. IX0 X1-X0
  351. NG X0,RXC130 JUMP IF MUST READ TWO SEGMENTS
  352. *
  353. * /--- BLOCK -RXCB- 00 000 79/03/11 21.29
  354. *
  355. * READ REMAINDER OF DATA BLOCK IN ONE TRANSFER
  356. *
  357. SA0 A0+1 ADVANCE CM ADDRESS
  358. SB1 X2-1 GET LENGTH OF REMAINING DATA
  359. SX6 1
  360. IX0 X3+X6 ADVANCE ECS ADDRESS
  361. IX0 X0+X7
  362. + RE B1 READ REMAINING DATA TO CM
  363. RJ ECSPRTY
  364. *
  365. RXC120 IX3 X2+X3 ADVANCE *OUT* POINTER
  366. EQ RXC140
  367. *
  368. * READ REMAINDER OF DATA BLOCK IN TWO TRANSFERS
  369. *
  370. RXC130 SA0 A0+1 ADVANCE CM ADDRESS
  371. SX3 X3+1 ADVANCE *OUT* POINTER
  372. IX6 X1-X3 COMPUTE LENGTH OF 1ST TRANSFER
  373. SB1 X6
  374. IX0 X3+X7 ADVANCE ECS ADDRESS
  375. + RE B1 READ TO END OF CIRCULAR BUFFER
  376. RJ ECSPRTY
  377. SA0 A0+B1 ADVANCE CM ADDRESS
  378. IX3 X2-X6 COMPUTE LTH OF REMAINING DATA
  379. SX3 X3-1 ADJUST FOR HEADER WORD
  380. SB1 X3
  381. BX0 X7 RE-SET ECS ADDR TO FWA OF BUFF
  382. + RE B1 READ FROM BEGIN OF BUFFER
  383. RJ ECSPRTY
  384. *
  385. * /--- BLOCK -RXCB- 00 000 81/06/29 10.39
  386. *
  387. * UPDATE CIRCULAR BUFFER *OUT* POINTER
  388. *
  389. RXC140 IX0 X3-X1 CHECK IF AT END OF BUFFER
  390. NG X0,RXC142
  391. SX3 0 RE-SET *OUT* TO FWA OF BUFFER
  392. *
  393. RXC142 BX6 X3
  394. SA6 RXPTRS+1 CM ADDRESS OF *OUT* PTR
  395. SX0 1
  396. IX0 X0+X4 SET ECS ADDRESS OF *OUT* PTR
  397. WX6 X0 (-WXX- 1 WD WRITE, MAY CHG *A6*)
  398. BX6 X2 X6 = NUMBER CPU WORDS DATA READ
  399. EQ RXCB
  400. *
  401. RXC190 MX6 0 X6 = 0 = NO DATA IN BUFFER
  402. EQ RXCB
  403. *
  404. RXC195 MX6 -1 X6 = -1 = BUFFER ENTRY TOO LONG
  405. EQ RXCB
  406. *
  407. * /--- BLOCK -WXCB- 00 000 79/03/13 13.58
  408. *
  409. *
  410. WXCB EQ *
  411. *
  412. * READ CIRCULAR BUFFER IN/OUT POINTERS
  413. *
  414. MX7 -21 X7 = MASK
  415. SA1 B2 X1 = CIRCULAR BUFFER DESCRIPTOR
  416. BX4 -X7*X1 X4 = ECS ADDR OF IN/OUT PTRS
  417. BX0 X4
  418. SA0 RXPTRS
  419. + RE 2 READ IN/OUT POINTERS TO CM
  420. RJ ECSPRTY
  421. *
  422. * CHECK IF SUFFICIENT SPACE IN BUFFER FOR DATA
  423. *
  424. BX5 X1
  425. AX5 42 POSITION LENGTH OF BUFFER
  426. SX5 X5 X5 = LENGTH OF CIRCULAR BUFFER
  427. SA2 A0+1 X2 = *OUT* POINTER
  428. SA3 A0 X3 = *IN* POINTER
  429. IX6 X2-X3
  430. ZR X6,WXC120 CHECK IF BUFFER EMPTY
  431. PL X6,WXC122
  432. *
  433. WXC120 IX6 X5+X6 COMPUTE AMOUNT OF FREE SPACE
  434. *
  435. WXC122 SX6 X6-1 X6 = NUM WORDS OF BUFFER FREE
  436. MX0 -12
  437. SA2 B1 LOAD ENTRY HEADER WORD
  438. AX2 24
  439. BX2 -X0*X2 X2 = LENGTH OF DATA
  440. IX0 X6-X2
  441. NG X0,WXC190 CHECK IF SUFFICIENT SPACE
  442. *
  443. * /--- BLOCK -WXCB- 00 000 79/03/11 17.42
  444. *
  445. * CHECK IF DATA WILL WRAP AROUND BUFFER
  446. *
  447. MX0 -21
  448. AX1 21 POSITION ECS ADDR OF BUFFER
  449. BX7 -X0*X1 X7 = ECS ADDRESS OF BUFFER
  450. SA0 B1 A0 = CM ADDRESS OF DATA
  451. IX0 X2+X3 COMPUTE LWA FOR TRANSFER
  452. IX0 X5-X0
  453. NG X0,WXC130 JUMP IF MUST DO TWO TRANSFERS
  454. *
  455. * COPY DATA TO CIRCULAR BUFFER IN SINGLE TRANSFER
  456. *
  457. IX0 X3+X7 SET ECS ADDRESS FOR TRANSFER
  458. SB1 X2 SET LENGTH FOR TRANSFER
  459. + WE B1 WRITE DATA TO CIRCULAR BUFFER
  460. RJ ECSPRTY
  461. IX3 X2+X3 ADVANCE *IN* POINTER
  462. EQ WXC140
  463. *
  464. * COPY DATA TO CIRCULAR BUFFER IN TWO TRANSFERS
  465. *
  466. WXC130 IX6 X5-X3 COMPUTE LTH OF 1ST TRANSFER
  467. IX0 X3+X7 SET ECS ADDRESS FOR TRANSFER
  468. SB1 X6 SET LENGTH FOR TRANSFER
  469. + WE B1 WRITE TO END OF CIRCULAR BUFFER
  470. RJ ECSPRTY
  471. SA0 A0+B1 ADVANCE CM ADDRESS
  472. IX3 X2-X6 COMPUTE REMAINING LTH OF DATA
  473. SB1 X3 SET LENGTH FOR TRANSFER
  474. BX0 X7 SET ECS ADDRESS FOR TRANSFER
  475. + WE B1 WRITE FROM BEGIN OF BUFFER
  476. RJ ECSPRTY
  477. *
  478. * /--- BLOCK -WXCB- 00 000 79/03/20 11.34
  479. *
  480. * UPDATE CIRCULAR BUFFER *IN* POINTER
  481. *
  482. WXC140 IX0 X3-X5 CHECK IF AT END OF BUFFER
  483. NG X0,WXC142
  484. SX3 0 RE-SET *IN* TO FWA OF BUFFER
  485. *
  486. WXC142 BX6 X3
  487. SA6 RXPTRS CM ADDRESS OF *IN* PTR
  488. WX6 X4 (-WXX- 1 WD WRITE, MAY CHG *A6*)
  489. SX6 1 X6 = 1 = DATA WRITTEN
  490. EQ WXCB
  491. *
  492. WXC190 MX6 0 X6 = 0 = BUFFER FULL
  493. BX1 -X0 (X1) = NUMBER OF WORDS SHORT
  494. EQ WXCB
  495. *
  496. *
  497. *
  498. END