ASMB,R,L,C
      HED * OUTBR * OUTPUT RELOCATABLES * A-29102-60025-1 REV. A
      NAM BROUT,7  92413-16021A 760329
********************************************************
* 
*     SOURCE: 92413-18021  REV A
*     RELOC:  92413-16021 REV A 
* 
* 
**********************************************************
* 
* ENTRY POINTS: 
* 
      ENT RBOID 
      ENT RBBFA 
      ENT RBBUF 
      ENT TYREB 
      ENT CKSUM 
      ENT LODAD 
      ENT DBLIN 
      ENT DBLEA 
      ENT DBLOU 
      ENT ENTIN 
      ENT ENTEA 
      ENT ENTOU 
      ENT EXTIN 
      ENT EXTEA 
      ENT EXTOU 
      ENT ENTW2 
      ENT EXTW2 
      ENT OUTIT 
* 
********************************************************
* 
*  EXTERNAL REFERENCES: 
* 
      EXT WRITF 
      EXT A1DCB 
      EXT GT0UT 
* 
********************************************************
* 
*  BEFORE CALLING THE ROUTINES IN THIS PACKAGE, 
*   SET RBOID TO THE ID NBR OF THE OUTPUT DEVICE. 
* 
********************************************************
      SKP 
      HED * ENT RECORD OUTPUT ROUTINES *  A-29102-60025-1 REV. A
***** 
* 
** ENTIN ** ENT RECORD OUTPUT INITIALIZE ROUTINE
* 
* CALLING SEQUENCE: 
* 
*     JSB ENTIN 
*     RETURN
* 
***** 
* 
ENTIN NOP 
      LDA RBBFA 
      ADA B3
      STA RBPTR     POINTER TO NEXT WORD IN BUFFER
      LDA MD15      ALLOW MAXIMUM 14 PER RECORD 
      STA CNT14 
      CLA 
      STA CNTEN     NUMBER OF ENTRIES 
      LDA B3
      STA RBLEN     LENGTH OF RECORD
      JMP ENTIN,I 
      SKP 
***** 
* 
** ENTEA ** ADD AN ENTRY TO CURRENT ENT RECORD
* 
* CALLING SEQUENCE
* 
*     LDB POINTER TO ENTRY TO PUT IN BUFFER 
*         (WORD 1 = FIRST 2 CHARS OF NAME)
*         (WORD 2 = SECOND TWO CHARS OF NAME (BLANK FILL))
*         (WORD 3 = LAST CHAR AND RELOCATION BASE)
*        (WORD 4 = RELOCATABLE VALUE OF ENTRY POINT)
*     JSB ENTEA 
*     RETURN
* 
***** 
* 
ENTEA NOP 
      STB TEMPB 
      ISZ CNT14     BUFFER FULL?
      JMP ENT01     NO, ADD ENTRY 
      LDA ENTW2     YES 
      JSB ENTOU          MUST FLUSH THE BUFFER
      JSB ENTIN     THEN REINITIALIZE BUFFER
      ISZ CNT14     BUMP MAX ENTRIES POINTER
* 
** ADD ENTRY TO BUFFER
* 
ENT01 ISZ CNTEN     COUNT ENTRY 
      LDA MB4 
      STA CNTR      MOVE 4 WORDS
      LDB TEMPB 
LOOPN LDA 1,I 
      STA RBPTR,I 
      ISZ RBPTR     BUMP OUTPUT POINTER 
      INB           BUMP INPUT POINTER
      ISZ RBLEN     BUMP WORD COUNT 
      ISZ CNTR      ARE ALL WORDS MOVED?
      JMP LOOPN     NO, MOVE NEXT ONE 
      JMP ENTEA,I   YES, RETURN 
      SKP 
***** 
* 
** ENTOU ** COMPLETE BUFFER AND OUTPUT IT 
* 
* CALLING SEQUENCE: 
* 
*     LDA ENTW2 (WORD 2 MASK FOR ENT) 
*     RECORD IN RBBUF BUFFER
*     JSB ENTOU 
*     RETURN
* 
* NOTE: THIS ROUTIN IS USED BY BOTH ENT AND EXT RECORD PROCESSORS 
* 
***** 
* 
ENTOU NOP 
      IOR CNTEN     BUILD WORD TWO OF RECORD
      STA TYREB      AND STORE IT IN RECORD 
      LDA RBLEN 
      ALF,ALF       POSITION WORD COUNT 
      STA RBBUF     AND STORE IT IN WORD ONE
      JSB OUTIT     OUTPUT BUFFER(COMPUTES OWN CKSUM) 
      JMP ENTOU,I 
      SKP 
      HED *EXT RECORD OUTPUT PROCESSORS*  A-29102-60025-1 REV. A
