ASMB,L * * DATE:790504 * NAME:LGTAT * SOURCE: 92067-18008 * RELOC: 92067-16008 * PGMR:RD * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. 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. * * *************************************************************** * * NAM LGTAT,3,99 92067-16008 REV.1926 790504 SUP ENT LGTAT EXT $CVT3,$LIBR,$LIBX,IFBRK EXT EXEC,$IDEX A EQU 0 B EQU 1 LGTAT XLA B,I INPUT PARAMETERS ARE STORED AWAY CLE,SZA,RSS SCHED WITH PARAMETER? CLA,CCE,INA DEFAULT TO LU 1 IOR M200 SET "V" BIT IN CONTROL WORD STA LU OUTPUT DEVICE INB XLA B,I GET OPTION STA LU+1 INB XLA B,I GET SPECIAL LU PARAMETER SZA,RSS IN CASE OF PREV RUN LDA LU SEZ DEFAULT NEEDED STA LU YES LDA FWA FIRST WORD ADDRESS OF TAT STA TAT * LDA D2 SET LU # TO 2 STA LUDSK CLA STA TRKCT CLEAR COUNTERS STA CTR STA CNTR STA TRCTR STA ITRCT STA CTRCT LDA TLG TAT LENGTH STA TATLG LDA SLG NUMBER OF TRACKS ON SYSTEM DISC STA TATSD ADA TATLG ADD NUMBER OF TRACKS ON SYSTEM DISC * TO TRACK LENGTH TO GET NUMBER OF TRACKS ON AUX. DISC CMA,INA MAKE RESULT POSITVE STA TATAD NUMBER OF TRACKS ON AUX. DISC LDA LU+1 CHECK FOR DESIRED OPTION SZA,RSS IF IT IS NOT ONE, DON'T PRINT TABLE JMP HIGH HEADING JSB EXEC EXEC CALL TO WRITE OUT TABLE HEADING DEF *+5 DEF D2 DEF LU DEF TBLHD STORAGE OF TABLE HEADING DEF D23 JSB BAUD PRODUCE A BLANK LINE JSB EXEC EXEC CALL TO PRINT COLUMN #'S IN OUTPUT DEF *+5 DEF D2 DEF LU DEF TBL STORAGE CONTAINING COLUMN NUMBERS DEF D39 * * THE FOLLOWING CODE IS USED TO KEEP TRACK OF * THE NUMBER OF FREE TRACKS WHILE FINDING THE * THE LARGEST CONTIGUOUS BLOCK OF TRACKS * HIGH XLA TAT,I A REG HAS FWA OF TAT SZA IF TAT ENTRY =0 THEN INCREMENT BOTH CTRS JMP LABL TAT ENTRY IS NOT 0 CHECK COUNTER TO GET * LARGEST CONTIGUOUS BLOCK * ISZ ITRCT INCREMENT TOTAL AVAILABLE TRACK COUNTER ISZ CTRCT INCREMEMT CONTIGUOUS TRACK COUNTER JMP LBL1 GO ON WITH TRACK IDENTIFICATION * * SEE IF CURRENT MAX > OLD MAX # FREE TRACKS * LABL LDB CTRCT TRACK ENTRY MUST HAVE BEEN ZERO CMB,INB MAKE CONTIGUOUS TRACK CTR. NEGATIVE ADB TRCTR ADD TO TEMPORARY CONTIG. TRACK COUNTER SSB,RSS SKIP IF RESULT IS NEG. I.E. TEMPORARY * COUNT IS OF GREATER VALUE JMP LBL OLD TRACK COUNT IS OF GREATER VALUE * LDB CTRCT IN GOES NEW * REPLACE TEMP. TRACK COUNTER WITH STB TRCTR THE NEW CONTIGUOUS TRACK VALUE LBL CLB RESET CURRENT MAX CONTIG TRACK # STB CTRCT * * THIS CODE DETERMINES WHAT TO OUTPUT WHEN LGTAT * IS RUNNING AS A PROGRAM. THE CHOICES BEING THE * TRACK STATEMENTS OR STATEMENTS AND TABLE. * LBL1 LDB LU+1 SZB,RSS JMP THERE JUST CHECK FOR ALL FREE AND CONTIG, TRACKS JMP GOON IDENTIFY ALL TRACKS AND OUTPUT TABLE THERE ISZ TATLG CHECK TO SEE IF FINISHED WITH CHECK JMP ARND NO,CONTINUE WITH CHECKS JMP WRONG YES,PRINT OUT TRACK STATEMENTS ARND ISZ TAT INCREMENT TAT ADDRESS JMP HIGH GET ANOTHER TAT ENTRY * * "NO." DETERMINES HOW MANY WORDS ARE PASSED TO THE BUFFER. * I.E. THREE OR FOUR WORDS ARE STORED IN THE TABLE USED FOR * OUTPUT. THIS ALLOWS THE PASSING OF "SYSTEM" OR " SYSTEM " * TO THE OUTPUT TABLE KEEPING THE COLUMNS STRAIGHT AND THE * ENTRIES ALIGNED PROPERLY. * GOON LDB TRKCT CHECK FOR EVEN OR ODD SLA JMP ODD LDB ADFOR LOAD ADDRESS OF FOUR STB NO. JMP CONT ODD LDB ADFOR LOAD ADDRESS OF THREE STB NO. * * THIS CODE IDENTIFYS THE SYSTEM TRACKS IN THE * TAT. FURTHERMORE IT BREAKS THEM DOWN INTO THE * COMPONENTS OF LG, START OF THE LS AREA, LIBRARY, * ENTRY POINTS, MEMORY IMAGE PROGRAMS AND SWAPPED * PROGRAM TRACKS. * CONT CPA SYS CHECK TAT ENTRY FOR SYSTEM TRACKS JMP LG CHECK FOR LG TRACKS JMP FP NOT SYSTEM TRACKS, CHECK FOR FMP TRACKS LG LDA LGOTK GET DISC POINTER FOR LG AREA JSB FDISK CALL SUBROUTINE TO GET DISC INFORMATION LDA INPTR OBTAINED THE NUMBER OF TRACKS USED FOR AND M177 LG AREA ADA JTRAK ADD # OF TRACKS TO STARTING TRACK TO ADA SUB1 GET LAST TRACK OF LG AREA. * SUBTRACT ONE (TRACK COUNT STARTS AT ZERO) STA LGEND LAST TRACK OF LG AREA LDB LUD DETERMINE IF IT IS THE RIGHT LU CPB LUDSK JMP STR IT IS TH RIGHT LU JMP LS IT IS THE WRONG LU STR LDA JTRAK SEE IF TRACK ENTRY IS A LG TRACK CMA,INA THIS IS DONE BY CHECKING THE TRACK ADA TRKCT COUNTER AGAINST THE LOWER SSA AND HIGHER BOUNDS OF THE POSSIBLE JMP LS LG TRACKS----NOT AN LG TRACK LDA TRKCT CHECK TRACK COUNTER AGAINST CMA,INA THE HIGHER BOUND ADA LGEND SSA JMP LS NOT LG TRACK CHECK START OF LS AREA JMP PRTLG PRINT OUT LG TRACKS * * FIND THE START OF THE LS TRACKS * LS LDA SFCUN CHECK FOR START OF LS TRACKS JSB FDISK FIND TRACK ADDRESS AND LU # SZA IF TRACK ENTRY IS 0 THEN UNDEFINED JMP RDJ LS TRACKS ARE NOT UNDEFINED LDA ADUND IN OUTPUT PRINT UNDEFINED FOR LDB ADLST START OF LS TRACKS. MVW D15 JMP LEN RDJ JSB HERE PASS TRACK ADDRESS TO CONVERSION * ROUTINE. PUT ASCII FORMAT IN STATEMENT * ALSO CONVERT LU ON WHICH THE TRACK ADDRESS * IS ON, THEN PLACE IN STATEMENT. INA LDB A,I STB LST+15 LOCATION OF LS STATEMENT INA LDB A,I STB LST+16 * * CONVERT NUMBERS FROM BINARY TO ASCII * JSB $LIBX DEF *+1 DEF *+1 LDA LUD JSB HERE INA LDB A,I STB LST+21 LOCATION OF LS STATEMENT INA LDB A,I STB LST+22 JSB $LIBX DEF *+1 DEF *+1 * * CHECK FOR ENTRY POINTS * LEN LDA DSCLB DISC ADDRESS OF LIBRARY ENTRY PTS. JSB FDISK PASS DISC PTR., TO FDISK STA ENTST GET STARTING TRACK LDB LUD CHECK FOR PROPER LU CPB LUDSK JMP HUH JMP FOO IT IS THE WRONG LU HUH LDA DSCLN CALCULATE LAST TRACK OF ENTRY POINTS ADA DSSUP ADD # OF SYS. TO USER ENTRY PTS. MPY D4 FIRST DETERMINE THE # OF SECTORS USED CLB BY MULT. BY 4 (4 WORDS PER ENTRY) DIV D64 THEN DIVIDING BY 64 (64 WORDS SECTOR) STA TEMP LDA DSCLB GET STARTING SECTOR AND M177 ADA SUB1 COMPENSATE FOR STARTING AT ZERO ADA TEMP ADD IN # OF SECTORS USED FOR STORAGE CLB DIV NSPTK DIVIDE BY # OF SECTORS/TRACK ADA ENTST ADD TO TRACK ADDRESS STA ENTND SUM IS LAST TRACK CONTAING ENTS. LDA ENTST CHECK AGAINST THE LOWER BOUND CMA,INA ADA TRKCT SSA JMP FOO LDA TRKCT CHECK THE HIGHER BOUND CMA,INA ADA ENTND SSA JMP FOO NOT ENTRY TRACKS JMP PRTEN IT IS ENTRY TRACK(S) * * CHECK FOR LIBRARY ROUTINES * FOO LDA LUDSK LIBRARY MUST BE ON SYSTEM DISC CPA D2 JMP TOP IT IS SYSTEM DISC JMP HARD IT'S NOT SYS. DISC, GO ON TOP LDA DSCUT DISC ADDRESS OF RTE LIBRARY JSB FDISK GET DISC INFORMATION CMA,INA CHECK TRACK BOUNDS ADA TRKCT SSA JMP HARD NOT LIBRARY TRACK LDA TRKCT CHECK FOR UPPER BOUND CMA,INA ADA ENTST LIBRY TRACKS START BEFORE ENTRY PTS. SSA JMP HARD NOT A LIBRARY TRACK JMP PRTLB PRINT OUT LIBRARY TRACKS HARD JSB PRGTR CHECK FOR MEM. IMAGE OR SWAPPED PROGRAM JMP PRTSY TRACKS ARE NONE OF THE ABOVE * DEFAULT IS SYSTEM TRACKS * CHECK FOR FMP TRACKS * FP CPA FMP JMP PRTFP JMP TO PRINT FMP * * CHECK FOR GLOBAL TRACKS CPA GLBL CHECK FOR GLOBAL TRACKS JMP PRGBL JUMP TO PRINT GLOBAL * * CHECK FOR PROGRAMS OWNING TRACKS * ON A SUCCESSFUL FIND OF PROGRAMS OWNING * A TRACK, THAT PROGRAM NAME IS OBTAINED * FROM THE ID SEGMENT MAP WHOSE ADDRESS * IS LOCATED IN THE TAT. * ALSO, THIS CODE IS USED TO GET NAMES * OF PROGRAMS THAT HAVE SWAPPED TRACKS * AND THAT ARE MEMORY IMAGE SOURCE PROGRAMS. * SZA,RSS IF TAT ENTRY IS 0, GO ON TO FREE TRACKS JMP FEE LDB B40 PLACE A BLANK IN TYPE STB TYPE ABOVE LDB TRKCT IF CTR IS ODD DO THE FOLLOWING CODE SLB,RSS THIS CODE PUTS A BLANK CHAR. JMP BELOW IN FRONT OF THE PROGRAM NAME. LDB ADNAM ADDRESS AS TO WHERE TO STORE THE PROG STB TEMPY NAME ADA D12 GET FIRST TWO CHARACTERS OF PROG NAME STA TEMP XLB A,I SHIFT UPPER BYTE TO LOWER BYTE POSITION BLF,BLF LDA B STA WORD AND M177 PUT A BLANK IN THE UPPER BYTE IOR B2000 STA TEMPY,I STORE BLANK AND FIRST CHAR, IN BUFFER ISZ TEMP GET THIRD AND FOURTH CHAR. XLB TEMP,I BLF,BLF SHIFT UPPER BYTE TO LOWER BYTE POSITION STB WORD1 GET SECOND CHAR. IN UPPER BYTE POSITION LDA WORD AND B1774 STA WORD LDA B AND M177 GET 3RD CHAR. IN LOWER BYTE POSITION IOR WORD PUT 2ND AND 3RD CHAR. TOGETHER ISZ TEMPY STA TEMPY,I * LDA WORD1 GET 3RD AND 4TH CHAR. AND B1774 GET UPPER BYTE POSITION STA WORD1 ISZ TEMP XLB TEMP,I BLF,BLF GET 5TH CHAR. LDA B AND SHIFT TO LOWER BYTE POSITION AND M177 IOR WORD1 ISZ TEMPY STORE IN TEMPORARY IN LOCATION STA TEMPY,I * ISZ TEMPY PUT BLANKS IN LAST TWO CHARS. LDA B2000 POSITION IOR TYPE ALF,ALF STA TEMPY,I LDA ADNAM JMP BAD TRANSFER NAME TO OUTPUT BUFFER * BELOW LDB ADNAM THE FOLLOWING CODE DOES THE SAME STB TEMPY AS THE ABOVE BUT IT DOES NOT * PUT A BLANK IN FRONT OF THE PROG. NAME ADA D12 STORE PROGRAM NAME IN TEMPORARY HOLDING XLB A,I A REG HAS ADDRESS OF ID SEGMENT INDEX STB TEMPY,I IT BY 12 TO GET THE FIRST TWO CHAR. INA ISZ TEMPY XLB A,I STB TEMPY,I INA ISZ TEMPY XLB A,I LDA B AND B1774 AND IN A BLANK CHARACTER IOR TYPE STA TEMPY,I PRPRG LDA ADNAM LOAD ADDRESS OF PROGRAM NAME JMP BAD TRANSFER NAME TO OUTPUT BUFFER * FEE JMP PRTFR MUST BE A FREE TRACK * PRTSY LDA TRKCT GET READY TO PRINT SYSTEM SLA SKIP IF ODD JMP LAB LDA ADSYE LOAD A REG WITH ADD. OF SYSTEM(EVEN) JMP BAD LAB LDA ADSYO LOAD A REG WITH ADDRESS OF SYS(ODD) JMP BAD PRTFP LDA TRKCT GET READY TO PRINT FMP SLA JMP LB LDA ADFME FMP (EVEN) JMP BAD LB LDA ADFMO FMP (ODD) JMP BAD PRGBL LDA TRKCT GET READY TO PRINT GLOBAL SLA JMP LBLA LDA ADGBE JMP BAD LBLA LDA ADGBO JMP BAD PRTLG LDA TRKCT GET READY TO PRINT LG TRACKS SLA JMP LEFT LDA ADLGE JMP BAD LEFT LDA ADLGO JMP BAD PRTFR LDA TRKCT GET READY TO PRINT -- TO INDICATE FREE SLA JMP LBA LDA ADAVE JMP BAD LBA LDA ADAVO JMP BAD PRTEN LDA TRKCT GET READY TO PRINT ENTS SLA JMP DO LDA ADENE JMP BAD DO LDA ADENO JMP BAD PRTLB LDA TRKCT GET READY TO PRINT LIBRY SLA JMP OH LDA ADLBE JMP BAD OH LDA ADLBO JMP BAD * * "CTR" INDEXES THE POINTER TO THE APPROPRIATE POSITION * IN THE OUTPUT BUFFER. POINTER IS INCREMENTED ALTERNATELY * BY THREE OR FOUR. * BAD LDB TRKCT LOAD TRACK CTR. SLB,RSS SKIP IF ODD JMP ME GO TO ODD LDB CTR MAKE COUNTER THREE ADB D3 STB CTR JMP BALL ME LDB CTR MAKE COUNTER FOUR ADB D4 STB CTR BALL LDB ADTAB LOAD ADDRESS OF TABLE AND ADB CTR INDEX IT BY COUNTER MVW NO.,I PUT ENTRY IN TABLE, A REG. HAS ADDR. LDA CTR SEE IF FINISHED WITH LINE CPA D35 BY COMPARING WITH 35 JMP DOWN YES, PRINT OUT TABLE (ONE LINE) LDB TRKCT COMPARE CTR. WITH LENTGH OF SYS DISC INB CPB TATSD JMP .DWN PRINT LAST TRACKS ON SYSTEM DISC JMP LOW CHECK FOR TABLE COMPLETION * * PRINT OUT TABLE WITH TRACK IDENTIFIERS * .DWN LDA CTR STA TEMP LDB TRKCT SLB,RSS JMP BE LDB TEMP ADB D4 STB TEMP JMP TALL BE LDB TEMP ADB D3 STB TEMP TALL LDA ABLK LDB ADTAB ADB TEMP MVW ONE DOWN LDA CNTR CNTR IS AN INDEX OF TEN USED IN THE OUTPUT JSB HERE JMP TO CONVERSION ROUTINE LDB A,I RETURN HERE FROM THE CONVERSION ROUTINE INA THREE WORDS OF TABLE LDB A,I STB TABLE INA LDB A,I STB TABLE+1 JSB $LIBX END PRIVILEGE STATUS DEF *+1 DEF *+1 * * PRINT OUT TABLE WITH TRACK IDENTIFIERS * JSB EXEC EXEC CALL TO WRITE OUT TABLE DEF *+5 DEF D2 DEF LU DEF TABLE BUFFER FOR TABLE OUTPUT DEF D39 LENGTH OF OUTPUT * * CHECK FOR BREAK FLAG IF SET THEN EXIT FROM PROGRAM * OTHERWISE CONTINUE ON. * JSB IFBRK DEF *+1 SZA JMP NOW EXIT FROM PROGRAM * BLANK OUT TABLE * LDA ADBLK LOAD ADDRESS OF BLANKS INTO A REG LDB ADTAB MVW D39 CLA CLEAR COUNTER STA CTR LDA CNTR ADA D10 STA CNTR LOW ISZ TATLG INCREMENT TATLG (NEGATIVE #) JMP TWO JMP KAYO * TWO LDB LUDSK DETERMINE SUBCHANNEL CPB D3 JMP .AUX NO NEED TO CHECK COMPLETION OF SYS DISC LDB TRKCT INCREMENT TRACK COUNTER INB CHECK FOR COMPLETION OF CPB TATSD SYSTEM DISC JMP SOON PRINT OUT AUX DISC HEADING .AUX ISZ TRKCT INCREMENT TABLE COUNTER ISZ TAT INCREMENT I.E. DECREMENT TABLE LENGTH JMP HIGH * * PRINT OUT AUX DISC HEADING * SOON JSB BAUD PRODUCE A BLANK LINE JSB BAUD JSB EXEC EXEC CALL TO WRITE OUT AUX DISC HEADING DEF *+5 DEF D2 DEF LU DEF AUXDS DEF D7 JSB BAUD LDA D3 SET LU # TO THREE. STA LUDSK LDA TATAD STA TATSD REPLACE SYS. COUNT WITH AUX. COUNT CLA STA TRKCT RESTART COUNTER FOR TABLE ENTRIES. STA CNTR RESTART INDEX COUNTER STA CTRCT RESET TEMP CONTIGUOUS TRACK COUNTER ISZ TAT INCREMENT TAT POINTER JMP HIGH CHECK ANOTHER ENTRY * * PRINT OUT WITH TABLE THE START OF THE LS TRACKS * KAYO JSB EXEC LAST LINE MAY BE PARTIALLY FILLED DEF *+5 DEF D2 DEF LU DEF TABLE DEF D39 JSB BAUD PRODUCE A BLANK LINE JSB EXEC PRINT TRACK STATEMENT DEF *+5 DEF D2 DEF LU DEF LST DEF D24 * * THE FOLLOWING PREPARES AND OUTPUTS THE TRACK * STATEMENTS BY CONVERSION FROM BINARY TO ASCII * THROUGH THE "HERE" SUBROUTINE * WRONG LDA ITRCT COUNT OF TOTAL FREE TRACKS JSB HERE JUMP TO BINARY TO ASCII SUBROUTINE. LDB A,I STB PRTAT+12 INA LDB A,I STB PRTAT+13 INA LDB A,I STB PRTAT+14 JSB $LIBX COMPLETE EXEC CALL TO SYSTEM DEF *+1 DEF *+1 * JSB EXEC EXEC CALL TO PRINT TRACK STATEMENT DEF *+5 DEF D2 DEF LU DEF PRTAT BUFFER LOCATION DEF D15 * LDA TRCTR CONTIGUOUS TRACK COUNTER JSB HERE LDB A,I STB CTAT+16 STORE CONTIGUOUS TRACK COUNT IN LAST 3 INA WORDS OF CONTIGUOUS TRACK STAEMENT LDB A,I STB CTAT+17 INA LDB A,I STB CTAT+18 JSB $LIBX COMPLETE EXEC CALL TO SYSTEM DEF *+1 DEF *+1 * JSB EXEC DEF *+5 DEF D2 DEF LU DEF CTAT DEF D19 * JMP NOW * * FINDS THE SYSTEM OR AUXILIARY DISC WHERE THE * DISC POINTER (IN PACKED FORMAT) POINTS TO, * AS WELL AS THE TRACK. IF THE DISC POINTER IS * LESS THAN 0 THEN THE LU IS 3. ON RETURN * NSPTK =# SECTORS PER TRACK ON THE DISC * LUD = LOGICAL UNIT (DISC LU 2 OR 3) * JTRAK =TRACK ADDRESS * FDISK NOP STA INPTR STORE DISC POINTER AWAY LDB D2 STB LUD SSA,RSS IF THE DISC POINTER IS <0 THEN LU=3 JMP TOO LDB D3 STB LUD TOO ADB M1755 GET NUMBER OF SECTORS PER TRACK LDA B,I STA NSPTK * *FIND THE STARTING TRACK ADDRESS * LDA INPTR AND B776C GET BITS 14 - 7 OF DISC POINTER CLB I.E. THE TRACK ADDRESS DIV D128 STA JTRAK JMP FDISK,I * * THIS SUBROUTINE DETERMINES IF THE TRACK ENTRY INDICATED BY * SYSTEM IN THE TAT, IS THE SWAPPED PROGRAM TRACK OR THE TRACK CONTAINING * MEMORY IMAGE VERSION OF A PROGRAM. THIS IDENTIFICATION IS * ACCOMPLISHED THROUGH THE SEARCH OF THE KEYWORD TABLE. * WHEN THE TAT POINTER IS EQUAL TO THE TRACK POINTER FOUND * IN A PROGRAM'S ID SEGMENT MAP, A TRACK IS IDENTIFIED. * PRGTR NOP LDA FWAK FWA OF KEYWORD BLOCK STA KEYWD TEN XLA KEYWD,I GET FWA OF KEYWORD TABLE SZA,RSS IF KEYWORD ENTRY IS 0 THEN FINISHED JMP PRGTR,I WITH CHECK,RETURN FROM SUBROUTINE ADA D14 GET NAME PORTION CONTAINING THE TYPE AND STA IDADR SHORT SEGMENT (SS) BIT XLA IDADR,I STA NAM3 CLB STB SHTID 0 IN SHTID INDICATES LONG ID SEGMENT AND M20 CHECK THE SS BIT (BIT 4) TO SEE IF IT SZA,RSS IS A LONG ID OR SHORT ID SEGMENT JMP LNGID IT IS A LONG ID SEGMENT LDB SUB1 ID SEGMENT IS OF SHORT FORM STB SHTID INDICATE IT BY -1 IN SHTID LNGID LDA NAM3 MAKE SURE IT'S A DISC RESIDENT PROGRAM AND M22 OR SHORT ID FOR SEGMENTS SZA JMP FROG LDA NAM3 CHECK FOR TYPE FOUR PROGRAMS AND M4 SZA,RSS JMP KEY FROG LDA M46 OCTAL 46 =& STA TYPE SET FLAG FOR MEMORY IMAGE PROG. TRACKS SSB,RSS PICK UP MEMORY ADDRESSES JMP FIVE ISZ IDADR CALCULATE # OF SECTORS USED FOR STORAGE XLA IDADR,I OBTAIN LOW AND HIGH MAIN ADDRESSES STA LWMAN ALSO, LOW AND HIGH BASE PAGE WORDS ISZ IDADR XLA IDADR,I AND THE DISC ADDRESS OF A PROGRAM STA MNHGH IN A SHORT ID SEGMENT ISZ IDADR XLA IDADR,I STA LOWBP ISZ IDADR XLA IDADR,I STA HGHBP ISZ IDADR XLA IDADR,I STA KTRAK JMP SIX * * LONG ID SEGMENT * FIVE LDA IDADR GET MEMORY ADDRESSES OF THE PROG. ADA D8 FROM THE LONG ID SEG. STA IDADR ALSO GET THE DISC ADDRESS OF XLA IDADR,I THE PROGRAM STA LWMAN ISZ IDADR XLA IDADR,I STA MNHGH ISZ IDADR XLA IDADR,I STA LOWBP ISZ IDADR XLA IDADR,I STA HGHBP ISZ IDADR XLA IDADR,I STA KTRAK * * CALCULATE THE NUMBER OF SECTORS REQUIRED FOR * PROGRAM STORAGE. * SIX SZA,RSS IF DISC PTR. =0 THEN GET JMP KEY ANOTHER KEYWORD ENTRY LDA LWMAN CMA,INA MAKE NEGATIVE ADA MNHGH ADA D127 CLB DIV D128 CLE,ELA MULTIPLY BY TWO STA TEMP LDA LOWBP CMA,INA ADA HGHBP ADA D127 CLB DIV D128 CLE,ELA ADA TEMP STA NSCTS * * CHECK FOR PROGRAMS OWNING TRACKS * LDA KTRAK DISC PTR. PASSED AS PARAMETER JSB FDISK TO FDISK LDB LUD DETERMINES IF ON CORRECT LU CPB LUDSK JMP ONCE IT IS THE CORRECT LU JMP ING IT IS THE WRONG LU. ONCE CLB CALCULATE THE LAST TRACK LDA NSCTS ADA NSPTK TO ROUND UP RESULT ADA SUB1 DIV NSPTK ADA JTRAK SUM IS THE LAST TRACK ADA SUB1 STA LSTRK LDB TRKCT SEE IF LAST TRACK OF PROGRAM SOURCE CMB,INB IS GREATER THEN COUNTER OF TAT ADB LSTRK SSB JMP ING * * IF LSTRK >= TRKCT THEN GO CHECK * THE OTHER BOUND * LDB JTRAK CMB,INB ADB TRKCT SSB SKIP IF TRKCT IS LESS THAN START OF * SOURCE TRACKS JMP ING CHECK FOR SWAPPED TRACKS JMP IN SUCCESS IN FINDING SOURC TRACKS ING LDA SHTID CHECK FOR SHORT ID SEGMENT SZA IF SHORT SEG, SWAP TRACK CAN'T JMP KEY APPEAR. GET ANOTHER SEGMENT ISZ IDADR XLA IDADR,I STA KTRAK SZA,RSS IF WORD ID 0 THEN NO SWAP TRACKS JMP KEY JSB FDISK CLB STORAGE FOR # OF EMA TRACKS ISZ IDADR POINTER TO ID EXT XLA IDADR,I ID AND EMA SIZE-WORD 28 OF ID SEG. SZA,RSS IF IT'S ZERO,DON'T WORRY ABOUT EMA TRACKS JMP NOEMA AND B176C GET ID EXT OFFSET OUT OF UPPER 6 BITS ALF,RAL RAL PUT UPPER 6 BITS IN LOWER POSITION ADA $IDEX ADDRESS OF ID EXTENSION TABLE ADA SUB1 ADD IN OFFSET-ADDRESS OF ID EXT LDA A GET ADDRESS OF ID EXT. * ADA TWO COMPENSATE FOR STARTING AT ZERO * AND POINT TO WORD 2 OF ID EXT. LDA A GET # OF TRACKS FOR EMA SWAP AND M1777 LOWER 9 BITS CONTAIN INFO. STA B NOEMA LDA KTRAK COMPUTE LAST POSSIBLE SWAP TRACKS AND M177 ADA JTRAK ADA SUB1 ADA B ADD IN # OF EMA SWAP TRACKS. STA LSTRK LDB LUD CHECK FOR CORRECT LOGICAL UNIT CPB LUDSK JMP ZERO JMP KEY ZERO LDB M136 INDENTIFIER FOR SWAP TRACKS STB TYPE LDA TRKCT CMA,INA A REG CONTAINS LSTRK * * CHECK FOR UPPER BOUNDS OF POSSIBLE SWAPPED TRACKS * ADA LSTRK SSA POINTER FOR SUCCESS JMP KEY NO SUCCESS TRY TO GET ANOTHER ID SEGMENT LDB JTRAK CHECK TO SEE IF TRACK ENTRY COUNTER IS CMB,INB EQUAL TO OR GREATER THAN TRACK # ADB TRKCT OF SWAPPED TRACKS SSB JMP KEY * IN XLA KEYWD,I GET POINTER OF ID SEGMENT JMP ABOVE GET PROGRAM NAME FROM ID SEG. * NOTE: TYPE SYMBOL IS APPENDED TO PROG. NAME * KEY ISZ KEYWD GET ANOTHER KEYWORD ENTRY JMP TEN * SUBROUTINE THAT CONVERTS FROM BINARY TO ASCII. * HERE NOP JSB $LIBR NOP CCE JSB $CVT3 JMP HERE,I * * WILL PRINT OUT ONE BLANK LINE WHEN CALLED * BAUD NOP JSB EXEC DEF *+5 DEF D2 DEF LU DEF BLNK DEF ONE JMP BAUD,I * * EXEC CALL TO TERMINATE PROGRAM * NOW JSB EXEC DEF *+7 DEF CODE DEF ZORO DEF SUB1 SERIAL REUSABLE DEF ZORO DEF LU+1 SAVE OPTION DEF LU * * ZORO DEC 0 INUMB DEC -1 SERIAL REUSEABLE BLNK ASC 1, USED TO PRODUCE A BLANK LINE ABLK DEF BLNK LU BSS 2 STORAGE FOR PARAMETERS TAT BSS 1 ADDRESS OF TRACK ASSIGN. TABLE TATLG BSS 1 LENGTH OF TAT (NEG. #) TATSD BSS 1 LENGTH OF SYSTEM DISC TATAD BSS 1 LENGTH OF AUX. DISC CNTR BSS 1 INDEX USED IN OUTPUT. CODE DEC 6 FWA EQU 1656B FWA OF TRACK ASSIGN. TABLE TLG EQU 1755B TABLE LENGTH SLG EQU 1756B SYSTEM DISC LENGTH TRCTR BSS 1 CONTIGUOUS TRACK COUNTER CTRCT BSS 1 TEMPORARY CONTIGUOUS TRACK COUNTER ITRCT BSS 1 FREE TRACK COUNTER PRTAT ASC 15,TOTAL AVAILABLE TRACKS = CTAT ASC 19,LARGEST CONTIGUOUS TRACK BLOCK = D10 DEC 10 D2 DEC 2 D3 DEC 3 D15 DEC 15 D19 DEC 19 D22 DEC 22 D24 DEC 24 D23 DEC 23 D35 DEC 35 D36 DEC 36 D39 DEC 39 NO. BSS 1 NUMBER OF WORDS MOVED INTO BUFFER TRKCT BSS 1 TAT ENTRY COUNTER AUXDS ASC 7,AUXILIARY DISC D7 DEC 7 TABLE ASC 20, ASC 19, TBL ASC 17,TRACK 0 1 2 3 ASC 22, 4 5 6 7 8 9 TBLHD ASC 23,TRACK ASSIGNMENT TABLE & =PROG ^ =SWAP ADTAB DEF TABLE CTR BSS 1 POINTER IN BUFFER SYS OCT 100000 REPRESENTATION OF SYS IN TAT FMP OCT 077776 REPRESENTATION OF FMP IN TAT FREE OCT 0 " " OF FREE IN TAT M200 OCT 200 AVALE ASC 3, -- AVALO ASC 4, -- SYSE ASC 3,SYSTEM SYSO ASC 4, SYSTEM FMGRO ASC 4, FMP FMGRE ASC 3, FMP D4 DEC 4 ADFOR DEF D4 ADTHR DEF D3 ADSYE DEF SYSE ADSYO DEF SYSO ADFME DEF FMGRE GBE ASC 3,GLOBAL GBO ASC 4, GLOBAL ADFMO DEF FMGRO ADAVE DEF AVALE ADAVO DEF AVALO ADBLK DEF BLNKS BLNKS ASC 20, ASC 19, ONE DEC 1 GLBL OCT 077777 REPRESENTATION OF GLOBAL IN TAT ADGBE DEF GBE ADGBO DEF GBO SUB1 DEC -1 LGOTK EQU 1765B DISC POINTER TO LG TRACKS M177 OCT 177 M1777 OCT 1777 LGE ASC 3, LG LGO ASC 4, LG ADLGE DEF LGE ADLGO DEF LGO INPTR BSS 1 DISC POINTER JTRAK BSS 1 STARTING TRACK ADDRESS LGEND BSS 1 LAST TRACK OF LG AREA LUD BSS 1 LOGICAL UNIT CONTAINED IN DISC PTR LUDSK BSS 1 CURRENT LOGICAL UNIT NSPTK BSS 1 NUMBER OF SECTORS PER TRACK ENTST BSS 1 STARTING TRACK OF ENTRY PTS. ENTND BSS 1 LAST TRACK OF ENTRY PTS. D64 DEC 64 TEMP BSS 1 TEMPORARY STORAGE ENTE ASC 3, ENTS ENTO ASC 4, ENTS ADENE DEF ENTE ADENO DEF ENTO DSCLB EQU 1761B DISC ADDRESS OF LIB. ENTRY PTS. LIBE ASC 3,LIBRY LIBO ASC 4, LIBRY ADLBE DEF LIBE ADLBO DEF LIBO DSCUT EQU 1763B DISC ADDRESS OF RTE LIB PTS. DSCLN EQU 1762B # OF USER LIB. ENTRY PTS. DSSUP EQU 1764B # OF SYS. LIB. ENTRY PTS. B776C OCT 77600 B176C OCT 17600 SUB10 DEC -10 SFCUN EQU 1767B LS TRACK POINTER NAME ASC 4, ADNAM DEF NAME TEMPY BSS 1 TEMPORARY STORAGE LST ASC 24,THE LS TRACK(S) START AT TRACK OF LU UNDEF ASC 15,ARE UNDEFINED ADLST DEF LST+8 ADUND DEF UNDEF M1755 OCT 1755 B40 OCT 40 B1774 OCT 177400 D12 DEC 12 D14 DEC 14 D8 DEC 8 KEYWD BSS 1 ADDRESS OF KEYWORD BLOCK FWAK EQU 1657B FWA OF KEYWORD TABLE IDADR BSS 1 ID SEGMENT ADDRESS NAM3 BSS 1 LOWER PORTION OF ID SEGMENT NAME SHTID BSS 1 INDICATES LONG OR SHRT ID SEG. M20 OCT 20 M136 OCT 136 M26 OCT 26 M46 OCT 46 TYPE BSS 1 BLANK, &, OR ^ LWMAN BSS 1 LOWMAIN ADDRESS MNHGH BSS 1 HIGH MAIN ADDRESS LOWBP BSS 1 LOW BASE PAGE ADDRESS HGHBP BSS 1 HIGH BASE PAGE ADDRESS KTRAK BSS 1 DISC PTR. OR SWAPPED DISC ADDRESS NSCTS BSS 1 NUMBER OF SECTORS USED ON THE DISC M22 OCT 22 D127 DEC 127 D128 DEC 128 M4 OCT 4 LSTRK BSS 1 LAST TRACK WORD BSS 1 WORD1 BSS 1 B2004 OCT 20040 B2000 OCT 20000 END LGTAT