User Tools

Site Tools


cdc:nos2.source:nam5871:np_d2n

NP$D2N

Table Of Contents

Source Code

NP$D2N.txt
  1. *DECK,NP$D2N
  2. *IF,DEF,XFR
  3. IDENT NP$D2N
  4. ENTRY NP$D2N
  5. NP$D2N BSS 1
  6. *
  7. * THIS TRANSLATION ROUTINE TAKES ONE CHARACTER AT A TIME FROM
  8. * THE DISK BUFFER AND WRITES IT'S EQUIVALENT ASCII (NETWORK 8)
  9. * INTO THE NETWORK BUFFER.
  10. *
  11. * THE PROCESS GOES ON UNTIL ONE OF THE TWO OCCURS :
  12. * - THE DISK BECOMES EMPTY
  13. * - THE NETWORK BUFFER BECOMES FULL
  14. * THEN THE ROUTINE EXITS WITH THE PROPER FLAG SET.
  15. *
  16. * ENTRY PARAMETERS :
  17. * - ADDRESS OF NETWORK FET
  18. * - ADDRESS OF DISK FET
  19. * - ADDRESS OF CONVERSION TABLE PARAMETER BLOCK
  20. *
  21. * THE STRUCTURE OF THE PARAMETER BLOCK IS THE FOLLOWING:
  22. *
  23. * +--------------------+
  24. * WORD 0 1 *NETBUF* FULL FLAG 1
  25. * +--------------------+
  26. * 1 1 *DISKBUF* EMPTY FLG1
  27. * +--------------------+
  28. * 2 1 NCOUNT 1
  29. * +--------------------+
  30. * 3 1 NBYTE 1
  31. * +--------------------+
  32. * 4 1 DBIT 1
  33. * +--------------------+
  34. * 5 1 CONVERSION STATE 1
  35. * +--------------------+
  36. * 6 1 CONVR. TABLE ADR. 1
  37. * +--------------------+
  38. * 7 1 STEPSIZE ON DISK 1
  39. * +--------------------+
  40. * 8 1 RESERVED 1
  41. * +--------------------+
  42. *
  43. * WHERE - * *NETBUF FULL* IS SET TO 1 WHEN NO MORE ROOM IN NETWORK
  44. * BUFFER (NETPUT IS REQUIRED)
  45. * * *DISKBUF EMPTY* IS SET TO 1 WHEN ALL DATA USED, BUFFER
  46. * EMPTIED AND STILL SPACE AVAILABLE IN *NETBUF*.
  47. * (NO NETPUT IS DONE UNLESS E-O-R E-O-I, AND ANOTHER READ
  48. * REQUEST IS TO BE ISSUED)
  49. * * NCOUNT IS THE NUMBER OF CHARACTERS WRITTEN TO NETBUF (TO
  50. * BE USED AS TLC WHEN NETPUTTING THE MESSAGE)
  51. * * NBYTE IS NUMBER OF BITS TO LEFT-SHIFT IN ORDER TO BRING A
  52. * CHARACTER FROM A RIGHTMOST POSITION TO THE CURRENT ONE.
  53. * IT STARTS COUNTING FROM 52 (WHEN 1ST BYTE IS A COMPLETE
  54. * CHARACTER) AND COUNTS DOWN STEP 8.
  55. * * DBIT IS THE NUMBER OF BITS TO SHIFT A CHARACTER FROM IT'S
  56. * CURRENT POSITION IN *DISKBUF* TO A RIGHTMOST POSITION.
  57. * FOR DISPLAY CODE FILES - BEGIN AT 6 STEP 6 UP.
  58. * ASCII FILES - BEGIN AT 12 STEP 12 UP.
  59. * * STATE REMEMBERS A LAST SPECIAL EVENT TILL THE NEXT ENTRY.
  60. * SPECIAL EVENTS START WHEN A COLON(:) IS READ FROM DISK.
  61. * IT MAY BE A COLON BUT IT ALSO MAY BE A Z-BYTE.
  62. * WE KEEP A COUNTER OF CONSEQUTIVE (:) (IN *B3*) UNTIL :
  63. * -Z-BYTE CONDITION MET (2 OR MORE COLONS AND END-OF-WORD)
  64. * -A NON-ZERO CHARACTER IS ENCOUNTERED.
  65. * IN THE LATER CASE WE GO INTO A LOOP TO SEND THE
  66. * APPROPRIATE NUMBER OF COLONS TO THE NETWORK BUFFER,UNTIL
  67. * COUNTER GOES BACK TO ZERO.
  68. * IF AT THIS TIME THE NETWORK BUFFER BECOMES FULL, WE
  69. * REMEMBER THE REMAINING NUMBER OF REQUIRED COLONS + LAST
  70. * NON-ZERO CHARACTER READ TO SEND THEM IN NEXT ENTRY.
  71. * * ADDRESS OF CONVERSION TABLE - IS CASE OF 6-->8 OR 8-->6.
  72. * * STEP SIZE IS 6 FOR DISK DISPLAY-CODE FILES,
  73. * 12 FOR DISK ASCII FILES.
  74. *
  75. * NOTE FOR FILE TRANSFER
  76. * ----------------------
  77. * BECAUSE THE SENDER SENDS ONLY *MSG* BLOCKS,EVERY BLOCK SHOULD
  78. * START WITH A *TBH* OF 6 OCTETS.
  79. * IT IS THE RESPONSIBILITY OF THE SENDER,PRIOR TO CALLING THIS
  80. * ROUTINE FOR THE FIRST TIME WHEN CONSTRUCTING A BLOCK, TO SET
  81. * THE FOLLOWING :
  82. * - *IN* POINTER = *OUT* POINTER = *FIRST* POINTER
  83. * - THE *TBH* IN THE FIRST 6 OCTETS (ANYTHING APPLICABLE)
  84. * - SET *NCOUNT* TO 6
  85. * - SET *NBYTE* TO 4
  86. *
  87. * THE PRESETTING OF REGISTERS INCLUDE :
  88. *
  89. * A1 - ADDRESS OF NET FET+1 (*IN* POINTER)
  90. * A2 - ADDRESS OF DISK FET+1 (*IN* POINTER)
  91. * A4 - POINTER TO DISK BUFFER *OUT* WORD.
  92. * A5 - POINTER TO NET BUFFER *IN* WORD.
  93. *
  94. * X4 - CURRENT (WORKING) WORD IN DISKBUF
  95. * X5 - ACCUMULATED NETBUF WORD (POINTED BY *IN*)
  96. *
  97. * B1 - 1
  98. * B2 - ADDRESS OF FIRST ENTRY IN CONVERSION TABLE
  99. * B3 - CONVERSION STATE
  100. * B4 - DBIT
  101. * B5 - NBYTE
  102. * B6 - COUNT
  103. *
  104. *
  105. SB1 1
  106. SA2 A1+B1 SECOND PARAMETER ADDRESS
  107. SA3 A2+B1 THIRD PARAMETER ADDRESS
  108. *
  109. * THE PARAMETERS GIVEN ARE WORDS CONTAINING THE A D D R E S S
  110. * OF THE REQUIRED PARAMETERS (FETS,PARAMETER BLOCK)
  111. *
  112. SA1 X1 GET POINTER TO THE ACTUAL ADDRESS
  113. SA2 X2
  114. SA3 X3
  115.  
  116. SA1 X1+B1 POINT TO NFET WORD CONTAINING *IN*
  117. SA5 X1 *NETBUF* *IN* WORD
  118. SA2 X2+B1 POINT TO DFET WORD CONTAINING *IN*
  119. SA4 A2+B1 DFET WORD CONTAINING *OUT*
  120. SA4 X4 *DISKBUF* *OUT* WORD
  121. BX6 X3
  122. SA6 PARAM SAVE ADDRESS OF PARAMETER TABLE
  123.  
  124. MX6 0
  125. SA6 X3 CLEAR FLAG OF *NETBUF* FULL
  126. SA6 X3+B1 AND FLAG OF *DISKBUF* EMPTIED
  127.  
  128. SA3 A6+B1
  129. SB6 X3 *** NCOUNT *** GOES INTO *B6*
  130. SA3 A3+B1
  131. SB5 X3 *** NBYTE *** GOES INTO *B5*
  132. SA3 A3+B1
  133. SB4 X3 *** DBIT *** GOES INTO *B4*
  134.  
  135. SA3 A3+B1 STATE WORD
  136. SB3 X3 STATE WORD IS 48/0,6/'LAST CHAR',6/#ZEROS
  137. SA6 A3 CLEAR STATE WORD
  138.  
  139. SA3 A3+B1 WORD 7 - CONVERSION TABLE ADDRESS
  140. SB2 X3
  141. SA3 A3+B1 STEP SIZE TO GO IN DISKBUF (6 OR 12)
  142. BX6 X3
  143. SA6 STEP
  144. SA3 A3+B1 BLOCKSIZE
  145. BX6 X3
  146. SA6 BLKZ
  147. *
  148. * CHECK FIRST FOR ANY LEFT-OVERS FROM PREVIOUS ENTRY
  149. *
  150. MX0 -6 TO EXTRACT SIX RIGHT MOST BITS
  151. SX6 B3
  152. BX7 X0*X6 ISOLATE THE 'LAST CHAR' INDICATOR
  153. ZR X7,BEGIN0 NO LEFT-OVER TO WRITE FROM PREVIOUS ENTRY
  154. BX7 -X0*X6 NUMBER OF ZEROS IN STATUS WORD
  155. ZR X7,LCHARNZ WRITE ONLY 'LAST CHAR'
  156. EQ LCHARPZ WRITE SOME COLONS THEN THE 'LAST CHAR'
  157. *
  158. * CHECK IF FILE ENTERED HAD NO DATA,CASE WE EXIT IMMEDIATLY.
  159. *
  160. BEGIN0 SB7 X2 *IN* ADDRESS
  161. SB7 A4-B7 *OUT* - *IN*
  162. EQ B7,B0,BEGIN3 IF FILE ENTERED AS EMPTY
  163.  
  164. BEGIN BSS 0
  165. *
  166. * AT THIS SECTION GET A CHARACTER FROM DISKBUF.
  167. *
  168. * *A4* POINTS TO *OUT* WORD AND CAN BE USED TO EXTRACT
  169. * CURRENT CHARACTER UNTIL END-OF-WORD REACHED.
  170. *
  171. * WHEN ADVANCING TO NEXT WORD IS REQUIRED, MAKE SURE OUT
  172. * DOES NOT GO BEOND *IN* POINTER.
  173. *
  174. SB7 66 LAST POSIBLE CHARACTER IN THE WORD
  175. LT B4,B7,BEGIN1 IF NOT END-OF-WORD
  176. *
  177. * PREVIOUS CYCLE USED LAST CHARACTER FROM A WORD IN *DISKBUF*.
  178. * SO, MOVE *OUT* TO NEXT WORD.
  179. * IF BECAME = *IN* THEN WE EMPTIED THE BUFFER AND WE RETURN.
  180. *
  181. BEGIN2 SA4 A4+B1 ADVANCE THE *OUT* POINTER
  182.  
  183. * CHECK IF WE PASSED *LIMIT*
  184.  
  185. SA3 A2+2 DFET WORD CONTAINING *LIMIT*
  186. SB7 X3
  187. SB7 A4-B7 *OUT* - *LIMIT*
  188. NE B7,B0,NOROL IF LIMIT NOT YET REACHED
  189.  
  190. SA3 A2-B1 DFET WORD CONTAINING *FIRST*
  191. SA4 X3 SET *OUT* TO BE *FIRST*
  192.  
  193. NOROL SA3 STEP
  194. SB4 X3 INITILIZE DBIT TO BEGINNING OF NEXT WORD
  195. *
  196. * CHECK IF BUFFER BECAME EMPTY
  197. *
  198. SB7 X2 *IN* ADDRESS
  199. SB7 A4-B7 *OUT* - *IN*
  200. NE B7,B0,BEGIN1 IF FILE NOT YET EMPTIED.
  201.  
  202. BX6 X5 GET WHATEVER AVAILABLE ON WORKING OUT REG
  203. SA6 A5 WRITE INTO *NETBUF* PARTIAL WORD
  204.  
  205. BEGIN3 SA3 PARAM
  206. SX6 1 FLAG TO INDICATE DISKBUF EMPTIED.
  207. SA6 X3+B1 SET FLAG IN WORD 1 OF PARAMETER TABLE
  208. EQ EXITN
  209.  
  210. BEGIN1 BSS 0
  211. *
  212. * *X4* HAS THE CURRENT WORKING WORD
  213. * *B4* HAS NUMBER OF BITS TO SHIFT TO GET CHAR TO RIGHT SIDE
  214. *
  215. LX7 X4,B4 CHARACTER IN RIGHTMOST BITS
  216. SA3 STEP
  217. SX3 X3-6
  218. ZR X3,SIX IF DISPLAY CODE CONVERSION (STEP = 6)
  219.  
  220. TWELVE BSS 0
  221. *
  222. * WE HAVE AN ASCII DISK DATA (8 BITS IN TWELVE)
  223. * WE USE THE RIGHTMOST 8 BITS FOR TRANSMITION.
  224. * ONLY EXCEPTION IS *NULL* CHARACTER, WHERE BIT 11 IS SET.
  225. * (4000B ---> 0000B)
  226. *
  227. SB4 B4+12 GET READY FOR NEXT CHARACTER
  228. MX0 -12
  229. BX7 -X0*X7 EXTRUCT 12 RIGHTMOST BITS
  230. ZR X7,ZBYTE12 * ZERO OUT *
  231. MX0 -11
  232. BX7 -X0*X7 *THE 12TH BIT OF 4000*
  233. EQ WRITEN
  234.  
  235. ZBYTE12 BSS 0
  236. *
  237. * ZERO BYTE. WE RIGHT ONE *US* AND GO TO NEXT WORD, BECAUSE
  238. * ALL OTHER BYTES MUST BE Z-BYTES ALSO (NULL HAS BIT 11 SET)
  239. *
  240. SB4 72 SIGNAL END-OF-LINE
  241. SX7 037B ASCII *US* (UNIT SEPERATOR)
  242. EQ WRITEN
  243.  
  244. SIX SB4 B4+6 GET READY FOR NEXT CHARACTER
  245. MX0 -6
  246. BX7 -X0*X7 RIGHTMOST DISPLAY CHARACTER
  247.  
  248. SA3 X7+B2 CONVERTION TABLE ENTRY WITH INDEX=ORDINAL
  249.  
  250. MX0 12
  251. BX6 X0*X3 FUNCTION GOES INTO X6
  252. MX0 52
  253. BX7 -X0*X3 ASCII VALUE OF CONVERTED CHARACTER
  254. NZ X6,ZRBYT6 IF ZERO-BYTE TERMINATOR
  255.  
  256. REGCHAR BSS 0
  257. *
  258. * WHEN A CHARACTER IS NON ZERO , WE CHECK IF WE ALREADY HAVE
  259. * SOME ZEROS (NOT AT WORD BOUNDARY), WHICH MEANS THAT WE HAVE
  260. * TO TREAT THEM AS COLONS. (64 CHAR SET)
  261. *
  262. * WE SAVE THE FIRST NON-ZERO CHARACTER AFTER A ZERO SEQUENCE,
  263. * IN CASE WE DO NOT HAVE ENOUGH SPACE IN THE NETWORK BUFFER FOR
  264. * ALL CHARACTERS (COLONS AND PRESENT)
  265. * IN THIS CASE, WE CONTINUE WRITING IN THE NEXT ENTRY.
  266. *
  267. EQ B3,B0,WRITEN IF NO OUTSTANDING ZEROS
  268.  
  269. ZLOOP SX3 B3
  270. MX0 -6
  271. BX6 -X0*X3 GET NO OF ZEROS FROM RIGHTMOST BITS
  272. NZ X6,PZEROS IF NUMBER OF ZEROS NOT EQUAL 0
  273.  
  274. * WE ONLY HAVE THE 'LAST CHAR' LEFT TO WRITE
  275.  
  276. LCHARNZ SX3 B3
  277. SB3 B0 CLEAR INDICATOR
  278. BX7 X3
  279. AX7 6 'LAST CHAR' TO RIGHTMOST POSITION
  280. EQ WRITEN GO WRITE IT
  281.  
  282. PZEROS BSS 0
  283. *
  284. * WE STILL HAVE SOME ZEROS WE SHOULD GENERATE COLONS AGAINST.
  285. * IF THE 'LAST CHAR' STILL ZERO, IT MEANS THE CURRENT SHOULD
  286. * BECOME THE 'LAST CHAR' AND BE INSERTED TO *B3*
  287. *
  288. BX6 X3
  289. AX6 6 'LAST CHAR' TO RIGHTMOST 6 BITS
  290. NZ X6,LCHARPZ IF 'LAST CHAR' ALREADY IN
  291. LX7 6 MOVE CURRENT CHAR TO 'LAST CHAR' POSITION
  292. BX3 X3+X7
  293. SB3 X3 INSERT NEW 'LAST CHAR' INTO THE STATUS.
  294.  
  295. LCHARPZ BSS 0
  296. *
  297. * WE HAVE BOTH THE 'LAST CHAR' AND SOME COLONS TO WRITE OUT.
  298. * SO WE SEND A COLON , DECREMENT COUNTER AND LOOP UNTIL DONE.
  299. *
  300. SB3 B3-B1
  301. SX7 072B ASCII COLON
  302. EQ WRITEN
  303.  
  304. ZRBYT6 BSS 0
  305. *
  306. * INCREMENT NUMBER OF ZEROS.
  307. * IF TWO OR MORE AND END-OF-WORD IT IS AN END-OF-LINE (*US*)
  308. *
  309. SB3 B3+B1 INCREMENT NUMBER OF ZEROS
  310. SB7 66
  311. LT B4,B7,BEGIN1 IF NOT LAST CHAR IN WORD
  312.  
  313. EQ B3,B1,BEGIN2 ONLY 1 ZERO BYTE AT END-OF-WORD
  314.  
  315. * TWO OR MORE ZERO BYTES AT THE END OF A WORD
  316.  
  317. SB3 B0 CLEAR STATUS WORD
  318. SX7 037B ASCII *US*
  319. EQ WRITEN GO WRITE IT
  320.  
  321. WRITEN BSS 0
  322. *
  323. * WE COME TO THIS SECTION TO WRITE A CHARACTER IN *NETBUF*.
  324. * THE CHARACTER IS RIGHT JUSTIFIED IN *X7*
  325. * AFTER WRITING THE CHARACTER WE TRY TO GO TO THE NEXT CHAR
  326. * POSITION IN *NETBUF*.
  327. * IF BUFFER FULL SET FLAG AND EXIT.
  328. * ELSE, GO GET NEXT CHAR (USUALLY FROM BEGIN UNLESS B3 IS NOT
  329. * ZERO WHERE WE LOOP TO ZLLOP FOR NEXT COLON)
  330. *
  331. * *B5* INDICATES THE SHIFT REQUIRED TO GET CHARACTER TO PLACE.
  332. * NEGATIVE *B5* MEANS CHARACTER SHOULD BE SPLIT BETWEEN TWO
  333. * WORDS (THIS HAPPENS ONLY WHEN NEXT WORD IS GUARANTEED)
  334. *
  335. SB6 B6+B1 INCREMENT THE *NCOUNT*
  336. LT B5,B0,WRITE1 IF IT IS A SPLIT CHARACTER
  337. EQ WRITE2 FOR NON-SPLIT CHARS.
  338.  
  339. WRITE1 BX6 X7
  340. AX6 4 FOUR LEFT BITS OF CHARACTER
  341. BX6 X5+X6 INSERT IT INTO WORKING REGISTER *X5*
  342. SA6 A5 AND WRITE THE WHOLE WORD TO *NETBUF*
  343. SA5 A5+B1 ADVANCE TO NEXT WORD FOR 2ND HALF
  344. MX0 -4
  345. BX5 -X0*X7 REMAINING 4 BITS AT RIGHTMOST SIDE
  346. LX5 56 MOVE TO LEFT SIDE
  347. SB5 48 POSITION NEXT CHARACTER (HALF CHAR SHIFT)
  348. EQ ENDW
  349.  
  350. WRITE2 LX7 B5 MOVE CHAR TO CURRENT POSITION IN *NETBUF*
  351. BX5 X5+X7 AND INSERT INTO WORKING REGISTER *X5*
  352.  
  353. NE B5,B0,WRITE3 IF NOT LAST BYTE IN WORD
  354.  
  355. BX6 X5
  356. SA6 A5 WRITE OUT THE FULLY COMPOSED WORD
  357.  
  358. WRITE3 SB5 B5-8
  359. LT B5,B0,WRITE4 IF NEED TO MOVE TO NEXT WORD
  360. EQ ENDW
  361.  
  362. WRITE4 BSS 0
  363. *
  364. * WE ENTER HERE IF CHAR WRITTEN IS LAST(COMPLETE) IN THE WORD.
  365. * *B5* CAN HAVE THE FOLLOWING VALUES :
  366. * -4 : HALF CHARACTER STILL LEFT AT WORD TO BE FILLED.
  367. * -8 : LAST WORD IS EXACTLLY FILLED UP
  368. *
  369. * IF WE CAN MOVE TO NEXT WORD -
  370. * IF *B5* = -8 WE MOVE TO NEXT WORD AND CHANGE *B5* = 52
  371. * IF NOT -
  372. * SET THE *NETWORK FULL* FLAG
  373. * IF *B5* = -4 FLUSH THE LAST UNCOMPLETED WORD FROM *X5*
  374. *
  375. SA3 A1+2 NFET WORD CONTAINING *LIMIT*
  376. SB7 X3-1 *LIMIT-1* ADDRESS
  377. SB7 A5-B7 *(IN+1) - LIMIT*
  378. NE B7,B0,WRITE5 IF *LIMIT* NOT REACHED
  379.  
  380. * LIMIT REACHED,BUFFER FILLED.
  381.  
  382. SB5 B5+4
  383. NE B5,B0,WRITE6 IF LAST WORD WAS COMPLETELY COMPOSED
  384. BX6 X5
  385. SA6 A5 WRITE LAST WORD (4 BITS MISSING AT END)
  386.  
  387. WRITE6 SA3 PARAM
  388. SX6 1 FLAG TO SIGNAL *NETBUF FULL*
  389. SA6 X3 STORE IN PARAMETER BLOCK (WORD 0)
  390. EQ EXITN
  391.  
  392. WRITE5 SB7 -4
  393. EQ B5,B7,ENDW IF STILL HALF CHAR AVAILABLE
  394.  
  395. SA5 A5+B1 ADVANCE TO NEXT WORD
  396. MX5 0 PRESET FOR NEXT DATA COLLECTION
  397. SB5 52 POSITION OF NEXT CHAR AT THE BEGINNING
  398.  
  399. ENDW BSS 0
  400. *
  401. * THE WRITE IS COMPLETED. GET NEXT CHARACTER TO WRITE OUT.
  402. * IF *B3* = 0 THEN GET IT FROM *DISKBUF* (BEGIN)
  403. * ELSE WE STILL HAVE SOME OUTSTANDING COLONS, LOOP BACK
  404. * TO ZLLOP UNTILL ALL EXHASTED.
  405. *
  406. SA3 BLKZ
  407. SB7 X3
  408. NE B6,B7,AGAIN
  409. BX6 X5
  410. SA6 A5 WRITE LAST WORD (4 BITS MISSING AT END)
  411.  
  412. WRITE8 SA3 PARAM
  413. SX6 1 FLAG TO SIGNAL *NETBUF FULL*
  414. SA6 X3 STORE IN PARAMETER BLOCK (WORD 0)
  415. EQ EXITN
  416. AGAIN EQ B3,B0,BEGIN
  417. EQ ZLOOP
  418.  
  419. EXITN BSS 0
  420. *
  421. * WHEN WE ARRIVE HERE ONE OF THE FLAGS IS SET
  422. * (*NETBUF FULL* OR *DISKBUF EMPTY* )
  423. * ALL WE NEED MORE TO DO IS STORE ALL VARIABLES IN TABLES FOR
  424. * NEXT ENTRY.
  425. *
  426. SA3 PARAM
  427. SX6 B6
  428. SA6 X3+2 SAVE *NCOUNT* (WORD 3 OF PARAM TABLE)
  429. SX6 B5
  430. SA6 A6+B1 SAVE *NBYTE* (WORD 4 OF PARAM TABLE)
  431. SX6 B4
  432. SA6 A6+B1 SAVE *DBIT* (WORD 5 OF PARAM TABLE)
  433. SX6 B3
  434. SA6 A6+B1 SAVE STATE OF TRANSFER
  435.  
  436. * SAVE *A4* (*OUT* POINTER OF DISKBUF) BACK INTO DFET
  437.  
  438. MX0 42
  439. SA2 A2+B1 POINT TO WORD CONTAINING *OUT* POINTER
  440. BX2 X0*X2 CLEAR THE ADDRESS FIELD
  441. MX3 0
  442. SX3 A4 THE CORRECT VALUE OF *OUT* ADDRESS
  443. BX7 X2+X3 INSERT IT
  444. SA7 A2 AND WRITE BACK THE DFET WORD
  445.  
  446. * SAVE *A5* (*IN* POINTER OF NETBUF) BACK IN THE NFET
  447.  
  448. SA3 A1 NFET WORD CONTAINING *IN*
  449. BX3 X0*X3 MASK OUT OLD ADDRESS
  450. MX2 0
  451. SX2 A5 GET NEW ADDRESS TO BE USED
  452. BX6 X2+X3 INSERT NEW ADDRESS
  453. SA6 A3 WRITE BACK TO NFET
  454.  
  455. EQ NP$D2N
  456.  
  457. PARAM BSSZ 1
  458. STEP BSSZ 1
  459. BLKZ BSSZ 1
  460.  
  461. END
  462. *ENDIF
cdc/nos2.source/nam5871/np_d2n.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator