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 ! 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 !" 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 . 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 ! 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 *