ASMB,L,C
      HED SCGN4 91700-16142 REV.A 760314 * (C) HEWLETT-PACKARD CO. 1976 * 
      NAM SCGN4,5 91700-16142 REV.A 760314
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
******************************************************************
      SPC 2 
      SPC 1 
************************************************* 
* 
*SCGN4              START UP SEGMENT FOR SCE GENERATOR
* 
*SOURCE PART #      91700-18142 REV A 
* 
*REL PART #         91700-16142 REV A 
* 
*WRITTEN BY:        LARRY POMATTO 
* 
*DATE WRITTEN:      11-29-74
* 
*MODIFIED BY:       K. HAHN   [ C.C.H. ]
* 
*DATE MODIFIED:     6-27-75   [03-14-76]
* 
***************************************************** 
      SPC 1 
* 
*     DEFINE EXTERNALS
* 
      EXT LST,PLK,PLKS,?XFER,LSTI,LSTP
      EXT .MEM.,PRCMD 
      EXT FTRKA,NSEC,NTRK,SECA,TRKA,ENDM
      EXT DSKLU,SMTLN,SECTK 
      EXT UEXFL,SSTBL,.MEM3 
      EXT LST1,LST2,LST3,LST4,LST5
      EXT .MEM1,.MEM4 
      EXT .MEM2,.MEM5,.MEM6,NAMR.,LISTO 
      EXT FWAM,LWAM,PARSA 
      EXT PNAME,PNAMA,PRAMS 
      EXT EXEC,LOCC,BPLOC,PRINT 
      EXT PRMT,GTOUT,ABDCB
      EXT FCRET,WRITF,FCLOS 
      EXT FILCK,FERR,SWAPR,LSDCB,CMDLU
      EXT LOUT,ENDLU,COML,PUNCH,ABRC1,PACK$ 
      EXT FOPEN,INDCB,PARS5,STKAD,P:TR,PUSH 
      EXT NOPRT,PARS3,PRS31,PARS2,PRS21,PRS41 
      EXT SC3CD,RMPAR,LDRCD,S45CD,SWPLC 
      EXT INDB3 
      EXT COR.A 
      SUP 
      SPC 1 
* 
*     DEFINE ENTRY POINTS 
* 
      SPC 1 
* 
*     DEFINE A AND B REG
* 
A     EQU 0 
B     EQU 1 
      SKP 
      SKP 
      SKP 
* 
*     THIS IS WHERE WE START. 
*     FIRST WE FIGURE HOW MUCH CORE WE HAVE 
*     THEN WE GET THE NAME OF THE LIST FILE 
*     AND THEN AWAY WE GO DOING OUR GENERATION
* 
SRTSG NOP           CONTROL TRANSFERED HERE BY MAIN 
      LDA STRTA     RETURN TO MAIN WITH START ADDRESS 
      JMP SWAPR     BACK WE GO
      SPC 1 
STRTA DEF START 
      SPC 2 
START NOP           CONTROL RETURNED HERE BY MAIN 
      LDA 1657B     ADDRESS OF KEYWORD TABLE
      STA TEMP1     SAVE FOR LOOP 
TRY   LDB TEMP1,I   GET FIRST ID SEG ADDRESS
      SZB,RSS       END OF KEYWORD TABLE? 
      JMP SEG2?      YES. REPORT LACK OF <SCGN2> !
      ADB P12       GET TO NAME 
      LDA B,I       GET FIRST TWO CHAR. 
      CPA ASCSC     "SCGN2"...LARGEST SEGMENT 
      RSS           YES 
      JMP NEXT      NO
      INB 
      LDA B,I       GET SECOND TWO CHARS
      CPA ASCGN 
      RSS           MATCH 
      JMP NEXT
      INB 
      LDA B,I 
      AND M7400 
      CPA B310K     "2" 
      JMP MATCH 
NEXT  ISZ TEMP1 
      JMP TRY       TRY AGAIN 
MATCH LDA TEMP1,I   GET ADDRESS 
      JSB COR.A     GET TO LWAM OF SEGMENT
      INA           GET FWAM
      STA FWAM      SAVE AS FIRST WORD AVAIL MEM
      CMA,INA       GET SIZE OF UNDECLARED
      ADA LWAM      CORE
      CLB 
      DIV P128      SEE HOW MANY SECTOR FIT IN
      SZA           IF ZERO...GET OUT...NO ROOM 
      JMP OK1       OK  CONTINUE
      LDA P8        MESSAGE LENGHT
      LDB NOROM 
PRNER JSB LOUT      PRINT THE MESSAGE 
      JSB GTOUT 
