File SAVECB.PA (PAL assembler source file)

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

/SAVECB.PA	DEMONSTRATION PROGRAM TO INCREASE THE NUMBER OF SAVE ARGUMENTS
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1977 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.
/
/
/
/
/
/
/
/
/
/

/SAVCB.PA INCREASES THE NUMBER OF SAVE ARGUMENTS JULY 1978 / MEMORY LOCATIONS UTILIZED / 0000-1177 /PROGRAM CODE / 1200-1377 /TTY INPUT BUFFER / 1400-1577 /ORIGINAL CCB BUFFER / 1600-1710 /ADJUSTED CCB BUFFER / 1710-1777 /PROGRAM CODE /PAGE ZERO *0 REDERR, JMS I [CRLF /ILLEGAL INPUT ERROR JMS I [PRMSG TEXT /INPUT?/ JMP I ERR *10 LXR, 1177 /AUTO INDEX FOR INPUT STORAGE CXR, 0 /AUTO INDEX XR, 1377 NXR, 1577 TX, 0 *20 SHNDLR, 7607 ERR, 7605 TEMP, 0 /INPUT NUMBER STORAGE TMP1, 0 /INPUT NUMBER STORAGE DIGFLG, 0 /NUMBER PRESENT FLAG TEMP1, 0 /INPUT FIELD STORAGE TEMP2, 0 /INPUT ADDRESS STORAGE CMND, 0 CHARID, 0 / DLID, 0 /DELIMITER STORAGE FIRST1, 0 /STORAGE FOR SEGMENT FIELD INPUT FIRST2, 0 /STORAGE FOR SEGMENT ADDRESS INPUT CNT, 0 /SEGMENT COUNTER FLD, 0 /USED IN CCB FIELD PRINTING TMP, 0 /TEMPORARY STORAGE-TEXT PRINTING TCB, 0 /PRMSG CALL I.D. ORG, 0 /ORIGIN STORAGE COUNT, -110 BUMP, -2 /USED AS TEST IN LOAD LOOP RBFLG, 0 SEGCNT, -4
*200 START, CDF 0 CIF 10 /CALL COMMAND DECODER JMS I [200 5 2326 /SV. EXTENSION---ASSUMED INPUT CIF 0 CDF 10 TAD I [7620 /STARTING BLOCK OF FILE CDF 0 DCA STFLE /SET UP LOADING OF CCB BLOCK LOAD, JMS I [7607 /LOAD CCB 0101 LOC, 1400 /INTO 1400 STFLE, 0 /STARTING BLOCK OF FILE JMP REDERR / TAD I XR /MOVE CCB UP TO 1600 DCA I NXR ISZ COUNT /ALL DONE? JMP .-3 JMS I (VERMSG /PRINT CCB WRITING INFO CONT, JMS CRLF /INITIALIZE LINE JMS IDCHAR /PRINT INPUT SIGNAL CHARACTER REATTY, KSF /WAITING FOR FLAG TO DISAPPEAR JMP .-1 JMS I [CTCTST /...CTRL/C? TAD [203 /NO-RE-INSTATE CHARACTER JMS I [RBLFT /TEST FOR LINE FEED,RUBOUT TAD [225 DCA TEMP /STORE CHARACTER KCC /CLEAR KEYBOARD,AC TAD TEMP JMS I [TYPIT TAD TEMP TAD [-215 /IS IT THE END OF THE LINE? SNA JMP I [SAVE1 TAD [-63 /IS IT THE END OF INPUT(@)? SNA JMP I [SAVE CLL CLA TAD TEMP DCA I LXR /STORE AWAY CHARACTER TAD LXR TAD [-1110 SNA CLA /TEST FOR LINE OVERFLOW JMP I [BARG JMP REATTY CRLF, 0 /CARRAIGE RETURN--LINE FEED ROUTINE CLL CLA TAD [215 JMS I [TYPIT TAD [212 JMS I [TYPIT JMP I CRLF IDCHAR, 0 /PRINT A #, IT SIGNALS INPUT TIME CLA DCA RBFLG /INITIALIZE RUBOUT FLAG DCA TEMP1 /INITIALIZE INPUT STORAGE WORD TAD [243 JMS I [TYPIT JMP I IDCHAR TYCCB, JMS CRLF TAD [211 JMS I [TYPIT TAD [1377 /ROUTINE TO TYPE OUT CCB INFO DCA CXR TAD I CXR /ADJUST SEGMENT INFO CLL RAL STL RAR DCA CNT /NUMBER OF SEGS JMS I [PRMSG TEXT /START=/ RTRN1, TAD I CXR /GET CIF CDF OF STARTING FIELD AND [174 DCA FLD /STORE IT TAD FLD AND [104 /ISOLATE BANK BITS CLL RTR /SWITCH THEM AROUND RAR SZL TAD [4 CLL RTR TAD [260 JMS I [TYPIT TAD FLD /TIME TO TYPE FIELDS AND [70 CLL RTR RAR TAD [260 JMS I [TYPIT TYORG, TAD I CXR JMS I [PWORD /PROCESS ORIGIN WORD TAD [211 /PRINT ATAB TO SEPARATE HEADINGS JMS I [TYPIT TYJSW, /SET TYCCB CALL FLAG JMS I [PRMSG /PRINT JSW HEADING TEXT /JSW=/ RTRN2, TAD I CXR JMS I [PWORD /PRINT JSW JMS CRLF JMS CRLF TYSEGS, JMS I [PRMSG TEXT /CORE SEGMENTS:/ JMS CRLF JMS CRLF JMP I [SEGSM2 /PROCESS SEGMENTS
*400 PRINT, JMS PRWD ISZ PRMSG /GET MORE TEXT SKP PRMSG, 0 /ROUTINE TO PRINT TEXT CLA TAD I PRMSG SZA JMP PRINT TSF JMP .-1 ISZ PRMSG /TYCCB RETURN JMP I PRMSG PRWD, 0 /ROUTINE TO ISOLATE AND PRINT TEXT CHARS DCA TMP /SAVE PACKED SIX BIT CHARS TAD TMP BSW /POSITION FIRST CHAR FOR PRINTING JMS PCHAR /PRINT IT TAD TMP /ISOLATE SECOND CHARACTER JMS PCHAR /PRINT IT JMP I PRWD PCHAR, 0 /ROUTINE FOR CONVERTING TEXT CHARS TO ASCII AND [77 /ISOLATE SIX BITS SNA JMP I PCHAR TAD [240 /CONVERSION TO ASCII AND [77 TAD [240 JMS TYPIT /PRINT CHARACTER JMP I PCHAR TYPIT, 0 /ROUTINE TO PRINT CHARACTERS TLS TSF JMP .-1 CLA JMS CTCTST /TEST FOR CONTROL/C CLL CLA JMP I TYPIT CTCTST, 0 /SEE IF USER WANTS OUT, CTRL/C... TAD [200 KSF STA KRS TAD [-203 /IS IT A CTRL/C? SNA CTLC, JMP I ERR / CTRL/C MEANS GETOUT... JMP I CTCTST /RETURN RBLFT, 0 TAD [-377 /IS IT A DELETE? SNA JMP I [DELETE TAD [377-212 /IS IT A LINE FEED? SNA JMP I [LFEED TAD [212-225 SZA /IS IT A CTRL/U? JMP I RBLFT TAD [225 JMS I [TYPIT JMP I [NEXTLN SSTADR, TAD TEMP1 /ADJUST FIELD CLL RTR /TRANSFORM FOR CDF--"37" TO "174" RTR BSW SZL TAD [4 TAD [6203 DCA I [1401 /STORE STARTING FIELD CDF CIF TAD TEMP2 DCA I [1402 /STORE AWAY STARTING ADDRESS JMP ENDTST SSBITS, TAD TEMP2 DCA I [1403 /STORE AWAY JSW ENDTST, TAD LXR /TEST FOR END OF INPUT LINE CIA TAD CXR SMA CLA JMP TESTE /TEST FOR CR/LF OR @ JMP I [SDFLG DASH, TAD TEMP1 /ROUTINE TO PROCESS TRIPLET CIA CLL CML TAD FIRST1 SZA CLA /ARE THE FIELDS THE SAME? JMP I [BARG /NO ERROR TAD TEMP2 AND [7600 TAD [200 DCA TEMP2 TAD TEMP2 CIA TAD FIRST2 SZL CLA /ISI UPPER LIMIT > LOWER LIMIT? JMP I [BARG /NO ERROR TAD [1403 /SET INDEX REGISTER DCA XR STA TAD I [1400 /INITIALIZE SEGMENT COUNTER DCA COUNT JMP I [FLDTST /PROCESS SEGMENT TESTE, TAD TEMP /TEST FOR WHETHER END OF LINE OR INPUT ENTST, TAD [-215 /WAS IT ACARRAIGE RETURN? SNA JMP I [NEXTLN /YES PREPARE FOR NEXT LINE TAD [215-"@ /WAS IT EXIT TIME? SNA JMP I [WRCCB /EXIT ROUTINE JMP REDERR /ILLEGAL INPUT PWORD, 0 /ROUTINE TO PROCESS ORIGIN OR JSW WORDS DCA ORG TAD ORG BSW /PROCESS HIGHER BIT FIRST JMS SECT2 TAD ORG /NOW PROCESS LOWER BITS JMS SECT2 JMP I PWORD SECT2, 0 /ROUTINE TO PRINT DOUBLE DIGIT DCA TEMP1 TAD TEMP1 AND [70 /ISOLATE HIGHER DIGIT CLL RTR RAR TAD [260 JMS I [TYPIT TAD TEMP1 AND [7 /ISOLATE LOWER DIGIT TAD [260 JMS I [TYPIT JMP I SECT2
*600 GTNM, DCA DIGFLG /RESET DIGIT FLAG DCA TEMP1 /CLEAR FIELD STORAGE DCA TEMP2 /CLEAR ADDRESS STORAGE GETNUM, TAD I CXR /ROUTINE TO ORGANIZE LINE INPUT TAD [-270 /TEST FOR NUMBER CLL TAD [10 SNL JMS NOTNUM /NO NUMBER DCA TMP1 /STORE NUMBER ISZ DIGFLG /SET NUMBER FLAG JMS ROT /ORGANIZE ARGUMENT INTO TWO WORDS JMS ROT /TEMP1 FOR THE FIELD JMS ROT /TEMP2 FOR ADDRESS TAD TEMP2 TAD TMP1 /TAD IN NEW DIGIT DCA TEMP2 JMP GETNUM SDFLG, TAD CHARID /ADD DELIMITER DCA DLID /STORE IT TAD TEMP2 /STORE PRESENT ADDRESS AWAY AND [7600 DCA FIRST2 TAD TEMP1 /STORE FIELD ALSO AND [37 DCA FIRST1 JMP GTNM
ROT, 0 /ROUTINE TO ROTATE FIELD AND ADDRESS TAD TEMP2 /ADDRESS REGISTER CLL RAL /MOVE POTENTIAL FIELD BIT INTO LINK DCA TEMP2 /NOW READY FOR NEW INPUT - TMP1 TAD TEMP1 RAL /STORE FIELD BITS DCA TEMP1 JMP I ROT NOTNUM, 0 CLL TAD [260 /CONVERT TO ASCII DCA CHARID TAD DIGFLG SNA CLA JMS ACORS /IF NO DIGIT,MUST BE A COMMAND TAD DLID /PROCESS INPUT NUMBER SNA /ZERO INDICATES FIRST NUMBER JMP SDFLG /PREPARE FOR NEXT NUMBER TAD [-"- /IS IT A DASH? SNA JMP I [DASH /PROCESS TRIPLET TAD ["--", /IS IT A COMMA? SNA JMP SDFLG /GET SECOND NUMBER TAD [",-"; /IS IT A SEMI-COLON? SNA JMP I [SSTADR /PROCESS START ADDRESS TAD [";-"= /IS IT AN EQUALS SNA CLA JMP I [SSBITS /PROCESS JSW JMP SDFLG ACORS, 0 /TEST FOR ADD,SUB,OR CHANGE TAD CHARID TAD [-"T /IS IT A TYPE INST? SNA JMP I [TYCCB /IF SO PROCESS IT TAD ["T-"A /IS IT AN ADDITION? SNA JMP CEND TAD ["A-"S /IS IT A DELETION? SZA CLA JMP SDFLG /TEST FOR @ OR CR/LF IAC CEND, DCA CMND /STORE COMMAND FLAG JMP GTNM SAVE1, JMS I [CRLF /PROCESS END OF LINE SAVE, TAD [1177 DCA CXR /POINT TOWARD START OF LINE TAD LXR /WAS THEIR ANY INPUT? CIA TAD CXR SNA CLA /IF LXR EQUALS CXR, THERE WAS NONE JMP I [TESTE /TEST FOR CR/LF OR @ DCA I LXR /SET DELIMITER JMP I [GETNUM /GET INPUT
ATEST, CLA TAD CMND /WHAT IS THE COMMAND? SZA CLA /IF NOT THE ADD COMMAND... JMP I [BARG /THEN ERROR RETURN TAD COUNT /IS IT TO BE ADDED ON THE END? SZA CLA /IF COUNT IS ZERO, YES... TAD [-2 /PUSH BACK INDEX TO SAVE LAST SEGMENT TAD XR DCA XR TAD XR /ADDITION CODE AND [77 /ISOLATE WHERE WE ARE IN THE CCB TAD [1600 /REFERENCE SAME LOCATION IN ADD BUFFER DCA NXR /STORE FOR MOVE TAD FIRST2 /STORE INPUT'S ORIGIN DCA I NXR JMS I [SEGADJ /ADJUST SECOND WORD FOR CCB DCA I NXR STA DCA BUMP /SET ADD INDICATOR JMP I [MOVE /MOVE CCB STEST, STA /DELETION PROCESSOR TAD CMND SZA CLA /IS A DELETION? JMP I [BARG /IF NOT ERROR TAD XR /SET BACK POINTER FOR DELETION TAD [176 /ADD 200 TO REFERENCE 1600 BUFFER DCA NXR IAC /SET DELETION PARAMETER DCA BUMP JMP I [MOVE /MOVE CCB PAGE
*1000 /ROUTINE TO PROCESS CCB SEGMENTS FOR TYPING SEGSM2, TAD [-4 DCA SEGCNT SEGS, TAD I CXR /GET FIRST SEGMENT DCA TMP1 TAD I CXR /GET SECOND WORD OF SEGMENT DCA FLD JMS TFIELD JMS I [SECT2 TAD TMP1 /TYPE ORIGIN OF SEGMENT JMS I [PWORD /TYPE IT TAD [255 /TYPE HYPHEN JMS I [TYPIT JMS TFIELD /TYPE FIELD JMS I [SECT2 TAD FLD /CALCULATE HIGHER LIMIT AND [3700 /ISOLATE NUMBER OF PAGES TAD [-100 /MINUS A PAGE TO BE REPLACED BY CLL RAL TAD [177 /A PAGE FULL OF LOCATIONS TAD TMP1 JMS I [PWORD ISZ CNT /IS THAT ALL THE SEGS? JMP .+5 /NO ... CONTINUE JMS I [CRLF TAD [1177 DCA LXR /RESET INPUT POINTER JMP I [CONT / ISZ SEGCNT /IS THAT THE FOURTH SEGMENT? JMP .+4 /NO...CONTINUE JMS I [CRLF JMS I [CRLF JMP I [SEGSM2 TAD [", JMS I [TYPIT TAD [240 JMS I [TYPIT JMP SEGS FLDTST, ISZ COUNT /IS THAT ALL THE SEGS? SKP CLA JMP I [ATEST /IF SO PROCESS COMMAND TAD I XR /SEARCH FOR FIELD ETC. PAGE DCA TMP /STORE SEGMENT ORIGIN TAD I XR DCA FLD /STORE SEGMENT'S SECOND WORD JMS TFIELD /ADJUST FIELD... CIA /RETURNS WITH FIELD IN AC TAD TEMP1 /IS IT THE SAME FIELD AS INPUT? SPA /OR IS IT LESS THAN FIELD OF INPUT? JMP FLDTST /NEITHER... SZA CLA /IF IT IS LESS THAN INPUT'S FIELD JMP I [ATEST /IT SHOULD BE AN ADD TAD FIRST2 /TEST INPUT'S ORIGIN CIA /IS IT LESS THAN OR EQUAL TO SEGMENT'S ORIGIN? TAD TMP SNA JMP I [STEST /IF EQUAL TEST FOR DELETION SMA CLA JMP I [ATEST /IF LESS TEST FOR ADDITION JMP FLDTST /OTHERWISE CHECK NEXT SEGMENT TFIELD, 0 /ROUTINE TO TRANSFORM FIELDS FOR TYPING TAD FLD AND [76 CLL RTR SZL /ISOLATE BANK BIT "A" TAD [40 CLL RAR SZL /ISOLATE BANK BIT "B" TAD [10 JMP I TFIELD SEGADJ, 0 /ROUTINE TO ORGANIZE CCB SEGMENT SECOND WORD TAD FIRST2 /CALCULATE NUMBER OF PAGES CIA TAD TEMP2 /BY DIFFERENCING THE INPUT ADDRESSES AND [7600 CLL RAR /AND HALVING INTO PAGES DCA FIRST2 /STORE FOR CCB LOAD TAD TEMP1 /ADD IN FIELD JMS CCBFLD /RE-ORGANIZE IT FOR CCB TAD FIRST2 /COMBINE FIELD AND PAGES FOR CCB SEGMENT JMP I SEGADJ CCBFLD, 0 /ROUTINE TO CHANGE FIELD INTO CCB FORM CLL RTR /STARTS WITH A '37' IN AC RTR SZL /TEST FOR B BANK BIT TAD [400 CLL RAR SZL /TEST FOR A BANK BIT TAD [100 CLL RTR RTR RAR /RETURN WITH A '76' IN AC JMP I CCBFLD MOVE, JMS MOVA /MOVE TIME TAD BUMP /IF YES, RESET SEGMENT NUMBER TAD I [1400 DCA I [1400 REMOVE, TAD [1403 /REPLACE ORIGINAL SEGS DCA NXR TAD [1603 /WITH UPDATED ONES DCA XR TAD I [1400 DCA COUNT /SET COUNT TO THE NUMBER OF SEGS JMS MOVA JMP I [ENDTST MOVA, 0 TAD COUNT /WAS THE SEGMENT ADDED ON THE END? SNA CLA JMP I MOVA /IF SO, RETURN TAD I XR /MAKE THE MOVE DCA I NXR TAD I XR /BE SURE TO GET BOTH WORDS DCA I NXR ISZ COUNT /IS THAT ALL THE SEGMENTS? JMP .-5 /IF NO, CONTINUE JMP I MOVA NEXTLN, CLL CLA /ROUTINE TO ACCEPT NEW INPUT LINE DCA DIGFLG /ZERO DIGIT FLAG DCA DLID /CLEAR DELIMITER STORAGE TAD [1177 /RESET INPUT POINTER DCA LXR JMP I [CONT /CONTINUE INPUT CODE PAGE
*1710 /LOCATIONS 1600-1710 ARE USED AS THE CORE CONTROL BLOCK BUFFER DELETE, /TTY DELETION COMMAND CLL CLA TAD LXR TAD [-1177 /WAS THERE INPUT? SNA CLA JMP RBSPCL /NO INPUT--PREPARE FOR SOME... TAD ["\ /PRINT ERASE DELIMITER ISZ RBFLG /TEST TO SEE IF THIS IS THE FIRST RUBOUT JMS I [TYPIT /IT IS CLA CMA /SET RUBOUT FLAG DCA RBFLG CMA TAD LXR DCA TX /PRINT ERASED CHARACTER TAD I TX JMS I [TYPIT BACKUP, CLA CMA TAD LXR DCA LXR KCC JMP I [REATTY RBSPCL, ISZ RBFLG /HAVE ANY CHARACTERS BEEN ERASED? JMP I [CONT /NO...PREPARE FOR INPUT TAD ["\ JMS I [TYPIT DCA DIGFLG /RESET DIGFLG JMP I [CONT LFEED, JMS I [CRLF TAD [243 /TYPE I.D.(#) CHARACTER JMS I [TYPIT TAD [1177 DCA NXR JMP .+3 FEEDER, TAD I NXR JMS I [TYPIT TAD LXR CIA TAD NXR SZA CLA JMP FEEDER KCC JMP I [REATTY BARG, JMS I [PRMSG TEXT /BAD ARGS/ JMP I [NEXTLN SEGNO, 0 TAD I [1400 /ACCES NUMBER OF SEGMENTS CLL RAL /ADJUST EXTENDED MEM BIT STL RAR TAD [32 SPA CLA /ARE THERE MORE THAN 32? JMP REDERR JMP I SEGNO PAGE
*2000 VERMSG, 0 JMS I [PRMSG TEXT / ATTENTION! THE NEW CCB WILL BE WRITTEN DIRECTLY ONTO / JMS I [CRLF JMS I [PRMSG TEXT /THE SPECIFIED INPUT FILE.(SEE SOURCE CODE)/ JMP I VERMSG WRCCB, JMS I [SEGNO /DID WE EXCEED SEGMENT LIMIT? JMS I [7607 /WRITE CCB 4201 1200 /FROM 1200 37 /TO BLOCK '37' JMP REDERR TAD I (STFLE DCA WRFLE JMS I [7607 4101 1400 WRFLE, 0 JMP REDERR JMP I ERR



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