***** 
* 
** EXTIN **INITIALIZE BUFFER FOR EXT RECORD OUTPUT
* 
* CALLING SEQUENCE: 
* 
*     JSB EXTIN 
*     RETURN
* 
***** 
* 
EXTIN NOP 
      LDA RBBFA 
      ADA B3
      STA RBPTR     POINTER TO NEXT WORD IN BUFFER
      LDA MD20      ALLOW MAXIMUM 19 ENTRIES PER RECORD 
      STA CNT19 
      CLA 
      STA CNTEN     NUMBER OF ENTRIES COUNTER 
      LDA B3
      STA RBLEN     LENGTH OF RECORD
      JMP EXTIN,I 
      SKP 
***** 
* 
** EXTEA ** ADD AN ENTRY TO CURRENT EXT RECORD
* 
* CALLING SEQUENCE: 
* 
*     LDB POINTER TO ENTRY TO PUT IN BUFFER 
*         (WORD 1 = FIRST 2 CHARS OF NAME)
*         (WORD 2 = NEXT TWO CHARS (BLANK FILL))
*         (WORD 3 = LAST CHAR, EXT ID NUMBER) 
*     JSB EXTEA 
*     RETURN
* 
***** 
* 
EXTEA NOP 
      STB TEMPB 
      ISZ CNT19     BUFFER FULL?
      JMP EXT01     NO, ADD ENTRY 
      LDA EXTW2     YES,
      JSB EXTOU          MUST FLUSH BUFFER
      JSB EXTIN     REINITIALIZE BUFEER 
      ISZ CNT19     BUMP MAX NBR OF ENTRIES COUNTER 
* 
** ADD ENTRY TO BUFFER
* 
EXT01 ISZ CNTEN     COUNT ENTRY 
      LDA MB3 
      STA CNTR      MOVE 4 WORDS
      LDB TEMPB 
LOOPM LDA 1,I 
      STA RBPTR,I 
      ISZ RBPTR     BUMP OUT PUT POINTER
      INB           BUMP INPUT POINTER
      ISZ RBLEN     BUMP WORD COUNT 
      ISZ CNTR      ARE ALL WORDS MOVED?
      JMP LOOPM     NO, MOVE NEXT ONE 
      JMP EXTEA,I   YES, RETURN 
      SKP 
***** 
* 
** EXTOU ** COMPLETE BUFFER AND OUTPUT IT 
* 
* CALLING SEQUENCE: 
* 
*     LDA EXTW2 (WORD 2 MASK FOR EXT) 
*     RECORD IN RBBUF BUFFER
*     JSB EXTOU 
*     RETURN
* 
*  NOTE: THIS ACTUALLY USES THE SAME ROUTINE AS ENTS (ENTOU)
* 
***** 
* 
* 
EXTOU EQU ENTOU 
* 
      SKP 
      HED * DBL RECORD OUTPUT ROUTINES *  A-29102-60025-1 REV. A
***** 
* 
** DBLIN ** INITIALIZE DBL BUFFER FOR OUTPUT
* 
* CALLING SEQUENCE
* 
*     LDA           TYPE OF RELOCATION BASE 
*     LDB           RELOCATABLE LOAD ADDRESS
*     JSB DBLIN 
*     RETURN
* 
***** 
* 
DBLIN NOP 
      ALF           POSITION RELOCATION BASE
      RAL,RAL 
      IOR WORD2     INITIALIZE WORD 2 OF RECORD 
      STA TYREB     TYPE, RELOCATION BASE, #INSTR WORDS 
      STB LODAD     INITIALIZE RELOCATION ADDRESS 
      LDB RBBFA 
      ADB B4
      STB PTR5       AND POINTER TO BLOCK WORD
      INB 
      STB RBPTR     AND NEXT WORD BUFFER POINTER
      LDA B5
      STA RBBUF     INITIALIZE RECORD LENGTH
      LDA MB5 
      STA CNT5      INTIALIZE BLOCK OF 5 COUNTER
      CLA 
      STA PTR5,I     AND THE BLOCK WORD ITSELF
      JMP DBLIN,I 
      SKP 