SEG2? LDA P12       MESSAGE LENGTH
      LDB SEGMS     "NO <SCGN2> !"
      JMP PRNER     GO TO REPORT A CATASTROPHIC ERROR.
OK1   STA NSEC      SAVE AS # OF SECTOR FOR ONE BLOCK 
      MPY P128      GET LENGTH OF DISK WRITES AND READS 
      STA SMTLN     SAVE AS LENGTH OF SYMBOL TABLE
      CLB           NOW GET # OF 5 WORD ENTRIES ALLOWED 
      DIV P5
      MPY P5        GET AMOUNT OF CORE
      CCB 
      ADA B         ADDRESS OF LAST WORD OF SYM TAB ROOM
      ADA FWAM      WE NOW HAVE THAT ADDRESS
      CMA,INA       NEGATE IF FOR OVERFLOW CHECKING 
      STA ENDM      AND PASS BACK TO MAIN 
      JSB EXEC      GET SOME DISK SPACE 
      DEF *+6 
      DEF P4
      DEF P5        ASK FOR 5 TRACKS...ROUGHLY 6000 SYMBOLS 
      DEF FTRKA     RTE WILL PUT IN FIRST TRACK 
      DEF DSKLU     AND DISK IT IS ON 
      DEF SECTK     SECTORS/TRACK 
      CLB 
      LDA NSEC      GET # OF 128 WORD SECTORS PER WRITE/READ
      INA           SET FOR NEXT
      CLE,ELA       MPY BY 2...64 WORD SECTORS
      DIV SECTK     CALCULATE MULT FACTOR FOR EACH WRITE
      STB NSEC      REMAINDER=NEXT SECTOR ADDRESS 
      STA NTRK      NEXT TRACK ADDRESS
      CMB,INB       DO A LITTLE OPTIMIZING
      ADB P30       IF OVER 30 SECTORS...START AT TRACK BOUNDRY 
      SSB,RSS       WELL? 
      JMP MTCH1     NO
      CLB           YES...CLEAR OUT SECTOR ADDRESS
      STB NSEC      AND SAVE AS NEXT
      ISZ NTRK      AND INCREMENT TRACK COUNT 
MTCH1 LDA FTRKA     SET UP SO WE DON'T DO FIRST WRITE 
      STA TRKA
      CLA 
      STA SECA
* 
*     NOW WE SET UP OUR COMMAND LU OR FILE
* 
STRT0 LDB CMDLU    GET ADDRESS FOR RMPAR
      JSB RMPAR 
      DEF *+2 
      DEF CMDLU 
STRT1 LDA CMDLU     GET FIRST WORD
      SZA,RSS      IF ZERO
      ISZ CMDLU    SET TO 1 (DEFAULT TO SYS CONSOLE)
      DLD PARS3    GET POSSIBLE SEC. CODE & LU
      STA PRS31     AND SAVE
      STB PRS41 
      LDA PRS21    GET FILE NAME TYPE 
      LDB P1        DEFAULT IS FOR LU 1 
      AND M7400     IS INPUT A ASCII
      SZA 
      INB           YES 
      STB PARS2     SET AS FILE TYPE
      LDA B400     GET POTENTIAL R/W SUBFUNCTION
      STA PARS5    SAVE FOR OPEN CALL 
      JSB FOPEN    GO OPEN FILE 
      DEF *+3 
INDBA DEF INDCB 
      DEF PARS5 
      LDA FERR     FIND IF THE FILE EXISTS
      CPA MD6 
      RSS 
      JMP OK3      AT LEAST THE FILE IS THERE!
      JSB EXEC
      DEF *+5 
      DEF P2
      DEF P1
      DEF NOFIL 
      DEF NOFLL 
      JSB GTOUT 
OK3   JSB FILCK     ANY FILE ERRORS?
      RSS            YES--TRY THE SYSTEM CONSOLE. 
      JMP STRT2      NO--ALL'S WELL.
      CLA           FORCE A DEFAULT 
      STA CMDLU      TO LU#1 FOR COMMAND INPUT. 
      JMP STRT1     START OVER--BYPASS CALL TO <RMPAR>. 
STRT2 LDA STKAD 
      ADA M1       RESET STACK POINT
      STA P:TR
      CLA 
      JSB PUSH     GO PLACE ON STACK
      RSS            ERROR RETURN - ABORT 
      JMP OK2        OK CONTINUE
      LDA P14 
      LDB STCOV 
      JSB LOUT
      JSB GTOUT     ERROR RETURN - ABORT
