File LNKMAP.MA (MACREL macro assembler source file)

Directory of image this file is from
This file as a plain text file

/LNKMAP - LINK MAP GENERATOR
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1977,1978 BY DIGITAL EQUIPMENT CORPORATION
/
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
/
/
/
/
/
/
/

/LINK MAP MODULE XLIST NOPUNCH .INCLUDE LNKMAN.MA ENPUNCH XLIST .RSECT LNKMAP .EXTERNAL RETMAP
/ / GENERAL PURPOSE BUBBLE SORT / / CALLING SEQUENCE: / JMS SSORT / ADDRESS OF TABLE TO SORT / LENGTH OF TABLE / LEN OF TABLE ENTRY / WORD OFFSET TO SORT ON / WORD MASK / COMPARE TYPE / RETURN / SSORT, 0 TAD SSORT DCA XR1 CDF 0 TAD I SSORT DCA TABLE /ADDRESS OF TABLE TO SORT CMA TAD I XR1 /LEN OF TABLE SNA /LENGTH OF 1? JMP EXIT /YES, NO SORT NEEDED CIA DCA TABCNT TAD I XR1 /LEN OF ENTRY DCA LENENT TAD I XR1 /WORD OFFSET DCA WORD TAD I XR1 /MASK DCA MASK TAD I XR1 /TYPE OF COMPARE DCA S1 SCDF, CDF 10 A4, DCA EXCNT /0 COUNT OF EXCHANGES TAD TABCNT DCA COUNT1 /NO. OF COMPARES TAD TABLE /PRODUCE OFFSET TO 1ST WORD TAD WORD DCA POINT1 /FOR 1ST POINTER JMP A2+2 /BYPASS NEXT 2 WORDS A2, TAD POINT2 /COMPLETE BUMP OF 1ST POINTER DCA POINT1 TAD LENENT /SET 2ND POINTER TO NEXT POSITION IN TABLE TAD POINT1 DCA POINT2 TAD I POINT1 /GET 1ST WORD AND MASK /MASK TO INTERESTED BITS CIA CLL CML /NEGATE DCA TEMP1 /SAVE TAD I POINT2 /GET 2ND WORD AND MASK /MASK TO INTERESTED BITS
TAD TEMP1 /COMPARE S1, SMA CLA /GETS CHANGED TO SNL FOR TYPE&OVRL JMS EXCHNG /EXCHANGE ENTRIES ISZ COUNT1 /OK WAY THEY ARE- MORE? JMP A2 /YES TAD EXCNT SZA CLA /ANY CHANGES THIS PASS? JMP A4 /YES, START ANOTHER PASS JMP RETSS /NO- RETURN EXIT, ISZ XR1 /EXIT IF LENGTH OF TABLE = 1 ISZ XR1 /BUMP 4 TIMES ISZ XR1 ISZ XR1 RETSS, TAD KCDF10 DCA SCDF /SET SCDF BACK TO CDF+10 JMP I XR1 /EXIT / / TABLE, 0 /TABLE ADDRESS TABCNT, 0 /WORD OFFSET MASK, 0 /MASK EXCNT, 0 /COUNT OF EXCHANGES THIS PASS LENENT, 0 /LENGTH OF ENTRY WORD, 0 /WORD OFFSET KCDF10, CDF+10 /
/ /EXCHANGE TWO ENTRIES EXCHNG, 0 TAD WORD CIA TAD POINT1 /CURRENT POINTER - WORD OFFSET = 1 POSITION DCA TEMP1 /1ST WORD TAD WORD CIA TAD POINT2 /CURRENT POINTER - WORD OFFSET = 1 POSITION DCA TEMP2 /2ND WORD TAD LENENT CIA DCA COUNT2 /LENGTH CONTEX, TAD I TEMP1 /GET 1ST WORD DCA TEMP3 /SAVE TAD I TEMP2 /GET 2ND WORD DCA I TEMP1 /STORE IN PLACE OF 1ST TAD TEMP3 /STORE 1ST DCA I TEMP2 /IN PLACE OF 2ND ISZ TEMP1 /BUMP POINTERS ISZ TEMP2 ISZ COUNT2 /DONE WHOLE ENTRY? JMP CONTEX /NO ISZ EXCNT /YES, SET A FLAG JMP I EXCHNG /EXIT / /
RESLSA, 0 /HERE TO RESOLVE AN LSD'D SA, IF NEEDED TAD STRTFD AC3 SZA CLA /SA NEED RESOLVING? JMP I RESLSA /NO TAD STRTAD /YES, GET GST# JMS I CCGSTA /CALCULATE ADDRESS IN GST TAD (5 TAD GSTADR /WANT 6TH WORD (FIELD) JMS I CGGST /GET IT DCA STRTFD /PUT IN FIELD IAC TAD GSTADR /7TH WORD IS ADDRESS JMS I CGGST /GET IT TAD SAOFF /ADD OFFSET DCA STRTAD /STORE IT JMP I RESLSA / /OUTPUT CRLF PCRLF, 0 TAD (215 JMS PACK TAD (212 JMS PACK ISZ LINCT JMP I PCRLF TAD (214 JMS PACK TAD (-60. DCA LINCT JMP PCRLF+1 LINCT, -1 / PAGE
/LOOK FOR ENTRIES THAT REFERENCE THE CURRENT SECT LOKENT, 0 ACM3 DCA EPTR /SET COUNTER TO -3 TAD GST DCA GSTPTR /SET UP POINTER INTO GST TAD GSTCDF DCA GCDF /SET UP FIELD INTO GST IAC DCA CURGST /SET CURRENT GST# TO 1 TAD (NULTAB DCA POINT1 /SET POINTER TO AREA FOR GST SORT NRESLV, JMS TSTBOT /TEST FOR BOTTOM OF GST SKP /NOT AT BOTTOM JMP IFNR1 /FOUND THEM ALL AC4 /BUMP GST POINTER TO "TYPE" WORD (5) TAD GSTPTR JMS I CGGST AND (17 TAD (-14 /IS IT AN ENTRY OR GLOBAL? (14, 15) SPA CLA JMP IFNR /NO IAC /YES, BUMP GST ADDRESS TAD GSTADR JMS I CGGST /GET GST # FROM "FIELD WORD" CIA TAD GINDEX SZA CLA /DOES IT REFERENCE THIS SECT? JMP IFNR /NO- TRY NEXT GST ENTRY TAD GCDF /YES DCA FLDTMP /SAVE FLD OF CURRENT GST ENTRY TAD GSTPTR TAD (5 JMS I CGGST /GET GST REF PTR (WORD 6) SNA /IS IT A VALUE? JMP IFNR /NO JMS I CCGSTA /YES, CALC. GST ADDR TAD (5 /(WORD 6) TAD GSTADR JMS I CGGST /GET THE VALUE OF RESOLVING FIELD ENTRY DCA TEMP1 /SAVE IAC TAD GSTADR JMS I CGGST /GET ABS ADDRESS OF RESOLVING ENTRY DCA TEMP3 /SAVE IT TAD FLDTMP /RESTORE FLD OF ENTRY TO BE RESOLVED DCA GCDF TAD (5 /SET ADDRESS TO FIELD WORD IN CURRENT ENTRY TAD GSTPTR DCA GSTADR AC4000 /SET AC BIT 0 TAD TEMP1 /GET VALUE FROM SECT'S WORD 6 (FIELD) JMS I CPUTG /STORE FLD
TAD GSTADR JMS I CGGST /GET OFFSET FROM CURRENT ENTRY TAD TEMP3 /ADD TO ADDRESS JMS I CPUTG /PUT BACK INTO CURRENT ENTRY WORD 7 TAD GSTPTR /SET UP DCA GSTADR /GSTADR AGAIN CDF 0 /SET DF=0 TAD CURGST DCA I POINT1 /STORE CURRENT GST# IN TABLE TO BE SORTED ISZ POINT1 /BUMP STORAGE POINTER IFNR, ISZ CURGST /BUMP GST# JMS INCPTR /INCR TO NEXT GST ENTRY JMP NRESLV /GO BACK AND TRY AGAIN IFNR1, DCA I POINT1 /STORE 0 IN BUFFER JMS SRTGST /SORT THE BUFFER TAD (NULTAB DCA POINT1 /SET UP PICKUP POINTER OUTENT, TAD I POINT1 /GET CURRENT SYMBOL SNA /DONE? JMP I LOKENT /YES ISZ POINT1 /NO, BUMP POINTER FOR NEXT TIME JMS I CCGSTA /COMPUTE ADDRESS OF CURRENT SYMBOL ISZ EPTR /DONE 2? JMP OUTEN1 /NO NXTLNE, JMS PCRLF /YES, CRLF TAD (-13 /SET COUNTER TO -13 DCA CTR JMS HAFWD /SEND OUT 2 SPACES ISZ CTR /13 TIMES (OCTAL) JMP .-2 TAD (240 JMS PACK /PACK 1 MORE SPACE ACM2 /RESET COUNT TO -2 DCA EPTR OUTEN1, JMS OUTSYM /OUTPUT THIS SYMBOL ITSELF AND ITS ADDRESS TAD OVRLVL SNA CLA /CURRENT LEVEL NON-ZERO? JMP .+10 /NO, ZERO, OUTPUT SPACE ACM2 TAD GSTADR JMS I CGGST /GET TYPE WORD FROM GST AND (17 TAD (-15 SNA CLA /GLOBAL? TAD (307-240 /YES, OUTPUT "G" TAD (240 /NO, OUTPUT SPACE JMS PACK JMS HAFWD /2 MORE SPACES JMP OUTENT FLDTMP, 0 /TEMP STORE FOR FIELD OF CURRENT GST ENTRY CURGST=. CTR, 0 /LOCAL COUNTER / /
/ /FIX SA TO DEFAULT IF SF=-1 FIXSA1, TAD STRTFD IAC SZA CLA /FIELD=-1? JMP LOADMP /NO, FORGET IT DCA STRTFD /YES, SET DEFAULT TO 00200 TAD (200 DCA STRTAD JMP LOADMP .ENTRY FIXSA1 / / PAGE
/HERE WHEN DONE SORT DONES, CDF TAD (-200 DCA BUFCNT /LEN OF OUT BUFFER JMS I (PCRLF /OUTPUT CR, LF TAD (TLINE /OUTPUT TITLE JMS I (OLINE JMS I (PCRLF /CR-LF JMS I (PCRLF /CR-LF JMS UNDEFS /OUTPUT UNDEFINEDS AND GLOBAL ABSOLUTES TAD (STLINE /OUTPUT SUBTITLE JMS I (OLINE JMS I (PCRLF /CR-LF JMS I (PCRLF /CR-LF DCA OVRLVL /ZERO OVERLAY LEVEL TAD SECTAB /SET UP POINTER TO SECTAB DCA POINT3 TAD SECCNT CIA DCA COUNT3 /TOTAL NUM OF SECTAB ENTRIES NXTLM, CDF 10 TAD POINT3 /PREPARE TAD (5 /TO DCA POINT2 /GET TAD I POINT2 /SECT'S LENGTH SNA CLA /0? JMP BMPNT1 /YES, DON'T PROCESS TAD I POINT3 /GET SECT INDEX # INTO GST AND (3777 /MASK DCA GINDEX /SAVE TAD GINDEX JMS I CCGSTA /CALC GST ADDR FROM INDEX AC4 /BUMP TO 5TH WORD IN SECTAB ENTRY TAD POINT3 DCA TEMP2 CDF 10 TAD I TEMP2 /GET OVERLAY AND LEVEL DATA CDF 0 AND (177 /MASK TO LEVEL AND OVERLAY BITS DCA OVRL /SAVE TAD OVRL CIA TAD OVRLVL SNA CLA /SAME AS CURRENT? JMP NXTLM1 /YES, NO PRINT OUT OF LEVEL DATA TAD OVRL /NO, OUTPUT LEVEL DATA DCA OVRLVL JMS PCRLF /CR-LF
TAD (OVRLAY JMS I (OLINE /OUTPUT "OVERLAY" TAD (LEVEL JMS I (OLINE /OUTPUT "LEVEL" TAD (-4 DCA WORD4 TAD OVRLVL CLL RTR RTR AND (7 JMS CVRT /OUTPUT LEVEL# TAD (OVRLAY JMS I (OLINE /OUTPUT "OVERLAY" TAD (-4 DCA WORD4 TAD OVRLVL /GET OVERLAY NUMBER AND (17 JMS CVRT /OUTPUT IT JMS PCRLF /CRLF JMS PCRLF NXTLM1, JMS OUTSYM /OUTPUT SYMBOL AND ITS 17-BIT VALUE JMS HAFWD /OUTPUT 2 SPACES TAD (240 JMS PACK /OUTPUT SPACE TAD (5 /LENGTH IS 6TH WORD IN SECTAB TAD POINT3 DCA POINT3 TAD (-4 /4 CHARACTERS DCA WORD4 CDF 10 TAD I POINT3 CDF 0 JMS CVRT /OUTPUT LEN JMS LOKENT /LOOK FOR ENTRY POINTS /& RESOLVE WHILE YOU'RE AT IT CDF 0 JMS PCRLF /CR-LF NXTLM2, ISZ POINT3 /INCR SECTAB PTR ISZ COUNT3 /DONE WITH ALL ENTRIES? JMP NXTLM /NO JMS CLRGST /YES, CLEAR "FIELD FLAG BITS" / NOW OUTPUT STARTING ADDRESS /
/FINISHED WITH LEVEL MESSAGES FINLM, TAD OPTAB+1 AND (40 SNA CLA /"S" OPTION? JMP FINLM1 /NO TAD BLKBEG /RESTORE DCA GCDF /FIELD OF SYMBOL IN GST TAD EPT2 /GET ADDRESS JMP FINLM0 / BMPNT1, TAD POINT2 /SET POINT3 DCA POINT3 /TO POINT2 JMP NXTLM2 /GO ON TO NEXT SECT POINT3, 0 PAGE
FINLM0, TAD (5 JMS I CGGST /6TH WORD IS FIELD DCA STRTFD IAC TAD GSTADR JMS I CGGST /7TH WORD IS ADDRESS DCA STRTAD CDF FINLM1, JMS PCRLF /CR-LF TAD (ASKPE /OUTPUT "PROGRAM ENTRY:" JMS OLINE JMS HAFWD /2 SPACES JMS RESLSA /RESOLVE SA IF NECESSARY TAD STRTFD /GET STARTING FIELD JMS OCT2 JMS HAFWD /OUTPUT STARTING FIELD TAD (-4 DCA WORD4 /4 CHARACTERS TAD STRTAD /GET STARTING ADDRESS JMS CVRT /OUTPUT IT JMS I (PCRLF /CR-LF TAD (AJSW JMS OLINE /OUTPUT "JOB STATUS WORD:" TAD (240 JMS PACK /OUTPUT A SPACE TAD (-4 DCA WORD4 TAD JSWRD /GET JSW JMS CVRT /OUTPUT IT JMS I (PCRLF /CR-LF TAD (214 JMS I (PACK /FORM FEED TAD (232 /CTRL Z OUFILP, JMS I (PACK TAD BUFCNT /HAVE WE FILLED TAD (200 /A BLOCK UP COMPLETELY? SZA CLA JMP OUFILP /NO, PACK A NULL CDF 0 /CLOSE SYMMAP TAD I (SYLST /AC=LENGTH DCA SMPCLN TAD MAPFIL /MAP UNIT SNA /ANY FILE? JMP RETMAP /NO, FORGET THE CLOSE CIF 10 JMS I USR /CLOSE THE FILE 4 MAPFIL+1 SMPCLN, 0 E22==.; JMS I COS8ER /ERROR RETURN CDF 0 JMP RETMAP /BUILD CORE CONTROL BLOCK / /
/OUTPUT A LINE OF TEXT TO THE SYMBOL MAP OLINE, 0 DCA WORD4 /SAVE ADDRESS OLINLP, TAD I WORD4 /GET FIRST WORD SNA /0? JMP I OLINE /YES, EXIT JMS HAFWD /OUTPUT BOTH HALVES TAD I WORD4 /GET WORD AGAIN ISZ WORD4 /BUMP POINT AND (77 SZA CLA /DONE? JMP OLINLP /NO, GET NEXT WORD JMP I OLINE /YES, EXIT HAFWD, 0 /OUTPUT THE 2-6 BIT ASCII CHARS IN AC DCA TEMP3 /SAVE TAD TEMP3 /LEFT HALF 1ST RTR RTR RTR JMS FIXCHR /FIX CHARACTER JMS PACK /PACK IT TAD TEMP3 /NOW RIGHT HALF JMS FIXCHR JMS PACK JMP I HAFWD /DONE ENTERR, JMS I CFERR /AS WE MAY HAVE COME FROM SYMMAP ENTMSG /ENTER ERROR (USR) /
/MAKE AC INTO 2 6-BIT DIGITS MAKSXB, 0 DCA TEMP2 /SAVE AC TAD (-12 DCA MAKSX0 MAKSXC, TAD (5772 DCA MAKSX1 DCA TEMP1 /ZERO COUNT TAD TEMP2 /GET NUMBER TAD MAKSX0 /SUBTRACT 12 (10 DEC) OR 10 ISZ TEMP1 /BUMP COUNT SMA /UNDERFLOW? JMP .-3 /NO TAD MAKSX1 /YES, RESTORE LSD DCA TEMP2 TAD TEMP1 CLL RTL RTL RTL /GET THE TENS DIGIT INTO POSITION TAD TEMP2 /ADD 1'S DIGIT AND ASCII STUFF DCA TEMP2 TAD TEMP2 AND (1700 SNA CLA /LEADING DIGIT 0? TAD (-2000 /YES, CHANGE INTO SPACE TAD TEMP2 JMP I MAKSXB /EXIT / MAKSX0, 0 /SUBTRAHEND OR MINUEND MAKSX1, 0 /LSD RESTORER / PAGE
/HERE TO DO LOAD MAP (AFTER GETTING STARTING ADDRESS AND JOB STATUS WORD) LOADMP, CDF 0 TAD MAPFIL SNA /ANY MAP FILE SPECIFIED? JMP LOAD1 /NO, DON'T OPEN AN OUTPUT FILE JMS I CIOHAN /YES, GET HANDLER TAD MAPFIL CIF 10 JMS I USR 3 /ENTER THE MAP FILE MPBLK, MAPFIL+1 0 JMP ENTERR LOAD1, TAD VERNUM /MOVE VERSION NUM TO DCA LXX /TITLE TAD VERNUM+1 DCA LXX+1 CDF 10 TAD I (OSDATE /CONVERT OS/8 DATE (IF ANY) INTO SIXBIT CDF 0 DCA TEMP3 TAD TEMP3 SZA /ANY DATE? JMS GDATE /YES, PROCESS IT NODATE, TAD MAPFIL AND (17 CDF 10 DCA I (MPFL /DEVICE NO TAD MPBLK+1 /LENGTH SNA CMA /IF 0 MAKE LOOK LIKE 7777 CIA DCA TASK TAD MPBLK DCA I (MPFL+1 /STARTING BLK NUM
/FILL IN SECTAB WITH SECT'S LOCATION IN MEMORY TAD SECTAB DCA POINT1 /SET UP POINTER INTO SECTAB TAD SECCNT CIA DCA COUNT3 /SET UP SECTAB COUNTER CDF 10 FILL, TAD I POINT1 /GET SECTAB POINTER INTO GST JMS I CCGSTA /COMPUTE GST ADDRESS AC2 TAD POINT1 DCA POINT2 /SET UP POINTER TO FIELD WORD IN SECTAB TAD (5 TAD GSTADR JMS I CGGST /GET FIELD WORD FROM WORD 6 OF GST DCA I POINT2 /STORE IN SECTAB ISZ POINT2 /BUMP POINTER TO ADDRESS WORD TAD GSTADR IAC JMS I CGGST /GET ADDRESS WORD FROM GST DCA I POINT2 /STORE IN ADDRESS WORD IN SECTAB TAD (6 TAD POINT1 DCA POINT1 /BUMP SECTAB POINTER ISZ COUNT3 /DONE? JMP FILL /NO /SORT SECTAB ACM3 DCA COUNT4 /PREPARE TAD SECTAB DCA STAB /TO TAD SECCNT DCA STAB1 JMS SSORT /SORT SECTAB BY ADDRESS, FIELD, AND OVERLAY-LEVEL STAB, 0 /ADDRESS OF TABLE STAB1, 0 /LENGTH OF TABLE 6 /LENGTH OF ENTRY STAB3, 3 /WORD OFFSET STAB4, 7777 /MASK STAB5, SZL CLA /COMPARE ISZ COUNT4 /RETURN POINT, DONE 3 PASSES? SKP /NO JMP DONES /YES IAC TAD COUNT4 SNA CLA /WHICH PASS NEXT? JMP SPASS3 /3RD, SET MASK TO 177 TAD (37 /2ND, SET MASK TO 37 DCA STAB4 CMA TAD STAB3 /DECREMENT DCA STAB3 /WORD OFFSET JMP STAB-1 /DO ANOTHER SORT
SPASS3, TAD (177 /SET MASK TO 177 DCA STAB4 ISZ STAB3 /BUMP TO WORD 4 ISZ STAB3 JMP STAB-1 / CVRT, 0 JMS CVRT1 JMS I (HAFWD JMP I CVRT LEVEL, TEXT "LEVEL" OVRLAY, TEXT "OVERLAY" PAGE
/PACK ASCII IN AC INTO OUTPUT BUFF IN /OS/8 3 WORD FORMAT TO 2 12 BIT WORDS PACK, 0 ISZ PACKCT /3RD WORD ? JMP ONEOR2 /NO DCA TEMP1 /YES, SAVE CHAR ACM2 /BACKUP BUFF PTR TAD PACKPT DCA PACKPT ACM3 DCA PACKCT /RESET CNTR CDF 10 JMS ROL /POSITION HI AND COMBINE WITH 1ST CHAR DCA I PACKPT /STORE BACK ISZ PACKPT /BUMP TO 2ND POSITION AGAIN JMS ROL /POSITION LO AND COMBINE WITH 2ND CHAR DCA I PACKPT /STORE BACK CDF ISZ PACKPT /BUMP TO NEXT LOCATION ISZ BUFCNT /OUTPUT BUFFER FULL? JMP I PACK /NO TAD MAPFIL SZA CLA /ANY OUTPUT? JMS WRBUF /YES, WRITE OUT THE BUFFER TAD SBPTR DCA PACKPT /RESET ARGS (POINTER TO BUFFER) TAD (-200 /SIZE OF BUFFER DCA BUFCNT JMP I PACK /EXIT ONEOR2, CDF 10 DCA I PACKPT /FIRST OR 2ND, STORE CHARACTER CDF ISZ PACKPT /BUMP POINTER NOP /FILLER, SHOULD NEVER SKIP THOUGH! JMP I PACK /EXIT PACKPT, MAPBUF /PACK POINTER PACKCT, -3 /PACK COUNTER /POSITION AND STORE HALF OF 3RD CHARACTER ROL, 0 TAD TEMP1 /3RD CHAR RTL /POSITION RTL /BITS DCA TEMP1 /SAVE FOR NEXT CALL ON LO TAD TEMP1 /GET BACK AND (7400 /MASK TO 4 BITS TAD I PACKPT /ADD IN OLDY JMP I ROL /EXIT
/WRITE CURRENT OUTPUT BUFFER WRBUF, 0 /WRITE OUT TAD TASK SNA CLA E34==.; JMS I COS8ER /ERROR, MAP FILE TOO BIG FOR DEVICE CDF /SYM MAP JMS I CIOHAN /BUFFER MPFL /ADDR OF SYM U 200^1!4010 /1 BLK OF FLD 1 SBPTR, MAPBUF /1ST ADDR SYLST, 0 /REL BLK ISZ TASK /BUMP BLOCK COUNT NOP /FILLER JMP I WRBUF /CONVERT AC TO ASCII NUMBER CVRT1, 0 DCA CVRTMP LOP7, TAD CVRTMP /CVRT LEFT TO RTL /RIGHT RAL /3 BITS PER DCA CVRTMP /DIGIT TAD CVRTMP RAL AND (7 TAD (260 JMS PACK ISZ WORD4 /ENOUGH ? JMP LOP7 /NO JMP I CVRT1
OUTSYM, 0 /DO ONE SYMBOL ACM3 /SET POINTER TO -3 DCA CVRTMP DCA CVRT /CLEAR "SPACE" FLAG TAD GSTADR JMS I CGGST /GET 1ST 2 CHARACTERS SMA /MINUS? JMP OUTSM1 /NO DCA CVRT1 /YES, SAVE TAD (244 /OUTPUT "$" JMS PACK CMA /SET "SPACE" FLAG DCA CVRT TAD CVRT1 /GET CHARACTERS BACK AND (3777 /MASK OFF "$" BIT JMP OUTSM1 /OUTPUT IT TAD GSTADR /GET 2 CHARACTERS OF SYMBOL JMS I CGGST OUTSM1, JMS I (HAFWD /OUTPUT THE 2 CHARACTERS ISZ GSTADR /BUMP PICKUP ADDRESS ISZ CVRTMP /DONE? JMP .-5 /NO TAD CVRT /GET "SPACE" FLAG SZA CLA /SET? JMP .+3 /YES, OUTPUT ONLY 1 SPACE TAD (240 /NO, OUTPUT 2 SPACES JMS PACK TAD (240 JMS PACK ISZ GSTADR /BUMP TO WORD 6 ISZ GSTADR TAD GSTADR JMS I CGGST /GET FLD OF SYMBOL AND (37 /MASK TO FIELD BITS PR15A, NOP /NOP OR SKP CLA JMS OCT2 /CONVERT TO 2 DIGITS JMS I (HAFWD /OUTPUT IT TAD (-4 /NOW DO ADDR OF DCA WORD4 /SYMBOL IAC /NEXT WORD IS ADDRESS TAD GSTADR JMS I CGGST /GET IT JMS CVRT1 /CONVERT TO ASCII JMP I OUTSYM /DONE WITH SYMBOL CVRTMP, 0 / / PAGE
/ START OF OVERLAY / / PREPARING TO WRITE CORE CONTROL BLOCK / FIRST SEE IF THE USER WANTS TO SPECIFY / A PROGRAM ENTRY AND/OR A JOB STATUS WORD / AT THIS TIME .ENTRY START2 START2, CDF DCA TTYINH /CLEAR TTYINH ISZ PASS2 /SET PASS 2 FLAG TAD OPTAB+1 /S OPTION? (STARTING ADDRESS) AND (40 SNA CLA JMP ASKJSW /NO-ASK FOR JSW ASKAGN, JMS I CTTYHN /YES, ASK FOR AND GET STARTING ADDRESS CDF 0 ASKPE /GIVE PROMPT JMS TTYIN /GET INPUT JMP BADMSG /TOO MANY RUBOUTS OR TOO LONG A NUMBER TAD (TTYBUF-1 /SET UP PICKUP POINTER DCA XR1 JMS CRLF /OUT PUT CR/LF CDF TAD I (TTYBUF /GET FIRST CHARACTER IN BUFFER TAD (-70 SPA CLA /NUMBER? JMP NUMSTR /YES, LESS THAN 70 TAD (INBUF /SET UP STORAGE POINTER DCA POINT1 ACM3 DCA COUNT1 /SET STORAGE COUNT CMA DCA COUNT2 /LEFT-RIGHT FLAG NXTCHR, CDF 0 TAD I XR1 /REPACK INPUT TWO PER WORD TAD (-15 SZA /DON'T STORE CR TAD (15 CDF 10 AND (77 /MASK CHARACTER TO 6 BIT ISZ COUNT2 /LEFT OR RIGHT? JMP CHR2 /RIGHT (SECOND) CLL RTL /MOVE LEFT 6 RTL RTL DCA I POINT1 /SAVE IN BUFFER JMP NXTCHR /GET NEXT CHARACTER CHR2, TAD I POINT1 /RIGHT HALF, COMBINE WITH LEFT DCA I POINT1 /STORE BACK ISZ POINT1 /BUMP POINTER ISZ COUNT1 /DONE ALL 3 WORDS? JMP NXTCHR-2 /NO TAD (INBUF /LOOK FOR SYMBOL IN GST DCA INPTR JMS SEARCH
JMP BADMSG /NOT FOUND, BAD ENTRY NAME TAD GCDF /SAVE FIELD DCA BLKBEG TAD GSTPTR /AND ADDRESS DCA EPT2 /OF SYMBOL IN GST ASKJSW, TAD OPTAB+1 /W OPTION? (JOB STATUS WORD) CLL RTR SNL CLA JMP PUTJSW /NO, FINISH JOB STATUS WORD AJWAGN, CDF 0 /YES, ASK FOR AND GET JOB STATUS WORD JMS I CTTYHN /GIVE PROMPT CDF 0 AJSW JMS TTYIN /GET INPUT JMP AJWAGN /ERROR IN INPUT TAD (TTYBUF-1 /SET UP ACCESS POINTER DCA XR1 TAD (-4 /AND COUNTER DCA COUNT1 GETNUM, JMS OCTIN /GET JSW JMP AJWAGN /BAD INPUT TAD TEMP1 /GET RESULT DCA JSWRD /SAVE JMS CRLF /CARRIAGE RETURN LINE FEED PUTJSW, TAD TRNCNT SNA CLA /ANY TRANSFER VECTORS? JMP .+5 /NO TAD JSWRD /YES, OR IN AND (7577 /BIT WHICH SAYS TAD (200 /PROGRAM DCA JSWRD /CONTAINS OVERLAYS DCA MAXBLK /INITIALIZE MAXBLK JMP FIXSA1 /DO LOAD MAP, AFTER FIXING SA /HERE IF NUMERIC STARTING ADDRESS NUMSTR, TAD (-6 DCA COUNT1 /SET UP FOR 5 DIGITS IN SA JMS OCTIN /GET NUMBER JMP ASKAGN /BAD INPUT TAD OPTAB+1 /CLEAR "S" SWITCH AND (7737 DCA OPTAB+1 TAD TEMP2 DCA STRTFD /SAVE FIELD TAD TEMP1 /SAVE ADDRESS JMP ASKJSW-1 /
/ BADMSG, CDF 0 JMS I CTTYHN CDF 0 BPE /BAD ENTRY NAME JMP ASKAGN / / / / PAGE
/SUBROUTINE TO ACCEPT INPUT FROM TTY AND STORE IN TTYBUF /EXIT CALL+1 IF ERROR, CALL+2 IF CR SEEN TTYIN, 0 TAD (-6 DCA COUNT1 /BLANKING OUT THE TAD (TTYBUF-1 DCA XR1 /TTY BUFFER DCA I XR1 /SET TO BLANK ISZ COUNT1 /DONE 6? JMP .-2 /NO TAD (TTYBUF-1 /YES, SET UP STORAGE DCA POINT1 /POINTER TAD (-7 DCA COUNT1 /AND COUNTER NXTIN, CDF TAD I (7777 /GET STATUS WORD RAL SMA CLA /BATCH IN? JMP NOBATC /NO TAD I (7777 /YES AND (70 /FORM CIF TO BATCH TAD (CIF DCA BATGO CMA /FORM CDF TO BATCH TAD BATGO DCA .+1 HLT TAD I (5600 /GET SPECIAL WORD CDF TAD (-2214 SZA CLA /CORRECT? JMP NOBATC /NO BATGO, HLT /YES, CHANGE TO BATCH FIELD JMS I (5400 /GO TO BATIN NOP JMP .+4 NOBATC, KSF /WAIT FOR KEY STRIKE JMP .-1 KRB /READ IN CHARACTER AND (177 /MASK TO 7 BITS DCA TEMP1 /SAVE TAD TEMP1 JMS TTYO /ECHO CHARACTER TAD TEMP1 TAD (-3 SNA /CONTROL-C? JMP I (7600 /YES TAD (-7 SNA /LINE FEED? JMP NXTIN /YES, THROW IT AWAY TAD (-3 SNA /CARRIAGE RETURN? JMP OUTTY /YES, EXIT
TAD (15-177 /RUBOUT? SNA CLA JMP RUBOUT /YES, DELETE CHARACTER RUB1, TAD TEMP1 /NO, STORE CHARACTER IN BUFFER ISZ POINT1 /AFTER BUMPING POINTER DCA I POINT1 ISZ COUNT1 /GOT ENOUGH? JMP NXTIN /NO, GET ANOTHER CHAR JMP I TTYIN /TOO MANY CHARACTERS / RUBOUT, CDF 10 TAD I (7726 /GET SCOPE BIT CDF AND (200 SNA CLA /SET? JMP RUB0 /NO TAD (10 /YES JMS TTYO /OUT PUT BS,SP,BS TAD (40 JMS TTYO TAD (10-334 RUB0, TAD (334 /TYPE OUT / JMS TTYO DCA I POINT1 /REPLACE WITH BLANK TAD (TTYBUF-1 CMA TAD POINT1 /MAKE SURE RUBOUTS DON'T SPA CLA /GO PASS TOP OF TTYBUF JMP I TTYIN /THEY DID CMA /BACK UP POINTER 1 POSITION TAD POINT1 DCA POINT1 CMA TAD COUNT1 JMP NXTIN-1 /TRY AGAIN / OUTTY, ISZ TTYIN /EXIT CALL+2 ON CR CMA DCA COUNT1 JMP RUB1 / PAGE
/ /OCTAL INPUT ROUTINE FOR LINKER /ASSUME COUNTER AND POINTER INTO BUFFER SETUP /IN XR1 AND COUNT1, EXIT CALL+1 IF BAD, CALL+2 IF OK OCTIN, 0 DCA TEMP1 /CLEAR VARIABLES DCA TEMP2 OCTIN0, TAD I XR1 /GET NEXT CHARACTER TAD (-15 SNA /CR? JMP OCTINX /YES, DONE TAD (15 /NO DCA TEMP3 /SAVE ACM3 DCA COUNT3 /SET UP FOR 3 ROTATES OCTIN1, TAD TEMP1 RAL CLL /ROTATE LOW ORDER WORD DCA TEMP1 TAD TEMP2 RAL /ROTATE HIGH ORDER WORD DCA TEMP2 ISZ COUNT3 /3 ROTATES? JMP OCTIN1 /NO JMS TSTCHR /TEST CHARACTER TO BE OCTAL TAD TEMP3 /GET CHARACTER AND (7 /MASK TAD TEMP1 /COMBINE IN DCA TEMP1 ISZ COUNT1 /INPUT ENOUGH? JMP OCTIN0 /NO TAD I XR1 /YES TAD (-15 SNA CLA /IS NEXT CHARACTER CR? OCTINX, ISZ OCTIN /YES, BUMP RETURN ADDRESS JMP I OCTIN /EXIT /
/ TSTCHR, 0 TAD TEMP3 /GET CHARACTER TAD M60 SPA /60 OR GREATER? JMP TSTXIT /NO, ERROR TAD M7 SPA SNA CLA /67 OR LESS? JMP I TSTCHR /YES, OK TSTXIT, CLA JMP I .+1 OCTINX M60, -60 M7, -7
/GET DATE ROUTINE GDATE, 0 RTR CLL /3 RIGHT RAR AND (37 /MASK TO LSB'S JMS MAKSXB /MAKE INTO 2 SIXBIT CHARACTERS DCA LDATE+1 TAD TEMP3 /GET DATE AGAIN AND (7400 /MASK TO MONTH RTL CLL /6 LEFT RTL RTL TAD (MONTHS-3 /FORM ENTRY INTO TABLE DCA XR0 TAD I XR0 /GET 1ST 2 CHARACTERS OF MONTH DCA LDATE+2 TAD I XR0 /GET 2ND 2 CHARACTERS DCA LDATE+3 TAD TEMP3 /GET DATE AGAIN AND (7 /MASK TO YEAR DCA TEMP3 /SAVE TAD I (7777 /GET EXTENDED DATE WORD AND (600 /MASK TO INTERESTED BITS RTR CLL /4 RIGHT RTR TAD TEMP3 /ADD BACK YEAR TAD (106 /PLUS "70" JMS MAKSXB /MAKE INTO 2 SIXBIT CHARACTERS DCA TEMP3 /SAVE TAD TEMP3 RTR CLL RTR RTR AND (77 TAD (5500 /FORM "-Y" DCA LDATE+4 TAD TEMP3 AND (77 RTL CLL RTL RTL DCA LDATE+5 /STORE REST OF DATE JMP I GDATE
/SUBROUTINE TO CLEAR BIT 0 OF GST FIELD WORD CLRGST, 0 TAD GST DCA GSTPTR /SET UP POINTER TAD GSTCDF DCA GCDF /SET UP CDF CLRGS0, JMS TSTBOT /AT END OF GST? SKP /NO JMP I CLRGST /YES TAD GSTPTR /SET TO TAD (5 /WORD 6 JMS I CGGST /GET "FIELD WORD" AND (37 /CLEAR BIT 0 JMS I CPUTG /PUT BACK JMS INCPTR /BUMP GSTPTR TO NEXT ENTRY JMP CLRGS0 /GO AROUND AGAIN PAGE
/OUTPUT UNDEFINED AND GLOBAL ABSOLUTE SYMBOLS / UNDEFS, 0 TAD MAPFIL SNA CLA /ANY MAP FILE? JMP I UNDEFS /NO, DON'T BOTHER LOSING TIME ACM3 DCA SYMCNT /SET SYMCNT TO -3 TAD GSTCDF /SET UP POINTERS DCA GCDF TAD GST DCA GSTPTR NXTUND, AC4 TAD GSTPTR JMS I CGGST /GET 5TH WORD FROM SYMBOL(TYPE) AND (200 SNA CLA /SET? JMP UNDBMP /NO TAD I (UNDMSG SNA /HAS IT BEEN TYPED? JMP .+5 /YES JMS OLINE /NO, TYPE UNDEFINED MESSAGE DCA I (UNDMSG /ZERO IT FOR NEXT TIME JMS PCRLF JMS PCRLF TAD GSTPTR /BACK UP TO START OF ENTRY DCA GSTADR JMS OUTSYM /OUTPUT SYMBOL JMS HAFWD /OUTPUT 2 SPACES JMS HAFWD /TWICE ISZ SYMCNT /3 SYMBOLS? JMP UNDBMP /NO ACM3 /YES, SET UP COUNT DCA SYMCNT JMS PCRLF UNDBMP, JMS INCPTR /BUMP POINTERS JMS TSTBOT /DONE? JMP NXTUND /NO TAD I (UNDMSG SNA CLA /ANY UNDEFINEDS? JMS PCRLF /YES, DO ANOTHER CR-LF ACM3 DCA SYMCNT /SET UP SYMCNT TAD (CLA SKP) DCA PR15A /SUPRESS FIELD OUTPUT JMS SORTGA /SORT GA'S AND OUTPUT IF POSSIBLE GLOBS, TAD GSTCDF /DO GLOBAL ABSOLUTES THE EASY WAY DCA GCDF TAD GST DCA GSTPTR DCA GINDEX /ZERO GINDEX
NXTGLB, ISZ GINDEX /BUMP GINDEX AC4 TAD GSTPTR JMS I CGGST /GET 5TH WORD (TYPE) AND (17 TAD (-15 SZA CLA /GLOBAL? JMP GLBUMP /NO IAC /YES TAD GSTADR JMS I CGGST /GET FIELD WORD SNA /0? JMP .+3 /YES CIA /NO, CHECK FOR SAME TAD GINDEX /GST NUMBER AS CURRENT SZA CLA /0? JMP GLBUMP /NO, NOT GLOBAL ABSOLUTE TAD I (GLBMSG SNA /HAS MESSAGE BEEN TYPED? JMP .+5 /YES JMS OLINE /NO, OUTPUT IT DCA I (GLBMSG /ZERO IT FOR NEXT TIME JMS PCRLF JMS PCRLF TAD GSTPTR /BACK UP TO START OF ENTRY DCA GSTADR JMS OUTSYM /OUTPUT THE SYMBOL JMS HAFWD /OUTPUT 2 SPACES JMS HAFWD /TWICE ISZ SYMCNT /3 SYMBOLS OUT? JMP GLBUMP /NO ACM3 /YES, RESET COUNTER DCA SYMCNT JMS PCRLF GLBUMP, JMS INCPTR /BUMP POINTERS JMS TSTBOT /DONE ALL? JMP NXTGLB /NO GLBRET, JMS PCRLF /YES TAD (NOP DCA PR15A /RE-ENABLE FIELD PRINTING TAD I (GLBMSG SNA CLA /ANY GA'S? JMS PCRLF /YES, OUTPUT A CRLF JMP I UNDEFS /EXIT SYMCNT, 0 /
/ /MAKE 2 OCTAL DIGITS OCT2, 0 DCA TEMP2 /SAVE AC TAD OCT2 DCA MAKSXB /SAVE RETURN ADDRESS TAD (-10 DCA MAKSX0 CLA CLL CMA RAL /SET AC TO -2 JMP MAKSXC / PAGE
/SORT THE GLOBAL ABSOLUTES BEFORE OUTPUTING SORTGA, 0 CDF TAD (NULTAB DCA POINT1 /SET UP STORAGE POINTER IAC DCA GINDEX /SET UP GINDEX SGA0, TAD GINDEX JMS I CCGSTA /CALCULATE GST ADDRESS FOR THIS GST# TAD GSTADR DCA GSTPTR JMS TSTBOT /END OF GST? SKP /NO JMP SGA1A /YES TAD (4 /NO TAD GSTADR JMS I CGGST /GET "TYPE" WORD AND (17 TAD (-15 SZA CLA /GLOBAL? JMP SGA1 /NO IAC /YES TAD GSTADR JMS I CGGST /GET "FIELD" WORD SNA /0? JMP .+3 /YES CIA /NO, COMPARE AGAINST TAD GINDEX /CURRENT GST# SZA CLA /0? JMP SGA1 /NO TAD GINDEX /YES DCA I POINT1 /STORE GST# IN TABLE ISZ POINT1 /BUMP STTORAGE POINTER TAD POINT1 TAD (-7200 SNA CLA /END OF BUFFER? JMP I SORTGA /YES, FULL, OUTPUT GA'S THE EASY WAY SGA1, ISZ GINDEX /BUMP GST # JMP SGA0 /GO BACK AFTER NEXT GST ENTRY SGA1A, DCA I POINT1 /END OF GST, STORE 0 IN BUFFER JMS SRTGST /SORT GST TAD (NULTAB /YES DCA POINT1 /SET UP PICKUP POINTER ACM3 DCA SYMCT1 /SET UP COUNTER
SGA6, TAD I POINT1 /GET GST# SNA JMP GLBRET /DONE JMS I CCGSTA /COMPUTE ADDRESS TAD I (GLBMSG SNA /HAS IT BEEN TYPED? JMP .+5 /YES JMS OLINE /NO, TYPE IT DCA I (GLBMSG /CLEAR IT FOR NEXT TIME JMS PCRLF JMS PCRLF JMS OUTSYM /OUTPUT THE SYMBOL JMS HAFWD /2 SPACES JMS HAFWD /TWICE ISZ SYMCT1 /DONE 3? JMP .+4 /NO ACM3 /YES DCA SYMCT1 JMS PCRLF ISZ POINT1 /BUMP PICKUP POINTER JMP SGA6 /TRY AGAIN
SRTGST, 0 /SUBROUTINE TO SORT GST ALPHABETICALLY AC2 /SET UP FOR SORT DCA TEMP1 /SET OFFSET TO 3RD WORD ACM3 DCA TEMP2 /SET COUNTER FOR 3 PASSES SGA2, TAD (NULTAB DCA POINT1 /SET UP POINT1 DCA TEMP3 /CLEAR SWAP FLAG TAD POINT1 IAC DCA POINT2 /SET UP POINT2 SGA3, TAD I POINT1 /GET 1ST GST# SNA JMP SGA5 /AT END OF BUFFER JMS I CCGSTA /COMPUTE ADDRESS TAD TEMP1 TAD GSTADR JMS I CGGST /GET APPROPRIATE WORD FROM GST ENTRY DCA TEMP4 /SAVE TAD I POINT2 /GET 2ND GST# SNA JMP SGA5 /END OF BUFFER JMS I CCGSTA /COMPUTE ADDRESS TAD TEMP1 TAD GSTADR JMS I CGGST /GET SAME WORD FORM 2ND GST CIA CLL CML TAD TEMP4 /COMPARE AGAINST 1ST SZL SNA CLA JMP SGA4 /1ST IS SMALLER TAD I POINT1 /1ST IS LARGER, SWAP DCA TEMP4 TAD I POINT2 DCA I POINT1 TAD TEMP4 DCA I POINT2 CMA DCA TEMP3 /SET SWAP FLAG SGA4, ISZ POINT1 /BUMP POINTERS ISZ POINT2 JMP SGA3 /GO AGAIN SGA5, TAD TEMP3 /END OF BUFFER SZA CLA /ANY SWAPS? JMP SGA2 /YES, GO AGAIN CMA /NO, DECREMENT WORD OFFSET TAD TEMP1 DCA TEMP1 ISZ TEMP2 /DONE 3 PASSES? JMP SGA2 /NO JMP I SRTGST /YES SYMCT1, 0 PAGE
/ TTYBUF, 40;40;40;40;40;40;40 ASKPE, TEXT "PROGRAM ENTRY:" BPE, TEXT "BAD ENTRY NAME" STLINE, TEXT /SECTION ADDR SIZE ENTRY ADDR ENTRY ADDR/ TLINE, TEXT ' OS/8 LINKER V' *.-1 LXX, 0;0 TEXT " LOAD MAP " *.-1 LDATE, TEXT ' NO /DA /TE' AJSW, TEXT "JOB STATUS WORD:" MONTHS, TEXT "-JAN-FEB-MAR-APR-MAY-JUN-JUL-AUG-SEP-OCT-NOV-DEC" UNDMSG, .+1; TEXT "UNDEFINED SYMBOLS:" GLBMSG, .+1; TEXT "GLOBAL-ABSOLUTE SYMBOLS:" ENTMSG, TEXT "ENTER ERROR" PAGE



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search