***** 
* 
** DBLEA ** ROUTINE TO BUILD DBL RECORDS ONE DATUM AT A TIME
* 
* CALLING SEQUENCE: 
* 
*     LDA           RELOCATION INDICATOR(SEE RECORD DESCRIPTION)
*     LDB           POINTER TO DATUM (DATUM MAY BE TWO WORDS) 
*     JSB DBLEA 
*     RETURN
* 
***** 
* 
DBLEA NOP 
      STA TEMPA 
      STB TEMPB 
      CLB,INB 
      CPA B5        IS THIS A MEMORY REFERENCE (TWO WORD) DATUM?
      INB           YES, COUNT THE SECOND WORD
      ADB RBBUF     .B. NOW HAS LENGTH WITH ADDED DATUM 
      ADB MD61
      SSB           IS THERE ROOM?
      JMP ADDIT     YES, MERELY ADD DATUM 
      JSB DBLOU     NO, MUST FLUSH BUFFER 
      LDA TYREB 
      AND B77 
      ADA LODAD     GET NEW LOAD ADDRESS
      STA 1         INTO THE B REG FOR DBLIN CALL 
      LDA TYREB      AND GET RELOCATION BASE INTO AREG
      AND B300
      ALF,ALF 
      RAL,RAL 
      JSB DBLIN     INITIALIZE RELOC OUTPUT PARAMETERS
* 
** ADD A DATUM
* 
ADDIT LDA TEMPA 
      IOR PTR5,I    INSERT DATA TYPE
      ALF,RAR 
      STA PTR5,I     INTO BLOCK WORD
      LDA TEMPB,I   INSERT FIRST WORD OF DATUM
      STA RBPTR,I 
      ISZ RBPTR     BUMP RECORD WORD POINTER
      ISZ RBBUF     BUMP WORD COUNT 
      ISZ TYREB     BUMP DATA ITEM COUNT
      LDA TEMPA 
      CPA B5        IS THERE A SECOND WORD? 
      RSS 
      JMP BLKCK     NO
      LDB TEMPB     YES, GET IT TOO 
      INB 
      LDA 1,I 
      STA RBPTR,I 
      ISZ RBPTR 
      ISZ RBBUF 
* 
** CHECK TO SEE IF NEED TO SET UP A NEW 
**  5DATUM BLOCK
* 
BLKCK ISZ CNT5      COUNT LAST DATUM AND TEST FOR END 
      JMP DBLEA,I   NOT AT END OF BLOCK, RETURN 
      LDA PTR5,I    YES, DO FINAL POSITIONING 
      RAR,RAR 
      STA PTR5,I
      LDB RBPTR     THEN SET UP FOR NEW BLOCK OF 5
      STB PTR5
      LDA MB5 
      STA CNT5      RESET COUNTER 
      CLA 
      STA PTR5,I    START WORD OUT AS ZERO
      ISZ RBPTR     BUMP BUFFER POINTER 
      ISZ RBBUF      AND WORD COUNT 
      JMP DBLEA,I   THEN RETURN 
      SKP 
***** 
* 
** DBLOU ** ROUTINE TO FLUSH RELOC BUFFER 
* 
* CALLING SEQUENCE: 
* 
*     JSB DBLOU 
*     RETURN
* 
***** 
* 
DBLOU NOP 
      LDA RBBUF 
      CPA B5        IS THERE ANYTHING IN THE BUFFER?
      JMP DBLOU,I   NO, RETURN IMMEDIATELY
      LDB CNT5
      CPB MB5       ARE WE AT THE START OF A 5 BLOCK? 
      JMP NEW5      YES 
      LDA PTR5,I    NO, MUST POSITION WHAT WE HAVE
      ALF,RAR       ROTATE 3 LEFT FOR EACH MISSING ITEM 
      ISZ CNT5
      JMP *-2 
      RAR,RAR       DO FINAL POSITIONING
      STA PTR5,I
      JMP KEPON 