OK2   LDB P1        SET AS DEFAULT TO 1 
      LDA NOPRT     GET INTERACTIVE FLAG
      SZA,RSS       SET?
      LDB INDB3 
      STB ENDLU     SET FOR EDLU
* 
*     NOW GET NAME OF LIST FILE 
* 
FNAME LDA P10 
      LDB LSTFI 
      JSB READ      GET LIST FILE 
      JSB FCRET     GO CREATE THE FILE
      DEF *+5 
      DEF LSDCB 
      DEF P64 
      DEF P3
      DEF ZERO
      JSB FILCK     CHECK FILE STATUS 
      JMP FNAME     ERROR 
* 
FILNM LDA P16       LENGTH IN POS BYTES 
      LDB OUTFI     "OUTPUT FILE NAME"
      JSB READ      GO READ FROM USER 
      JSB FCRET     GO CREATE THE OUTPUT FILE 
      DEF *+5 
      DEF ABDCB 
      DEF P200
      DEF P7
      DEF ZERO
      JSB FILCK     CEHCK FILE ERROR
      JMP FILNM     RETRY...ERROR 
      SPC 1 
* 
*     FIND OUT WHAT THEY WANT TO DO 
*     GENERATE OR LOAD
* 
TRYG1 LDA P18 
      LDB GNLDM     GENERATOR OR LOADER?
      JSB READ
      LDA PRS21     GET FIRST TWO CHAR ANSWER 
      CPA GE        GENERATOR?
      JMP GEN       YES 
      CPA LO        LOAD? 
      RSS           YES 
      JMP TRYG1     NO...ERROR
      LDA LDRCD     LOADER SWAP CODE
      JMP DONE
* 
*     FIND OUT WHAT TYPE OF SATELLITE 
* 
GEN   LDA P18 
      LDB TYPMG     "TYPE OF SATELLITE" 
      JSB READ
      DLD PRS21     B REG=EX
      CCA           SET -1 FOR ERROR CHECK
      CPB E3        SCE3? 
      LDA SC3CD     YES...SET FOR SCE3 CODE 
      CPB E4        SCE4? 
      LDA S45CD     YES...SET FOR SCE 4-5 GENERATION
      CPB E5        SCE5? 
      LDA S45CD     YES 
      CPB E6        SEE IF SCE 6
      LDA SC3CD     YES...TREAT LIKE SCE 3
      SSA           IF SIGN SET, ERROR
      JMP GEN       ...TRY AGAIN
* 
*     SAVE SEGMENT NUMBER 
* 
DONE  STA SWPLC     SAVE IN SWAP WORD 
      JMP START,I   AND RETURN TO MAIN
      SKP 
P2    OCT 2 
P18   DEC 18
P23   DEC 23
P12   DEC 12
P128  DEC 128 
P1    DEC 1 
P14   DEC 14
B400  OCT 400 
M1    DEC -1
MD6   DEC -6
P5    DEC 5 
P4    DEC 4 
P8    DEC 8 
P30   DEC 30
P10   DEC 10
P64   DEC 64
P3    DEC 3 
ZERO  NOP 
P7    DEC 7 
P200  DEC 200 
P16   DEC 16
M7400 OCT 177400
B310K OCT 31000 
TEMP1 NOP 
TEMP2 NOP 
      SPC 1 
LBUF  BSS 32
      SPC 1 
LSTFI DEF *+1 
      ASC 5,LIST FILE?
OUTFI DEF *+1 
      ASC 8,OUTPUT FILE NAME? 
TYPMG DEF *+1 
      ASC 9,TYPE OF SATELLITE?
GNLDM DEF *+1 
      ASC 9,GENERATE OR LOAD? 
NOROM DEF *+1 
      ASC 4,NO ROOM 
SEGMS DEF *+1 
      ASC 6,NO <SCGN2> !
STCOV DEF *+1 
      ASC 7,STACK OVERFLOW
NOFIL ASC 16,SCEGN ABORTED: NO TRANSFER FILE
NOFLL DEC 16
E3    ASC 1,E3
E4    ASC 1,E4
E5    ASC 1,E5
E6    ASC 1,E6
LO    ASC 1,LO
GE    ASC 1,GE
ASCSC ASC 1,SC
ASCGN ASC 1,GN
      SKP 
* 
*     SUBROUTINE TO READ INPUT
* 
READ NOP
      STA READ2 
      STB READ1 
      JSB PRMT
      DEF *+6 
READ1 NOP 
      DEF READ2 
      DEF LBUF
      DEF P64 
      DEF PARSA 
      JMP READ,I
      SPC 1 
READ2 NOP 
      SPC 2 
      END SRTSG 
* 
                                                                                    