*DECK NS$N06 USETEXT CYB$NS USETEXT DTSB$NS USETEXT ERR$NS USETEXT NAT$NS USETEXT NDF$NS USETEXT SMB$NS USETEXT SMD$NS PROC NS$N06(ERRCODE); # PROCESS NPU/DT/N (DUMP) # # TITLE NS$N06 - PROCESS NPU/DT/N (DUMP). # BEGIN # NS$N06 # # ** NS$N06 - PROCESS NPU/DT/N (DUMP). * * J.C. LEE 1981 * * THIS ROUTINE PROCESSES NPU/DT/N (DUMP). * * * PROC NS$N06(ERRCODE) * * ENTRY: * NONE. * * EXIT: * ERRCODE. * * METHOD: * DECREMENT DUMP BATCH COUNT (DBC) * CALCULATE DUMP DATA HEX WORDS. * IF DUMP DATA WITHIN LIMIT AND DBC NOT YET EXHAUSTED: * CLEAR RETRY COUNT. * FORMAT DUMP PACKET ENTRY. * TRANSFER DUMP PACKET TO DUMP TSB. * UPDATE DBC. * IF DBC EQ 0 * IF DUMP DIRECTIVE COMPLETE * PROCESS NEXT DPCB DIRECTIVE. * ELSE * START DUMP DATA. * START LOCAL TIMER. * ELSE * SET ERRCODE TO "BAD DUMP RESPONSE FROM NPU". * # ITEM ERRCODE U; # ERRCODE # $BEGIN XREF BEGIN PROC NS$DBG; # TRACE PROCEDURE CALL # END $END XREF BEGIN FUNC NS$FEC U; # FORMAT ERROR CODE # PROC NS$SDB; # SEND DUMP BATCH # PROC NS$SLT; # START RESPONSE TIMER # PROC NS$XPD; # PROCESS NEXT XPCB DIRECTIVE # PROC TSBINFO; # LOCATE TSB # PROC WRITEW; # WRITEW DATA TRANSFER MACRO CALL # END ITEM CMWORDS U; # NUMBER OF CM WORDS IN NPU DUMP DATA # ITEM DBC U; # DUMP BATCH COUNT # ITEM I I; # TEMPORARY VARIABLE # ITEM J I; # TEMPORARY VARIABLE # ITEM NPUWORDS U; # NUMBER OF NPU WORDS IN DUMP RESPONSE # ITEM TSBFWA U; # FWA OF TSB # ITEM TSBSIZE U; # TSB SIZE # BASED ARRAY DSM$DATA [1:MAX$DPSIZE] S(1); BEGIN # DUMP DATA WORD FORMAT IN DUMP RESPONSE # ITEM DSM$DATA1 U(00,20,40); # DUMP DATA IN FIRST WORD # ITEM DSM$DATA2 U(00,00,20); # DUMP DATA IN NEXT WORD # END BASED ARRAY NDF$DPDATA [1:MAX$DPSIZE] S(1); BEGIN # DUMP PACKET DATA FORMAT # ITEM DPD$DATAWD U(00,00,60); ITEM DPD$DATA1 U(00,00,40); ITEM DPD$DATA2 U(00,40,20); END CONTROL EJECT; $BEGIN NS$DBG("N06"); # TRACE CALL # $END ERRCODE = 0; DBC = NAT$BC[0] - 1; # DECREMENT DUMP BATCH COUNT # NPUWORDS = (ABHTLC[0] - LNPUDTDN + 1) / 2; # DUMP DATA HEX WORDS # IF NPUWORDS LQ MAX$DPHWDS # DUMP DATA WITHIN ALLOWED LIMIT# AND DBC GQ 0 # DUMP BATCH NOT YET EXHAUSTED # THEN # VALID DUMP RESPONSE # BEGIN NAT$RETRYS[0] = 0; # FORMAT DUMP PACKET ENTRY # P = LOC(ABH$WORD); # FWA OF DUMP PACKET HEADER # CMWORDS = (NPUWORDS*16 + (WL-1)) / WL; # DUMP DATA CM WORDS # DPH$WORD[0] = 0; DPH$WC[0] = CMWORDS + L$DPHDR; # CM WORD COUNT OF ENTRY # DPH$NC[0] = NPUWORDS; # HEX WORD COUNT OF ENTRY # DPH$BA1[0] = NPUBA1[0]; # DUMP PACKET BEGINNING ADDRESS # DPH$BA2[0] = NPUBA2[0]; P = LOC(SMB$BUFFER); # FWA OF DUMP PACKET DATA # P = LOC(SMB$BUFFER) + (((2*LNPUDTDN+14)/15) - 1); J = 1; FOR I=1 STEP 1 UNTIL CMWORDS DO BEGIN # MOVE DUMP DATA FROM SM TO DUMP PACKET # DPD$DATA1[I] = DSM$DATA1[J]; J = J + 1; DPD$DATA2[I] = DSM$DATA2[J]; END # TRANSFER DUMP PACKET TO DUMP TSB # TSBINFO(TSBSIZE,TSBFWA,NAT$NDTSBN[0]); # LOCATE DUMP TSB # P = TSBFWA + L$DTSBHDR; # FWA OF FET # WRITEW(DTSB$FET,NDF$DPHDR,L$DPHDR+CMWORDS); # TRANSFER PACKET # NAT$BC[0] = DBC; # UPDATE DUMP BATCH COUNT # IF DBC EQ 0 THEN # WHOLE DUMP BATCH RECEIVED # BEGIN IF NAT$F$DP[0] THEN # DUMP DIRECTIVE COMPLETES # BEGIN NS$XPD(ERRCODE); # PROCESS NEXT DPCB DIRECTIVE # END ELSE # MORE DATA TO DUMP # BEGIN NS$SDB; # SEND DUMP BATCH # NS$SLT; # START RESPONSE TIMER # END END END ELSE # BAD DUMP RESPONSE FROM NPU # BEGIN ERRCODE = NS$FEC(EC"ERR$SM",SMEC"NSM$DMP"); END RETURN; END # NS$N06 # TERM