* 
** WE HAVE JUST STARTED A NEW BLOCK OF 5 ITEMS
**  BUT HAVE NOT YET ADDED A DATUM IN THIS BLOCK
* 
NEW5  CCA 
      ADA RBBUF 
      STA RBBUF     DECREMENT WORD COUNT
KEPON LDA RBBUF 
      ALF,ALF       POSITION RECORD WORD COUNT
      STA RBBUF     AND RECORD IS READY FOR OUTPUT
      JSB OUTIT     OUTPUT THE RECORD 
      JMP DBLOU,I 
      SKP 
***** 
* 
** OUTIT **  COMPUTE CHECKSUM AND OUTPUT RECORD 
* 
* CALLING SEQUENCE: 
* 
*     PUT RECORD INTO RBBUF BUFFER
*     JSB OUTIT 
*     RETURN
* 
***** 
* 
OUTIT NOP 
      LDA RBBUF 
      ALF,ALF 
      CPA B3        IS THIS A "NO DATA RECORD" ?
      JMP OUTIT,I   YES, RETURN IMMEDIATELY 
      STA RBLEN     STORE IT FOR FWRIT CALL 
      CMA,INA       SET UP COUNTER FOR COMPUTING CKSUM
      ADA B3        TWO WORDS ARE NOT INCLUDED IN CKSUM 
      STA FLCNT     SET UP WORD COUNTER 
      LDB RBBFA     .B.= POINTER TO WORD
      ADB B2
      LDA TYREB     START WITH WORD2
      INB           ADVANCE TO NEXT WORD
      ADA 1,I 
      ISZ FLCNT     COUNT WORD, ARE WE DONE?
      JMP *-3       NO, KEEP GOING
      STA CKSUM     YES, STORE IN RECORD
* 
** OUTPUT RECORD
* 
      JSB WRITF 
      DEF *+5 
      DEF A1DCB 
      DEF RBERR 
      DEF RBBUF 
      DEF RBLEN 
* 
      LDA RBERR 
      SSA           CHECK FOR IO ERROR
      JSB IOERR     FOUND AN ERROR
      JMP OUTIT,I   NO ERROR, RETURN
* 
***** 
* 
** ERROR ROUTINE !!! MUST BE REPLACED FOR PRODUCTION RUN !!!!!
* 
***** 
* 
IOERR NOP 
      JSB GT0UT 
      JMP OUTIT,I 
      SKP 
      HED **** CONSTANTS AND VARIABLES *  A-29102-60025-1 REV. A
***** 
* 
** CONSTANTS AND VARIABLES
* 
***** 
* 
RBBFA DEF RBBUF     POINTER TO RELOCATABLE BUFFER 
RBBUF NOP           RECORD LENGTH (WORD ONE OF BUFFER)
TYREB NOP           TYPE, RELOCATION BASE, # INSTRUCTION WORDS
CKSUM NOP           CHECKSUM
LODAD NOP           UNRELOCATED LOAD ADDRESS
      BSS 56        REST OF BUFFER (60 WORDS) 
* 
TEMPA NOP 
TEMPB NOP 
FLCNT NOP 
RBOID OCT 3         OUTPUT ID NUMBER
RBERR NOP           ERROR CODE GOES HERE
RBLEN NOP           LENGTH OF BUFFER (FOR FWRIT)
PTR5  NOP           POINTER TO HEAD OF 5 WORD BLOCK 
RBPTR NOP           POINTER TO NEXT AVAILABLE WORD IN BUFFER
CNT5  NOP 
CNT14 NOP 
CNT19 NOP 
CNTEN NOP 
CNTR  NOP 
ENTW2 OCT 40000     WORD TWO MASK FOR ENT RECORDS 
EXTW2 OCT 100000    WORD TWO MASK FOR EXT RECORDS 
WORD2 OCT 60000     WORD TWO MASK FOR DBL RECORDS 
* 
MD61  DEC -61 
MD20  DEC -20 
MD15  DEC -15 
MB5   OCT -5
MB4   OCT -4
MB3   OCT -3
B2    OCT 2 
B3    OCT 3 
B4    OCT 4 
B5    OCT 5 
B77   OCT 77
B300  OCT 300 
      END 
                                                                                                                                                                                                                                                  