File F1114.PA (PAL assembler source file)

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


/COPYRIGHT 1970 DIGITAL EQUIPMENT CORPORATION
/		MAYNARD, MASS.    01754
/REVISED JANUARY 1970
/DEC-08-ESAC-PA

/EDIT-8, BY RICK MERRILL

*1 /MISCELLANEOUS BUFEND, 7600 /LAST USED LOCATION MTABS, -10 /SPACES PER TAB. M77, -77 DDTJR, DDTJR C77, 77 M40, -40 C100, 100 /AUTO-INDEX REGISTERS AXOUT, 0 /OUTPUT INDEX AXCOMB, 0 /COMBINE POIR} AyM} 0 /TEMPORARY INDEX. AXIN, 0 /STORAGE INDEX /NUMBERS M4, -4 /LETTER COUNT C140, 140 /PACK TEST C260, 260 /NUMBERS BASE C340, 340 /PACK MASK TE1, 201 C200, 200 /(START & RESTART) /LISTS LIST7=. /TAG SEARCH C240, 240 257 /(303 - FOR FORTRAN) LIST4=. /OUTPUT LIST. CTAB, 211 C215, 215 212 377 M27, -27 CX51=.-1 /ILLEGAL CONTROL MASK LIST5=. /INPUT LIST FOR "AONE". 240 LIST6=. /INPUT LIST FOR "SFOUND". 225 /CTRL/U . MODIFIED FROM _ 12/69 C214, 214 BELL, 207 C212, 212 CRO, 377 LIST3=. /EXCRETION LIST 215 /LIST BRANCHER. 000 /(SEARCH CHARACTER) M277, -277
/CONSTANTS CCR=C215 C277, 277 /QUESTION CLF=C212 P177, 177 MCR=. M215, -215 M2, -2 M240, -240 M340, -340 NONE, -41 /"NOP-CIA" APP1, APP DELT, DELP READ1=. CHI1, CHIN CFRS, FRST IGNORE, CHIN+1 COMM5, COM5 END, BUFBEG /FIRST LOCATION USED. KEYBD, I33+3200 /JMS I33 I331, I33 KEYBRD, INPAT /NEXT CCON, JMP I Z AXCOMB COM1-1 CZ1, I750+3200 /JMS I750 UTR1, UTRA FIN1, FIND LIS, LIST NINE, 12 NUMB, -272 OUT1, OUT HIGH, OUTH OUTL1=. LOW, OUTL CZ, TAD Z LOW /CONTENTS OF START ONUM, GTOP SORTJ, SORTB PACK1, PACBUF /SEARCH SXS1, TAD Z CHAR /CONTENTS OF L3 SXS2, SLOOK+4400 /JMP SLOOK L3I, L3 /PATCH POINTER L2I, L2 /CONTINUE SEARCH - LETTERS ENDLNI, ENDLN /SPACES TO TABS SPCNO, MOR+4 /PACK SPCGO, MOR+1 /SORT SPLAT, 334 /\ - ACKNOWLEDGE RUBOUT
/VARIABLES FRST, 0 /FIRST LINE ADDRESS THSN, 0 /CURRENT LINE NO. LSTN, 0 /LAST LINE NO. BUFR, BUFBEG /NEXT LOCATION IN BUFFER TCNT, 0 /TAB COUNT ADD, 0 /CHAR. BUF. IN. ARG0, 0 ARG1, -1 ARG2, 0 /CHAR IS ALWAYS SET BY OUT, SOMETIMES BY SORTB; /IT IS ALWAYS USED BY PACK AND SORTB. CHAR, 0 MOV1=. COUNTP, 0 /NO. OF PAGES. CNT=. /PRINT COUNTER XCT, 0 /UNPACK SWITCH XCTIN, 0 /PACK SWITCH ECHOSW, 0 /N0N-ZERO TO PRINT SAVE, 0 TEMP, 0 THIS, 0 /LINE POINTER. OUTDEV, 0 /POINTER TO OUT. SUB. XSAV, 0 /HOLD INPUT POINTER.
/FUNCTIONS KILL, TAD Z END /KILL DCA Z BUFR DCA Z LSTN DCA Z THSN DCA Z FRST JMP I TE1 PERI, TAD Z THSN /. SKP SLAS, TAD Z LSTN // DCA TEMP DCA CHAR JMP I .+1 GLOM MOVE, TAD Z ARG0 /ARG2 .GE. ARG0 CMPT, CIA TAD Z ARG2 SPA CLA ERROR TAD ARG0 DCA MOV1 TAD ARG2 DCA MOV2 JMP I Z ONUM /(GTOP) DTEM, 0000 /NEXT POINTER IN DELETE CHAIN GTEM=. /NEXT 6-BITS OF UNPACK MOV2=. /END OF MOVE BLOCK ERROR=JMS . /ERROR ROUTINE 0 P7600=. M200=. ELIM, 7600 /GRP2-CLA TAD C277 JMS I OUTL1 /PRINT "?" JMP I COMM5 /RESET PATCHES FIRS, TAD Z ARG2 /COMMA JMP I Z ONUM /SWAP ARGS. DELMVP, DELMV CHECKP, CHECK
*176 JMP KILL /RETURNS TO 200 TE, JMP I COMM5 /RETURNS TO 200. START, TLS TAD LOW /OR (JMP I Z AXCOMB) DCA Z OUTDEV /INIT OUTPUT TAD KEYBD DCA I KEYBRD /INIT INPUT ISZ ECHOSW /SET ECHO - ( "DCA ECHOSW" FOR HALF-DUPLEX) DCA LIST3+1 TAD SXS1 /INIT LIST DCA I Z L3I TAD CCR /POSITION PRINT JMS I OUT1 GTOP, DCA Z ARG0 /HERE VIA ONUM DCA Z ARG2 GEXP, TAD Z NONE /IMPLICIT ADD GMIN, TAD Z CMPT DCA G2 DBCV2, DCA Z TEMP JMS I Z CHI1 /(CHIN) TAD Z NUMB SMA JMP GLOM /CONTINUED ARGUEMENTS TAD Z NINE SMA JMP COUNT /CONTINUED NUMBER GLOM, CLA TAD Z TEMP G2, HLT /(NOP) OR (CIA) TAD Z ARG2 DCA Z ARG2 JMS SORTB LIST1-1 OPS1-LIST1 /HANG ON TO COMMAND. TAD CHAR DCA SAVE JMS I Z CHI1 /(CHIN) TAD MCR SZA CLA /C.R. MUST FOLLOW ERROR /.AND. TAD Z ARG0 /IF ARG0=0,ARG0=ARG2 SNA TAD Z ARG2 DCA Z ARG0 TAD Z ARG2 /.AND. CMA TAD Z ARG0 /ARG1=ARG0-ARG2-1 SMA ERROR /.AND. DCA Z ARG1 /ARG0 .LE. ARG2 TAD Z ARG0 /.AND. SPA CLA /ARG0 .GE. 0 ERROR /(ISZ ECHOSW)-FOR HALF-DUPLEX TAD SAVE JMS SORTB LIST2-1 OPS2-LIST2 ERROR OPS1, GTOP /CR EXNEX /ESCAPE EXNEX /LINEFEED GEXP /SPACE GEXP /PLUS FIRS /COMMA GMIN /MINUS PERI /POINT SLAS /SLASH EXLAS /BACKUP PRNT /= EXNEX /ALT (MOD 33) EXNEX /ALT DBCV2 /DUMMY MOVE /DOLLAR ELIM /COMMAND RUBOUT ELIM /CTRL/U ADDED 1/70 PRNT /: ENDLN, 0 JMS I Z PACK1 /PACK C.R. TAD Z ADD SZA DCA I Z AXIN TAD Z BUFR DCA I Z THIS /LINK THIS TO NEW. TAD Z XSAV DCA I Z BUFR TAD Z BUFR DCA Z THIS ISZ Z AXIN TAD Z AXIN DCA Z BUFR DCA XCTIN JMP I ENDLN
SORTB, 0 /SORT AND BRANCH ROUTINE. SZA DCA CHAR /CHAR IS ASSUMED OR SET. TAD I SORTB ISZ SORTB CA AXTEM TAD I AXTEM SPA JMP SEX CIA TAD CHAR SZA CLA JMP .-6 TAD AXTEM /MATCH FOUND. TAD I SORTB DCA SORTB TAD I SORTB DCA SORTB JMP I SORTB ///// SEX, ISZ SORTB /MATCH NOT FOUND. CLA JMP I SORTB COUNT, DCA SORTB TAD Z TEMP RTL CLL RAL DCA Z SAVE /OCTAL TAD Z TEMP RAL TAD Z SAVE TAD SORTB JMP DBCV2 /GET NEXT LIST1=. 215 233 212 240 253 254 255 256 257 274 275 375 276 000 244 377 225 /CTRL/U. ADDED 1/70 272
APP, TAD Z LSTN /APPEND DCA Z ARG0 JMP INS ///// CNGE, JMS I Z DELT /CHANGE XNS, TAD ARG0 /INSERT SNA CLA /TEST FOR TOP INS, ISZ ARG0 /SET TO TOP TAD ARG0 JMS I FIN1 /FIND THE POINTER DCA Z THIS TAD I Z THIS DCA XSAV CLA CMA TAD ARG0 DCA THSN AONE, TAD Z BUFR /BEGIN LINE DCA Z AXIN DCA Z XCTIN MOR, JMS I READ1 JMS I SORTJ LIST5-1 INLIST-LIST5 JMS PACBUF JMP MOR ///// EOL, JMS I Z ENDLNI /END LINE ISZ Z LSTN /ADD LINE ISZ Z THSN TAD C200 JMS I CHECKP JMP FULL JMP MOR
PACBUF, 0 /PACK A CHARACTER TAD Z CHAR TAD M277 SNA CLA JMP ESCA /277 TAD Z CHAR AND Z C340 TAD M340 SNA /("SZA" FOR MOD 37) JMP I PACBUF /(DELETE FOR MOD 37)-IGNORE ILLEGALS TAD Z C140 SNA CLA JMP ESCA /340-377 AND 200-237 TR1, TAD Z CHAR /240-336 AND Z C77 JMS PCK1 JMP I PACBUF ////// ESCA, TAD Z C77 JMS PCK1 JMP TR1 PCK1, 0 DCA UTRA IAC JMS I CHECKP JMP FULL /TEXT BUFFER FULL. TAD UTRA ISZ XCTIN JMP ROT TAD Z ADD DCA I Z AXIN DCA Z ADD JMP I PCK1 ///// ROT, CLL RTL RTL RTL DCA Z ADD CMA DCA Z XCTIN JMP I PCK1
UTEM=PCK1 /UNPACK TEMPORARY UTRA, 0 /UNPACK CHARACTER. JMS GET1 JMP EXTR /EXTEND UT2, SPA CLA /NORM & EXTEND TAD Z C100 /300-337 & 340-376 UT1, TAD Z C200 /240-276 & 200-236 TAD UTEM JMP I UTRA ////// EXTR, JMS GET1 JMP UT1 /QUESTION MARK CMA DCA GET1 /UNPACK ONLY C.R.-(DELETE ALL FOR MOD 37) TAD GET1 /AND TAB AND Z CX51 /AND 2(13,17,31,33,35,37) SZA CLA /... JMP UTRA+1 /... TAD GET1 /... JMP UT2 GET1, 0 /UNPACK 6-BITS ISZ XCT JMP GET3 TAD I Z AXOUT DCA Z GTEM TAD Z GTEM RTR CLL RTR RTR JMP GEND ///// GET3, CMA DCA XCT TAD Z GTEM GEND, AND Z C77 DCA UTEM /SAVE TAD UTEM TAD Z M77 SNA CLA JMP I GET1 /1ST IF 77 ISZ GET1 TAD UTEM TAD Z M40 JMP I GET1
CTRLU, TAD CCR /ECHOS A RETURN,LINEFEED JMS I OUT1 /WHEN BEGINNING OF A LINE IS DELETED JMP AONE /BY CTRL/U. ADDED 1/70 ///// FULL, TAD I Z TE1 /CHECK FOR MIDDLE OF AN N-COMMAND. SMA CLA /(5000 IF TRUE) TAD Z BELL JMS I Z OUTL1 /BYPASS BIT2 JMP I Z TE1 /ROUTINE TO SEE IF THERE IS ENOUGH TEXT BUFFER SPACE TO COMPLETE /A GIVEN OPERATION. ROUTINE ENTERED WITH C(ACC)= NUMBER OF LOCATIONS /NEEDED FOR THE OPERATION. ROUTINE TAKES EXIT 2 IF THERE IS ENOUGH /SPACE;RINGS BELL 5 TIMES AND TAKES EXIT 1 IF NOT ENOUGH SPACE. /THIS ROUTINE IS PAGE INDEPENDENT BUT CANNOT BE USED AS A PAGE /BOUNDRY BUFFER. /ROUTINE ADDED 12/69. CHECK, 0000 TAD AXIN CMA CLL TAD BUFEND SZL CLA JMP .+10 TAD M4 DCA TCNT TAD BELL JMS I OUTL1 ISZ TCNT JMP .-3 JMP I CHECK ISZ CHECK JMP I CHECK
EXLAS, TAD Z M2 /PRINT LAST EXNEX, TAD Z THSN /PRINT NEXT IAC EX, SNA ERROR DCA Z ARG0 /SAVE EFFECTIVE ARG. CMA DCA Z ARG1 /(ISZ ECHOSW) - FOR HALF-DUPLEX LIST, TAD Z ARG0 /LIST SZA CLA /TEST ARGS JMP L0 TAD Z LSTN /SET FULL RANGE CIA DCA Z ARG1 ISZ Z ARG0 /SET TO #1 L0, TAD Z ARG0 JMS I FIN1 DCA Z THIS /SAVE POINTER TAD I THIS /IS POINTER POINTING TO LAST LINE? SNA CLA JMP PROT /YES. OPERATION HAS GONE TO FAR. CMA TAD I Z THIS /GET START DCA Z AXOUT TAD I Z AXOUT /SAVE POINTER FOR SEARCH. DCA XSAV CMA DCA XCT TAD Z ARG0 /SET POINTER DCA THSN ISZ Z ARG0 /SET NEXT LINE L2, OSR /IS OUTPUT SUPPRESS SWITCH (SR 2) SET? RTL SPA CLA JMP I TE1 /YES;EXIT TO COMMAND MODE. JMS I Z UTR1 /UNPACK JMS I OUT1 /PRINT L3, TAD Z CHAR /OR (JMP SLOOK) TAD Z MCR SZA CLA /TEST FOR EOL JMP L2 ISZ Z ARG1 /TEST LINE COUNT JMP L0 /GET NEXT LINE JMP I Z TE1 /WAIT
/SEARCH ROUTINES SLINE, TAD Z CCR /TYPE CR.LF JMS I Z OUT1 /SET CHAR TAD FUDGE SNA TAD I THIS DCA FUDGE JMS I Z ENDLNI /END LINE ISZ Z ARG0 /MOVE POINT ISZ LSTN /ADD A LINE. SBAR, TAD Z BUFR /RESTART PACK BUFFER DCA Z AXIN DCA Z XCTIN SFOUND, JMS I Z CHI1 /(CHIN) JMS I Z SORTJ /TEST INSERTS LIST6-1 SRNLST-LIST6 SGOT, JMS I Z PACK1 /P@CK INSERTS JMP SFOUND /MORE INPUT SLOOK, JMS I Z SORTJ /TEST PRINTED CHARS. LIST3-1 LISTGO-LIST3 JMS I Z PACK1 /PACK SEARCHED CHARS. JMP L2 /CONTINUE SEARCH
SRETN, TAD FUDGE /THIS ROUTINE MODIFIED TO ALLOW DYNAMIC SNA /DELETION DURING SEARCH. 12/69. TAD I THIS DCA DTEM DCA FUDGE JMS I Z ENDLNI /END OF SEARCHED LINE JMS I DELMVP /DELETE OLD COPY OF LINE TAD BUFR DCA AXIN TAD C200 JMS I CHECKP JMP I TE1 ISZ Z ARG1 /TEST COUNT JMP I Z LIS /CONTINUE JMP I Z TE1 /TERMINATE FUDGE, 0000 //// CTRLU2, TAD CCR /PRINTS CR/LF WHEN CTRL/U JMS I OUT1 /DELETES BEGIN OF A LINE. JMP SBAR /ADDED 1/70
FIND, 0 /LOCATE LINE BUFFER CIA SMA ERROR /TOO SMALL DCA Z TEMP TAD Z TEMP IAC TAD Z LSTN SPA CLA ERROR /TOO LARGE TAD Z CFRS JMP .+3 TAD I Z SAVE /CHAIN THROUGH LIST. SZA /FAILSAFE DCA Z SAVE ISZ Z TEMP JMP .-4 TAD Z SAVE JMP I FIND PROT, CMA /LIST ROUTINE WENT TOO FAR. TAD ARG0 /RESET POINTERS SO IT CAN'T HAPPEN DCA THSN /AGAIN. TAD THSN DCA LSTN ERROR LIST2=. /COMMAND LETTERS 306 /F 301 /A 311 /I 303 /C 313 /K 304 /D 314 /L 316 /N 320 /P 322 /R 324 /T 315 /M 307 /G 323 /S CON, 6030 /CONVERSION CONSTANTS 7634 7766 7777
BOX=COUNTP VAL=ARG0 PRNT, TAD Z ARG2 /: OR = DCA Z VAL TAD Z M4 DCA Z CNT TAD ADDR DCA XYZ+2 DCA BOX JMP .+3 ISZ BOX XYZ, DCA Z VAL TAD Z VAL HLT /(TAD CON + (DX) ) SMA JMP XYZ-1 CLA TAD BOX TAD Z C260 JMS I Z OUTL1 /BYPASS BIT2 ISZ XYZ+2 ISZ Z CNT JMP XYZ-3 JMP I Z TE1 ADDR, TAD CON CHIN, 0 /READ IN A CHARACTER SUBR. DCA Z CHAR /CLEAR CHARACTER. INPAT, JMS I33 /OR (JMS I750) AND P177 /MASK PARITY SNA /IGNORE BLANK AND L/T JMP CHIN+1 TAD C200 JMS OUT /ECHO INPUT TAD CHAR JMP I CHIN
OUT, 0 /OUTPUT A CHARACTER DCA CHAR TAD ECHOSW SNA CLA /TEST PRINT CONTROL JMP I OUT JMS I SORTJ LIST4-1 OUTLIS-LIST4 ISZ TCNT /COUNT ONE LETTER TAD CHAR OUTX, JMS I Z OUTDEV JMP I OUT ///// OUTCRL, TAD CCR JMS I Z OUTDEV DCA TCNT TAD CLF JMP OUTX ///// OUTTAB, OSR /BIT1 DOWN FOR SPACES. RAL SPA CLA JMP OUTRT TAD TCNT TAD MTABS SMA JMP .-2 DCA TCNT TAD C240 JMS I Z OUTDEV ISZ TCNT JMP .-3 JMP I OUT ///// OUTRT, TAD CTAB /BIT1 UP FOR TAB-R.O. JMS I Z OUTDEV TAD CRO JMP OUTX
/I-O SUBROUTIES I750, 0 RSF JMP .+4 DCA I33 RFC RRB JMP I I750 ISZ I33 JMP .-6 JMP I .+1 /READER EMPTY. FULL I33, 0 KSF JMP .-1 KRB JMP I I33 OUTL, 0 TSF JMP .-1 TLS CLA JMP I OUTL OUTH, 0 PSF JMP .-1 PLS CLA JMP I OUTH INLIST=. SPACES /SPCS CTRLU /CTRL/U. MODIFIED FROM "_" 1/70. FULL /F.F. FULL /BELL CHIN+1 /L.F. RUB1 /R.O. EOL /C.R. SRNLST=. CTRLU2 /CTRL/U. MODIFIED FROM "_" 1/70 L2 /F.F. SCONT /BELL SLINE /L.F. RUB1 /R.O. /SRNLST AND LISTGO MUST STAY TOGETHER!!!!!! LISTGO=. SRETN /C.R. SGOT /SEARCH CHARACTER
TAGLIST=. /NON-TAGS GTAG2 /SP ("EX+1"- FOR TEXT)-PARAGRAPHS GTAG2 // GTAG2 /TAB ("EX+1"-FOR TEXT) GTAG2 /C.R. OUTLIS=. /SPECIAL OUTPUTS OUTTAB /211 OUTCRL /215 OUTX+1 /212 OUTX+1 /377 - (SET FOR 257 TO TRIM COMMENTS.) SCONT, JMS I I331 /S-BELL DCA LIST3+1 JMP I Z L2I PUNC, HLT CLA /PUNCH PUNCN, JMS TSTOUT JMP I Z LIS FORM, JMS TSTOUT /FORM JMS LEAD TAD C214 JMS I OUT1 TAD M40 JMS LEAD JMP I Z TE1 LEAD, 0 /LEAD TAD M4 DCA TSTOUT JMS I OUT1 ISZ TSTOUT JMP .-2 JMP I LEAD TSTOUT, 0 ISZ ECHOSW /SET FOR PRINTING OSR /BIT10 FOR OUTPUT RTR SNL CLA JMP .+4 PLS /RAISE OUTPUT FLAG. TAD HIGH SKP TAD LOW DCA Z OUTDEV JMP I TSTOUT
TELE=. TELEN, DCA ECHOSW /READ OSR /TEST INPUT BITS. RTR /BIT11 FOR INPUT P7700, SMA CLA JMP I Z APP1 TAD CZ1 /(JMS I750) DCA I KEYBRD RSF RFC JMP I Z APP1 TRAIL, JMS TSTOUT /TRAIL TAD M40 JMP FORM+4 COMBO, TAD Z ARG0 /NEXT SNA HLT IAC CIA DCA Z COUNTP TAD CCON /(JMP I Z AXCOMB) DCA I Z TE1 COMB, TAD CCON+1 /COM1-1 DCA Z AXCOMB DCA Z ARG0 JMP PUNCN ///// COM1, JMP FORM /FORM-FEED COM2, JMP KILL /KILL COM3, JMP TELEN /READ COM4, ISZ Z COUNTP JMP COMB TAD BELL JMS I OUTL1 COM5, TAD CZ /RESTORE LOC 200. DCA I Z TE1 JMP I Z TE1
RUB1, TAD Z AXIN CIA TAD Z BUFR TAD Z ADD SZA CLA /TEST NULL LINE TAD Z ECHOSW SNA CLA /TEST INPUT JMP I Z IGNORE /NULL LINE TAD SPLAT JMS I Z OUT1 TAD Z AXIN DCA Z MOV1 ISZ Z XCTIN /TEST HALF JMP RUB2 TAD I Z MOV1 AND Z C77 TAD Z M77 SZA CLA /TEST EXTEND JMP RUB4 RUB3, CMA DCA Z XCTIN RUB5, CMA TAD Z AXIN DCA Z AXIN TAD I Z MOV1 AND P7700 RUB4, DCA Z ADD JMP I Z IGNORE /(CHIN+1) ///// RUB2, TAD I Z MOV1 AND P7700 TAD Z C100 SZA CLA JMP RUB3 DCA I Z MOV1 JMP RUB5
SPACES, TAD Z ECHOSW /SPACE READIN SNA CLA /TEST READ MODE OSR /BIT0 UP TO COMPRESS SPACES TO TABS SMA CLA JMP I SPCNO /PACK - (MOR+4) CMA /SET 1 SPACE SP2, DCA CNT JMS I Z READ1 /(CHIN) TAD M240 SNA CLA JMP SP2 /IGNORE EXTRA SPACES. TAD CHAR DCA SAVE /SAVE NON-SPACE ISZ CNT TAD M27 /TAB TAD C240 /SPACE DCA CHAR JMS I Z PACK1 /(PACBUF) TAD SAVE JMP I SPCGO /SORT - (MOR+1) /THIS ROUTINE CAN BE PLACED ACROSS PAGE BOUNDRIES LIKE /A LIST SINCE ITS OPERATION IS INDEPENDENT OF PAGE LOCATIONS. XCRET, JMS I I331 /XAMINE OR SEARCH dCA LIST3+1 /SAVE SEARCH CHARACTER TAD SXS2 DCA I Z L3I /PATCH TO "SLOOK" TAD Z BUFR /SET PACK POINTER. DCA Z AXIN DCA Z XCTIN DCA I .+2 /CLEARS FUDGE INCASE SAME WAS LEFT UNCLEARED /DURING "BUFFER FULL" EXIT TO COMMAND MODE. JMP I Z LIS /(LIST) FUDGE
MP1=ARG1 MP2=ARG0 MP3=ARG2 MOVEM, TAD MOV1 /TEST FOR GOOD ARGS. CIA TAD ARG2 SPA CLA /"N,M$XM" JMP .+6 TAD MOV2 CMA TAD ARG2 SPA SNA CLA /TEST COMMAND LOGIC ERROR TAD MOV1 /N JMS I Z FIN1 DCA MP1 IAC TAD MOV2 /M JMS I Z FIN1 DCA MP2 TAD ARG2 /X JMS I Z FIN1 DCA MP3 /ALL FOUND. TAD I MP1 /SWAP POINTERS DCA TEMP TAD I MP2 DCA I MP1 TAD I MP3 DCA I MP2 TAD TEMP DCA I MP3 JMP I Z TE1
/DELETE ROUTINES. MODIFIED 12/69 TO ENABLE GARBAGE COLLECTION. /ROUTINE TO EXECUTE FULL DELETION OF ANY NUMBER OF LINES.ON ENTRY /C(ARG0)=NUMBER OF FIRST LINE TO BE DELETED. C(ARG1)=-NUMBER OF LINES /TO BE DELETED. ON EXIT, C(THSN)=NUMBER OF LINE BEFORE FIRST DELETED /LINE. THIS ROUTINE MUST BE ENTERED WITH C(ACC)=0. DELP, 0000 TAD ARG0 /IS NUMBER OF LAST LINE TO BE CIA /TO BE DELETED >NUMBER OF LAST TEXT LINE? IAC TAD ARG1 TAD Z LSTN SPA CLA /TEST FOR OVERKILL ERROR /OVERKILL NOT ALLOWED DELCYC, TAD ARG0 JMS I FIN1 /FIND POINTER TO LINE N DCA THIS /(PRESENTLY BEING DELETED). TAD I THIS /FIND LOCATION OF LINE AFTER. SNA /IS ROUTINE BEYOND THE LAST LINE? JMP GRD /YES, LOOP UNTIL ARG1 GOES TO 0. DCA DTEM /DEPOSIT LATTER SO TAD I DTEM /THAT POINTER FROM LINE N-1 DCA I THIS /POINTS TO LINE N+1 JMS DELMV /DELETE THE LINE FROM MEMORY GRD, CLA CMA TAD Z LSTN DCA Z LSTN ISZ ARG1 /HAVE ALL LINES BEEN DELETED? JMP DELCYC TAD ARG0 /YES.SET "." TO NUMBER OF LINE IMMEDIATELY DCA THSN /AFTER DELETED TEXT JMP I DELP /EXIT.
/GENERAL TEXT REMOVAL ROUTINE. ON ENTRY, C(DTEM)=LOCATION /OF HEAD OF LINE TO BE DELETED. DELMV, 0000 TAD DTEM /SET "UNPACK POINTER" SO THAT DCA AXOUT /LINE N CAN BE EXAMINED. JMS I UTR1 /LOOK AT CHARACTER. TAD M215 /IS IT A RETURN? SZA CLA JMP .-3 /NO,TRY AGAIN TAD AXOUT /YES, DETERMINE NUMBER OF LOCATIONS CMA /BETWEEN LINE HEAD AND RETURN INCLUSIVE. TAD DTEM DCA CNTR TAD CFRS /STARTING WITH THE FIRST LINE DOK, DCA TEMP /LINE HEAD LOCATION GOES TO TEMP. TAD I TEMP /LOOK AT POINTER VALUE. SNA /IF ZERO,THIS IS THE LAST LINE. JMP DONE DCA SAVE /IT IS NOT =0,SAVE THE VALUE. TAD DTEM /IS THE NEXT LINE HEAD CIA CLL /LOCATION > THE LOCATION OF THE TAD SAVE /HEAD OF THE LINE TO BE DELETED? SZL CLA TAD CNTR /IF YES, THE LINE HEAD LOCATION TAD SAVE /MUST BE MODIFIED TO ACCOUNT FOR DCA I TEMP /DELETION. TAD SAVE JMP DOK
/GARBAGE COLLECT ROUTINE. DONE, CMA TAD DTEM DCA AXOUT /SET STORAGE POINTER FOR MOVE. TADBNTR CIA TAD AXOUT /SET DRAWING ADDRESS FOR MOVE. DCA AXIN TAD BUFR CIA TAD AXIN IAC SNA JMP .+6 /LAST LINE BEING DELETED.JUST MOVE THE POINTERS. DCA CNTR TAD I AXIN /MOVE ALL CHARACTERS TO DELETE THE SPACE. DCA I AXOUT ISZ CNTR JMP .-3 TAD AXOUT /RESET BUFR TO NEW END OF BuFFER. IAC DCA BUFR JMP I DELMV CNTR, 0000 DELE, JMS I DELT JMP I TE1
OPS2, FORM /F APP /A XNS /I CNGE /C KILL /K DELE /D LIST /L COMBO /N PUNC /P TELE /R TRAIL /T MOVEM /M GETTAG /G XCRET /S GETTAG, TAD Z ARG0 /TAG SEARCH SZA CLA JMP GTAG1 TAD Z THSN /NO ARG - USE .+1 DCA Z ARG0 GTAG2, ISZ Z ARG0 /MOVE TO NEXT GTAG1, IAC TAD Z ARG0 JMS I FIN1 DCA Z AXOUT CMA DCA Z XCT JMS I Z UTR1 /UNPACK JMS I Z SORTJ /BRANCH LIST7-1 TAGLIST-LIST7 JMP I Z LIS /PRINT ("JMP GTAG2" - FOR TEXT) BUFBEG=. $



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