ASMB,R,Q,C HED <#MAAS> ASSIGN MA VARIABLES * (C) HEWLETT-PACKARD CO. 1980 NAM #MAAS,7 91750-1X015 REV 2013 800725 ALL (MA) ENT #MAAS EXT #MARL,#MCTR,#MARN,#MTBL,$OPSY,#NODE EXT $LIBR,$LIBX,.MVW,.ENTR,RNRQ,.LDX ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 * #MAAS * ------- * SOURCE: 91750-18015 * RELOC: 91750-16015 * PGMR: TOM MILNER 11.01.79 * * ASSIGNS MESSAGE ACCOUNTING (MA) SEQUENCE VARIABLES TO * THE REQUEST/REPLY BUFFER. * * CALL FORMAT: * JSB #MAAS * DEF *+3 * DEF REQUEST/REPLY BUFFER * DEF REQUEST/REPLY BUFFER LENGTH * < ERROR RTN - CONTAINS ERROR CODE > * < GOOD RTN - = UNIQUE MA IDENTIFIER > * * THE '#MAAS' ALGORITHM (IN PASCAL) HAS BEEN APPENDED TO * THE MA ERS FOR THE READER'S AMUSEMENT. #MAAS'S OPERATION IS * AS FOLLOWS: * * 1. ACCESS TO THE MA TABLE IS LOCKED (BY RN). * 2. IF THE MESSAGE IS A REPLY THE SOURCE NODE IS USED FOR * THE SEARCH KEY IN (3.), OTHERWISE THE DESTINATION NODE * IS USED. * 3. THE ENTRY WITH THE DESIRED NODE (FROM 2.) IS SEARCHED * FOR IN THE MA TABLE AND MOVED INTO A LOCAL BUFFER FOR * EASIER ADDRESSING. * 4. IF THE CHANNEL IS... * UP OR PENDING : * MA VARIABLES ARE ASSIGNED TO THE REQUEST BUFFER * AS LONG AS THE RETRY COUNT AND MAX OUTSTANDING * MESSAGES ARE NOT EXECEEDED. * DOWN : * THE ABOVE PROCEDURE IS EXECUTED AND THE * CONTROL WORD IS MODIFIED TO ADDRESS LU ZERO. * NONMA : * THE MA HEADER IS SET TO ZEROS. * 5. THE CHANNEL RECORD IS RESTORED (IF ANY CHANGES OCCURED) TO * THE MA TABLE AND THE RESOURCE NUMBER IS UNLOCKED. SKP *GLBLK-START * ****************************************************************** * * * G L O B A L B L O C K REV XXXX 790531 * * * * GLOBAL OFFSETS INTO DS/1000 MESSAGE BUFFERS, USED BY: * * * * REMAT, RFMST, DEXEC, DMESS, FLOAD, POPEN, #MAST * * GET, #SLAV, RQCNV, RPCNV, GRPM, LSTEN, PTOPM * * EXECM, EXECW, OPERM, RFAM1, RFAM2, DLIST, DLIS3 * * * ****************************************************************** * ***!!!!! THE FIRST 7 WORDS (#STR THRU #ENO) MUST BE FIXED !!!!!*** #STR EQU 0 STREAM WORD. #SEQ EQU #STR+1 SEQUENCE NUMBER. #SRC EQU #SEQ+1 SOURCE NODE #. #DST EQU #SRC+1 DEST. NODE #. #EC1 EQU #DST+1 REPLY ECOD1. #EC2 EQU #EC1+1 REPLY ECOD2. #ENO EQU #EC2+1 NUMBER OF NODE REPORTING ERROR. * #ECQ EQU #ENO+1 ERROR CODE QUALIFIER (BITS 4 TO 7) #LVL EQU #ECQ MESSAGE FORMAT LEVEL (BITS 0 TO 3) #MAS EQU #LVL+1 MA "SEND" SEQ. # #MAR EQU #MAS+1 MA "RECV" SEQ. # #MAC EQU #MAR+1 MA "CANCEL" FLAGS #HCT EQU #MAC+1 HOP COUNT #SID EQU #HCT+1 SESSION ID WORD * #EHD EQU #SID LAST ITEM OF HEADER #MHD EQU #EHD+1 MINIMUM HEADER SIZE #REQ EQU #MHD START OF REQUEST SPECIFIC AREA #REP EQU #MHD START OF REPLY SPECIFIC AREA * #MXR EQU #MHD+24 <<< MAXIMUM DS REQ/REPLY BUFFER SIZE >>> #LSZ EQU 2 <<< SIZE OF LOCAL APPENDAGE AREA >>> * ****************************************************************** * *GLBLK-END SKP SUP RQBUF NOP ADDRESS OF REQUEST BUFFER RQLEN NOP ADDRESS OF REQUEST BUFFER LENGTH CONWD NOP ADDRESS OF CONTROL WORD (LU) SPC 1 #MAAS NOP JSB .ENTR GET PARAMETER DEF RQBUF JSB CKDMS ONE-TIME CHECK FOR DMS; 'NOP'ED LDA #MCTR SZA MA INITIALIZED IN SYSTEM? JMP WAIT . YES ISZ #MAAS . NO, RETURN IMMEDIATELY JMP #MAAS,I * * LOCK ACCESS TO MA TABLE. * WAIT JSB RNRQ WAIT FOR ACCESS TO TABLE DEF *+4 DEF LK DEF #MARN (MA RESOURCE NUMBER) DEF FETCH (TEMP STORAGE FOR STATUS) NOP * * GET NODE NUMBER BASED ON REPLY BIT * LDB RQBUF ADB C#STR --> STREAM LDA B,I CHECK FOR REQUEST OR REPLY RAL,ELA = REPLY BIT LDB C#SRC --> SOURCE NODE IF REPLY SEZ,RSS LDB C#DST --> DESTINATION NODE IF REQUEST ADB RQBUF LDA B,I GET NODE JSB FETCH FIND MA TABLE ENTRY LDA STATE CPA .NON JMP NOMA * * ASSIGN MA VARIABLES TO MESSAGE HEADER * ASIGN EQU * CLB,INB ADB RQBUF ADB RQLEN,I -->RETRY BITS LDA B,I IOR BIT11 SET MA ASSIGNMENT BIT ADA BIT12 RETRY := RETRY + 1 STA B,I ALF AND B17 ISOLATE RETRY COUNTER SZA,RSS OVER 15 RETRIES? JMP DS05 . YEP TOO BAD... CMA,INA ADA #MARL RETRIES > MAX ? SSA JMP DS05 . TOO MANY RETRIES *-- IF VS > (VA+W) THEN CHANNEL SATURATED LDA VA FIRST CHECK FOR ROLLOVER POINT STA TMP CMA,INA LDB VS ADA B (VS-VA) SSA,RSS IF VS >= VA THEN JMP *+7 OK LDA TMP ELSE BUMP VS & VA BEYOND ROLLOVER ADA W SSA ADA OFFST ROLLOVER STA TMP ADB W * LDA TMP VA ADA W VA+W CMA,INA ADA B VS-(VA+W) SSA,RSS CHANNEL SATURATED? JMP DS08 . YES, EXCEEDS MAX MSGS FOR THIS CHANNEL * ISZ DIRTY SET "DIRTY" BIT LDB RQBUF ADB C#MAS --> NS LDA VS STA B,I STA IDENT SAVE SEQUENCE # INA VS := VS + 1 SSA ROLLOVER? ADA OFFST STA VS SET NS INB --> NR LDA VR STA B,I SET NR INB --> NC LDA VC STA B,I SET NC * LDA IDENT FORM UNIQUE MA IDENTIFIER LSL 12 ISOLATE LOWER 4 BITS IOR IDX MA TABLE INDEX STA IDENT UNIQUE MA MESSAGE IDENTIFIER ISZ #MAAS GOOD RETURN (P+2) LDA STATE CPA .DOWN RSS JMP EXIT * * IF CHANNEL DOWN (DISCONNECTED) SET #MAS TO * INVALID VALUE (-1). * LDB C#MAS ADB RQBUF --> MAS CCA SET INITIALIZATION STA B,I INDICATOR (MAS = -1) JMP EXIT * DS05 LDB C#ECQ ADB RQBUF LDA B,I AND BM360 CLEAR QUALIFIER BITS IOR Q2 SET QUALIFIER (2) STA B,I LDB "05" TOO MANY RETRIES - SIMULATE TIMEOUT JMP EXIT DS08 LDB C#ECQ ADB RQBUF LDA B,I AND BM360 CLEAR QUALIFIER BITS IOR Q1 SET QUALIFIER (1) STA B,I LDB "08" CHANNEL IS SATURATED - RETURN BUSY ERROR JMP EXIT * NOMA EQU * CLEAR MA REQUEST AREA ISZ #MAAS GOOD RETURN (P+2) * * RESTORE MA VARIABLES IF ENTRY HAS BEEN MODIFIED * EXIT EQU * STB IDENT+1 LDA DIRTY SEE IF MA ENTRY HAS BEEN MODIFIED SZA JSB STORE * JSB RNRQ UNLOCK MA TABLE DEF *+4 DEF UNLK DEF #MARN (MA RESOURCE NUMBER) DEF FETCH (DUMMY LOCATION) NOP * DLD IDENT = UNIQUE MA MSG IDENTIFIER JMP #MAAS,I RETURN SKP * BEGIN-FETCH * FETCH- FINDS AND UNPACKS CHANNEL RECORD ( = NODE) 10.01.79 * FETCH NOP STA NODE NODE TO SEARCH FOR CLA STA DIRTY CLEAR 'DIRTY' BITS LDA .NON STA STATE INIT STATE TO NON-MA LDB #MCTR = COUNT STB MACTR NUMBER OF MA ENTRIES SZB,RSS ZERO ENTRIES? JMP FETCH,I . YES NO USE HUNTIN' AROUND LDA #MTBL --> MA TABLE ELA,CLE,ERA CLEAR BIT15 -- DEBUG FLAG FLOOP STA LINK -->NEXT ENTRY (SAVE FOR STORE) LDB @REC -->LOCAL BUFFER DMS1 JMP *+5 'NOP'ED IF DMS JSB .LDX DEF RECLN MWF JMP *+4 JSB .MVW DEF RECLN NOP LDB @REC,I NODE NUMBER OF THIS ENTRY CPB NODE IS THIS THE ENTRY? JMP *+4 . YEP ISZ MACTR . NOP, BUMP COUNTER JMP FLOOP AND TRY AGAIN JMP FETCH,I COULDN'T FIND ENTRY RETURN * *-- UNPACK CHANNEL RECORD CLA LDB .TBL+1 STATE WORD WHEN PACKED LSR 2 ISOLATE STATE RAL,RAL STA STATE LSR 8 ISOLATE MAX TIMEOUT VALUE ALF,ALF STA TMAX LSR 2 VS OFFSET (VSO) WHEN PACKED ADB VA CALCULATE VS SSB ADB OFFST ADJUST FOR ROLLOVER STB VS VS:=VA+OFFSET FROM VA LDB .TBL+3 VT1 AND VT2 WHEN PACKED CLA LSR 8 ISOLATE VT2 ALF,ALF STA VT2 STB VT1 LDB .TBL+7 LSR 12 BLF LSR 4 STB VCC CANCEL COUNTER STA VCD DOWN COUNTER * LDA #MCTR CMA,INA INA ADA MACTR INDEX := MACTR - #MCTR + 1 STA IDX JMP FETCH,I SPC 1 MACTR NOP NUMBER OF MA TABLE ENTRIES @REC DEF .TBL --> START OF PACKED RECORD RECLN DEC 10 LENGTH OF MA ENTRY .NON DEC 1 NON-MA STATE DIFF OCT 077777 (SUBTRACTION) CONSTANT FOR ROLLOVER OFFST OCT 100001 (ADDITION) CONSTANT FOR ROLLOVER SPC 2 * STORE- PACKS AND RESTORES CHANNEL RECORD * STORE NOP CLA STA DIRTY SET DIRTY BITS TO 'CLEAN' CPA MACTR CHECK FOR INVALID ENTRY JMP STORE,I AND RETURN IF NO GOOD *-- PACK CHANNEL RECORD LDA VCD ALF LDB VCC LSR 4 STA .TBL+7 LDA VT2 LSL 8 LDB VT1 LSR 8 STA .TBL+3 TIMERS (VT1/VT2) LDA TMAX RAL,RAL IOR STATE LSL 4 LDB VA CMB,INB ADB VS CALCULATE VSO = VS-VA SSB ADB DIFF ADJUST FOR ROLLOVER LSR 4 STA .TBL+1 STATE WORD (MSW) WHEN PACKED LDA NODE STA .TBL RESTORE NODE NUMBER * JSB $LIBR TURN OFF INTERRUPTS NOP LDA @REC -->LOCAL BUFFER LDB LINK -->SAM DMS2 JMP ST2 'NOP'ED IF DMS JSB .LDX DEF RECLN MWI MOVE BACK INTO SAM JMP ST3 ST2 JSB .MVW MOVE BACK INTO SAM DEF RECLN NOP ST3 JSB $LIBX TURN INTERRUPTS BACK ON DEF *+1 DEF *+1 JMP STORE,I END-STORE * END-FETCH SPC 2 *----------------------------------------------------------- * CONSTANTS *----------------------------------------------------------- A EQU 0 B EQU 1 * .DOWN OCT 0 LK OCT 040001 UNLK OCT 040004 W DEC 15 MAX # OUTSTANDING MSGS / CHANNEL B17 OCT 000017 ISOLATE RETRY COUNTER BM360 OCT 177417 Q1 OCT 000020 Q2 OCT 000040 BIT11 OCT 004000 BIT12 OCT 010000 BIT14 OCT 040000 C#STR ABS #STR C#SRC ABS #SRC C#DST ABS #DST C#MAS ABS #MAS C#ECQ ABS #ECQ "05" ASC 1,05 "08" ASC 1,08 SPC 1 *----------------------------------------------------------- * STORAGE *----------------------------------------------------------- CKDMS NOP CONFIGURE IF DMS (ROUTINE OVERLAYED) CLA CCB ADB CKDMS ADDRESS OF CALL STA B,I NOP CALL LDB $OPSY RBR,SLB DMS? RSS JMP CKDMS,I . NO RETURN STA DMS1 STA DMS2 JMP CKDMS,I RETURN (END-CKDMS) * OVRSZ EQU *-CKDMS OVERLAY SIZE * * START OF OVERLAY * ORG CKDMS * LOCAL MESSAGE TABLE BLOCK LINK BSS 1 . ADDRESS OF ENTRY NODE BSS 1 . NODE # OF CHANNEL IDX BSS 1 . INDEX INTO MA TABLE DIRTY BSS 1 . DIRTY BITS STATE BSS 1 . CHANNEL STATE TMAX BSS 1 . MAX TIMEOUT TICKS VS BSS 1 . SEND SEQUENCE # .TBL EQU * WORD ZERO OF MESSAGE TABLE WHEN PACKED VT2 BSS 1 . RECEIVER IDLE TIMER VCD BSS 1 . # TIMES CHANNEL DOWN VA BSS 1 . ACKNOWLEDGEMENT VARIABLE VT1 BSS 1 . ACKNOWLEDGEMENT TIMER VR BSS 1 . RECEIVE SEQUENCE # VF BSS 1 . RECEIVE FLAGS VC BSS 1 . CANCEL FLAGS VCC BSS 1 . # CONSECUTIVE CANCELATIONS LERC BSS 1 . LAST ERROR / QUALIFIER REPORTED LERN BSS 1 . LAST NODE REPORTING ERROR * TMP BSS 1 IDENT BSS 2 * SIZE EQU * PROGRAM SIZE END