File F1100.PA (PAL assembler source file)

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


/PAL III	REVISED AS OF APRIL 1970

/COPYRIGHT 1970 DIGITAL EQUIPMENT CORPORATION / MAYNARD, MASSACHUSETTS /DEC-08-ASC1-PA /REVISED APRIL 1970 /PAGE 1 /PAGE ZERO CONSTANTS AND STORAGE / TIME-OUT DELAY TO ACCOMODATE PHOTO-ELECTRIC READER *1 WAIT, 0 TAD M2 DCA 14 ISZ 14 JMP .-1 ISZ WAIT JMP I WAIT /INDIRECT REFERENCE TABLE *20 AAA, 0 /POINTER TO READ ROUTINE BBB, 0 /POINTER TO PUNCH ROUTINE DDD, 0 /POINTER TO TYPE ROUTINE SPECI, SPSHUL /SPECIAL CHARACTER HANDLER NCHEKI, NCHEK /CHARACTER TYPE PROCESSOR CHEKI, CHEK /CHECKS CHARACTER LEGALITY SYMCMI, SYMCOM /SYMBOL COMPARISON ROUTINE PUNI, BINP /BINARY PUNCH ROUTINE EEE, ALFO /ALPHA OUTPUT ROUTINE OCTI, OCTO /OCTAL OUTPUT ROUTINE NUMBI, NMBR /OCTAL NUMBER PROCESSOR SPACI, SPACE /SPACE HANDLER CARRI, CARR /CARRIAGE RETURN HANDLER DOLLI, DOLLAR /END-OF-PASS ROUTINE STARI, STAR /ORIGIN HANDLER ADDI, ADD /SET SIGN FOR ADD SYMSTI, SYMSTO /COMMA HANDLER SUBI, SUB /SET SIGN FOR SUBTRACT POINTI, POINT /PERIOD PROCESSOR EQUALI, EQUAL /PARAMETER ASSIGNMENTS FFF, CSYM /MAIN EXPRESSION HANDLER PUSHJI, PUSHJM /PUSHJ ROUTINE POPJMI, POPJMP /POPJ ROUTINE PUSHI, PUSHIN /PUSH ROUTINE POPMI, POPM /POP ROUTINE LDTI, LDTR /LEADER-TRAILER GENERATOR LOPUNI, LOPUN /ASR 33 PUNCH HIPUNI, HIPUN /75 A PUNCH LOREDI, LOREAD /ASR 33 READER HIREDI, HIREAD /750 READER IORIN, IOR /POINTER TO INCLUSIVE OR ROUTINE NEXI, NXPA /POINTER TO NEXT PASS
/PAGE 2 /NUMERICAL CONSTANTS C2, 0002 C3, 0003 C4, 0004 C5, 0005 C6, 0006 C200, 0200 C211, 0211 C214, 0214 C215, 0215 C377, 0377 C4TH, 4000 M2, -0002 M3, -0003 M12, -0012 M23, -0023 M4, -0004 M17, -0017 M215, -0215 M200, -0200 M1, -0001 M6, -0006 M211, -0211 M212, -0212 /TEMPORARY REGISTERS ITEM, 0 /USED BY INCLUSIVE OR ROUTINE TEM5, 0 /USED BY EQUAL ROUTINE TEM1, 0 /AVAILABLE TO ALL ROUTINES TEM2, 0 /... TEM3, 0 /... POPTEM, 0 /USED BY PUSH,POP,ETC
/PAGE 3 /SYMBOLIC CONSTANTS AND POINTERS IAM1, SYTA-1 /USED FOR AUTO-INDEX REGISTERS PGE, 7600 /MASK FOR PAGE BITS CRLF, 4543 /CONSTANT FOR CR,LF MASK, 3777 /MASKS OFF UNDEFINED BIT SL3, 0007 /MASK FOR THREE BIT OCTAL # SL7, 0177 /MASK FOR SEVEN BIT ADDRESS SL6, 0077 /MASK FOR 6-BIT ALPHA CHAR SF2, 6000 /MASK OFF PASS BITS RBGN, 0 /BEGINNING OF READER BUFFER RKON, -574 /SIZE OF READER BUFFER P1BGN, PSHLST /BEGINNING OF PUSHDOWN LIST P1END, -PSHLST-10 /CONSTANT FOR PDL OVERFLOW TBUF, 7450 /BEGINNING OF PASS 3 BUFFER GOREAD, 6650 /BUFFER WITH HIGH SPEED READER C400, 0400 /INDIRECT BIT
/PAGE 4 /DATA REGISTERS PF, 0 /PASS FLAG SPNT, 0 /POINTER TO END OF SYMBOL TABLE CHAR, 0 /CURRENT CHARACTER BEING PROCESSED INFO, 0 /INFORMATION FLAG BINW, 0 /12 BINARY ASSEMBLED WORD OCWD, 0 /12 BIT OCTAL WORD AACT, 0 /ABSOLUTE ADDRESS COUNTER ADDR, 0 /12 BIT ASSEMBLED ADDRESS SYMVAL, 0 /OCTAL VALUE OF SYMBOL SYM1, 0 /FIRST TWO CHARACTERS OF 6-LETTER SYMBOL SYM2, 0 /2ND TWO CHARACTERS SYM3, 0 /3RD TWO CHARACTERS CKSM, 0 /CURRENT BINARY CHECKSUM INSF, 0 /INSTRUCTION FLAG; 1 IF INSTRUCTION ZFLG, 0 /Z FLAG; 1 IF PAGE ZERO REFERENCE FLAG, 0 /COMMENT FLAG; 1 IF IN A COMMENT SIGN, 0 /SIGN ASSOCIATED WITH PRESENT ATOM TYPE, 0 /SYMBOL TYPE SWITCH, 0 /END-OF-TAPE FLAG RCNT, 0 /NUMBER OF CHARACTERS LEFT IN BUFFER PSHPN1, 0 /PUSH DOWN POINTER /75A PUNCH ROUTINE /LENGTH: 6 REGISTERS HIPUN, 0 PSF JMP .-1 PLS CLA /EXIT WITH C(AC)=0 JMP I HIPUN
/PAGE 5 /PARAMETER ASSIGNMENTS PUSHJ=JMS I PUSHJI POPJ=JMP I POPJMI AUTOA=10 AUTOB=11 AUTOC=13 SORT1=16 SORT2=17 POP=JMS I POPMI PUSH=JMS I PUSHI /DECIMAL AND OCTAL PSEUDO-OPS /TO SET CURRENT RADIX /LENGTH : 8 REGISTERS DECMA, TAD INST1 /NOP INSTRUCTION DCA I SWTCHN /STORE IN SWITCH POPJ OCTALP, TAD INST2 /SKP INSTRUCTION JMP .-3 /STORE AND EXIT INST1, NOP INST2, SKP SWTCHN, NSWTCH /LOCATION IN "NMBR" C204, 0204 L00, /END OF PAGE MARKER
/PAGE 6 /BEGINNING OF PAL /DETERMINES TYPE OF I-O TO BE USED /CALCULATES PASS NUMBER FROM SWITCH SETTINGS /LENGTH: 34 REGISTERS *200 SPAL, DCA TEM1 /0 TO COUNTER PLS /SELECT PUNCH RFC /SELECT READER RSF /READER FLAG SET? JMS WAIT JMP HREAD /YES: HIGH READER INPUT ISZ TEM1 /WAITED ENOUGH? JMP .-4 /NO: TRY AGAIN TAD LOREDI /YES: LOW SPEED READER DCA AAA TAD TBUF /ALL OF CORE FOR SYMBOLS DCA RBGN TPUN, LAS /CHOOSE MAIN OUTPUT DEVICE RAR /BIT 11 TO LINK SZL CLA /HIGH SPEED PUNCH??? TAD HIPUNI /YES SNL TAD LOPUNI /NO DCA BBB PASS, KCC /INITIALIZE DEVICES TLS PLS CLA OSR AND SF2 /WAS PASS NUMBER SET? SNA JMP NXPA /NO, HALT RAL CLL /GET HIGH ORDER BIT SNL /WAS IT SET? JMP PASS1 /NO, PASS 1 SMA CLA /YES, WHAT ABOUT LOW ORDER? JMP PASS2 /NOT ON, PASS 2 JMP PASS3 /ON, PASS3 NXPA, HLT JMP TPUN
/PAGE 7 /HREAD /ROUTINE TO SET POINTER FOR READ /LENGTH: 4 REGISTERS HREAD, TAD HIREDI DCA AAA TAD GOREAD JMP TPUN-1 /POPJ ROUTINE TO EXIT RECURSIVELY FROM SUBROUTINES /CHECKS FOR PUSHDOWN UNDERFLOW VIA POP ROUTINE /LENGTH: 3 REGISTERS POPJMP, POP /GET RETURN ADDRESS DCA POPTEM /STICK IT IN POPTEM JMP I POPTEM /EXIT /ROUTINES TO SET PASS FLAG AND APPROPRIATE POINTERS /LENGTH: 13 REGISTERS PASS1, CLA /SET PASS FLAG TO ZERO DCA PF TAD IAM1 /INITIALIZE SYMBOL TABLE POINTER DCA SPNT JMP INITAL /GO INITIALIZE FLAGS,STORAGE PASS2, IAC /SET PASS FLAG TO ONE DCA PF DCA CKSM /CLEAR THE CHECKSUM JMS I LDTI /PUNCH LEADER-TRAILER JMP INITAL /INITALIZE FLAGS AND STORAGE PASS3, CMA /SET PASS FLAG TO -1 DCA PF JMS I LDTI /PUNCH LEADER/TRAILER
/PAGE 8 /INITIAL ROUTINE /ROUTINE TO INITIALIZE FLAGS, BUFFERS, AND STORAGE /LENGTH: 15 REGISTERS INITAL, DCA SWITCH /SET END OF TAPE SWITCH TAD TBUF /SET PASS3 BUFFER DCA AUTOC TAD P1BGN /SET PUSHJ,POPJ BUFFER DCA PSHPN1 CMA /SET HIGH SPEED READER BUFFER DCA RCNT TAD C200 /SET ORIGIN TO 200 PUSHJ /SET STAR+3 /AND PUNCH IF PASS 2 TAD LOPUNI /TYPE ON PASS 3 DCA DDD DCA FLAG /COMMENT SWITCH PUSHJ /SET RADIX TO OCTAL OCTALP
/PAGE 9 /MAIN ROUTINE /MAIN CALLS CSYM TO ASSEMBLE A LINE OF CODE /AND DECIDES IF ANY PUNCHING OR PRINTING IS TO BE DONE /AND WHETHER THE AACT SHOULD BE INCREMENTED /LENGTH: 27 REGISTERS MAIN, DCA INSF /CLEAR INSTRUCTION FLAG DCA ADDR /CLEAR 12-BIT ADDRESS WORD DCA BINW /CLEAR BINARY WORD DCA OCWD /CLEAR OCTAL WORD DCA SYMVAL /CLEAR SYMBOL VALUE DCA ZFLG /CLEAR Z-BIT FLAG DCA INFO /CLEAR INFORMATION FLAG DCA SIGN /RESET SIGN TO "IOR" PUSHJ /RECURSIVE CALL TO "CSYM" CSYM /ADDRESS FOR PUSHJ HANDLER TAD PF /WHICH PASS? SNA /DON'T PUNCH ON PASS1 OR PASS3 JMP MOUT /PASS1, JUST RESET POINTERS SPA CLA /PASS 3? JMP I POUTI /YES: ASSEMBLY LISTING TAD INFO /NO,PASS 2, ANYTHING TO PUNCH? SNA CLA JMP MOUT /NO, RESET FLAGS CLL /CLEAR LINK FOR BINP ROUTINE TAD BINW /GET ASSEMBLED BINARY WORD JMS I PUNI /PUNCH IT MOUT, TAD INFO /WAS THERE VALID INFORMATION ON THIS LINE? SZA CLA ISZ AACT /YES,INCREMENT CURRENT LOCATION COUNTER NOP /PREPARE FOR ASSEMBLING INTO 7777 JMP MAIN /GO BACK TO MAIN LOOP POUTI, POUT /ADDRESS OF PASS 3 HANDLER
/PAGE 10 /MAIN CHARACTER PROCESSOR /GATHERS SYMBOLS ON A LINE-BY-LINE BASIS /SYMBOLS MUST BEGIN WITH A LETTER /LENGTH: 17 REGISTERS CSYM, DCA SYM1 /CLEAR SYMBOL STORAGE WORDS DCA SYM2 DCA SYM3 JMS I AAA /GET A LEGAL CHARACTER JMS I NCHEKI /WHAT KIND OF CHARACTER IS IT? JMP I NUMBI /NUMBER - GO PROCESS ISZ INFO /LETTER, INDICATE VALID INFORMATION TAD M2 /GET UP COUNTERS - 2 CHARS PER WORD DCA TEM1 TAD M4 /AND 3 WORDS PER SYMBOL DCA TEM2 JMP I GETSP /GO PACK IT NXCH, JMS I AAA /GET A LEGAL CHARACTER JMS I NCHEKI /WHAT TYPE OF CHARACTER IS IT? JMP I GETSP /NUMBER LEGAL NOW JMP I GETSP /LETTER- GO PACK IT GETSP, GETS /PAL PUNCH AND TYPE ROUTINE /LENGTH: 6 REGISTERS LOPUN, 0 TSF JMP .-1 TLS CLA /EXIT WITH CLEARED AC JMP I LOPUN /THE PAUSE PSEUDO-OP /LENGTH: 5 REGISTERS STOP, HLT CLA /HALT DCA SWITCH /RESET END-OF-TAPE SWITCH CMA /EMPTY READER DCA RCNT /BUFFER POPJ /EXIT L02, /END OF PAGE PAUSE
/PAL III /PART II /PAGE 11 /ROUTINE TO PACK SIX CHARACTERS IN SYM1, SYM2, SYM3 /LENGTH: 25 REGISTERS *400 GETS, ISZ TEM1 /SHOULD CHARACTER BE ROTATED? JMP ROTE /YES TAD M2 /RESET DCA TEM1 /ROTATION COUNTER PUT, TAD PNTR /WHICH WORD IS THIS? TAD TEM2 /ADDRESS IS FORMED FROM CNTR2 AND A DCA TEM3 /POINTER, TO GET RELEVANT SYMBOL WORD TAD CHAR /GET CHARACTER TAD I TEM3 /ADD IN PREVIOUS CHARACTER DCA I TEM3 /STORE IT JMP I NXCHP /GO GET NEXT CHARACTER ROTE, ISZ TEM2 /THE FOURTH? JMP .+5 /NO: ROTATE IT DCA TEM1 /YES: ARRANGE COUNTERS CMA /SO THAT ALL OTHERS ARE DCA TEM2 /IGNORED JMP I NXCHP /KEEP ACCEPTING CHARS. TAD CHAR CLL RTL /SIX BITS LEFT RTL RTL DCA CHAR /PUT IT BACK IN CHAR JMP PUT /GOT STORE CHARACTER PNTR, SYM3+1 /WORD POINTER NXCHP, NXCH /NEXT CHARACTER ROUTINE
/PAGE 12 /PAL SPACE HANDLER /WHEN CALLED, THE SYMBOL TYPE IS IN TYPE /AND THE SIGN ASSOCIATED WITH THE SYMBOL IS IN SIGN /VALUE OF SYMBOL IS IN SYMVAL. /MEMORY REFERENCE INSTRUCTIONS ARE IORED INTO BINW /IF CALLED WITH A + OR -, THE ADDRESS IS ADDED OR SUBTRACTED FROM ADDR /LENGTH: 28 REGISTERS SPAC, TAD INFO /ANYTHING TO PROCESS? SNA CLA POPJ /NO: EXIT TAD TYPE /YES: GET SYMBOL TYPE SNA CLA /IS IT ZERO? JMP INST /YES, INSTRUCTION CMBN, TAD SIGN /GET SIGN SNA /IS IT ZERO? JMP IORC /COMBINE SYMVAL AND ADDR WITH AN IOR SPA CLA /WAS SIGN +? JMP SUBC /NO, SUBTRACT ADDC, TAD SYMVAL /ADD ROUTINE - ADD SYMVAL TAD ADDR /AND ADDR DCA ADDR /AND PUT RESULTS BACK IN ADDR POPJ /RECURSIVE EXIT SUBC, TAD SYMVAL /SUBTRACT ROUTINE - NEGATE CMA IAC /SYMVAL JMP ADDC+1 /JUMP INTO ADD ROUTINE IORC, TAD ADDR /IOR ADDR AND SYMVAL JMS I IORIN /GO TO IOR SUBROUTINE DCA ADDR /LEAVE RESULTS IN ADDR POPJ /RECURSIVE EXIT INST, CLA CMA /SET INSTRUCTION FLAG DCA INSF TAD BINW /IOR BINW AND SYMVAL JMS I IORIN DCA BINW /LEAVE RESULTS IN BINW POPJ /EXIT
/PAGE 13 /ROUTINE TO HANDLE CARRIAGE RETURNS /LENGTH: 40 REGISTERS CARR, PUSHJ /RECURSIVE CALL TO SPACE HANDLER SPAC /ADDRESS OF SPACE HANDLER FOR PUSHJ TAD ADDR /GET 12 BIT ADDRESS ISZ INSF /WAS THERE AN INSTRUCTION? JMP DPST /NO AND PGE /LOOK AT PAGE BITS SZA /PAGE ZERO REFERENCE? JMP TPAGE /NO, CHECK ILLEGAL PAGE REFERENCE ISZ ZFLG /PUT UP PAGE ZERO FLAG IGO2, TAD ADDR /GET ADDRESS AND SL7 /SAVE SEVEN BITS DCA ADDR /SAVE IT TAD ZFLG /IS THIS A PAGE ZERO REFERENCE? SNA CLA TAD C200 /NO, PICK UP A 1 IN BIT 4 TAD ADDR /GET REST OF ADDRESS TAD BINW /GET INSTRUCTION PART DPST, DCA BINW /THIS IS THE ASSEMBLED WORD POPJ /RECURSIVE EXIT TPAGE, DCA TEM1 /TEST EQUALITY OF PAGE BITS TAD PF /BUT ONLY ON PASS2 OR PASS3 SNA CLA /SINCE REFERENCE MAY STILL BE JMP IGO2 /UNDEFINED ON PASS1 TAD AACT /LOOK AT PAGE BITS OF AACT AND PGE CMA IAC /NEGATE IT TAD TEM1 /COMPARE IT WITH CURRENT REFERENCE SNA CLA /ARE THEY EQUAL? JMP IGO2 /YES, RETURN TO PROCESSOR TAD PF /NO, CHANGE PF TO PASS1 PUSH /TO FAKE OUT THE ERROR ROUTINE DCA PF /SAVE PF ON PUSHDOWN, SET TO 0 TAD ADDR /PUT ADDR ON STACK, ALSO PUSH TAD C5 /CODE FOR IR IS 5 PUSHJ /GO TO ERROR ROUTINE ERROR2 POP /RESTORE PF DCA PF JMP IGO2 /RETURN TO PROCESSOR /SET PAGE 0 FLAG ZPAGE, ISZ ZFLG /HANDLE "Z" AS A POPJ /RETURN
/PAGE 14 /POP ROUTINE TO RECOVER ITEMS FROM THE /PUSHDOWN LIST /CHECKS FOR PUSHDOWN UNDERFLOW /LENGTH: 18 REGISTERS POPM, 0 TAD PSHPN1 /CHECK FOR PUSHDOWN UNDERFLOW CMA IAC TAD P1BGN /PSHPN1 SHOULD BE GREATER THAN SPA CLA /P1BGN JMP POPM2 /POINTER IS OK TAD PSHPN1 /UNDERFLOW PUSH /PUT POINTER ON LIST TAD SL3 /PDL CODE IS 7 PUSHJ /CALL ERROR ROUTINE ERROR2 HLT JMP .-1 /DEAD END POPM2, CMA /RESET POINTER TAD PSHPN1 /SET IT BACK 1 DCA PSHPN1 TAD I PSHPN1 /GET ITEM FROM LIST JMP I POPM /EXIT WITH ITEM IN AC /ROUTINE TO FIX ENTIRE SYMBOL TABLE /LENGTH: 7 REGISTERS FIXT, DCA INFO /NO PUNCHING IN MAIN TAD PF /ONLY ON PASS 1 SZA CLA POPJ /NOT PASS1: EXIT TAD SPNT /ADJUST POINTER DCA IAM1 POPJ /EXIT /ROUTINE TO HANDLE "." /LENGTH: 6 REGISTERS POINT, PUSHJ /REVISION TO TREAT . AS A TERMINATOR SPAC / EXAMPLE - JMP. = JMP . TAD AACT /VALUE OF . IS AACT DCA SYMVAL ISZ INFO /REPRESENTS VALID INFO CLA IAC /TREAT AS SYMBOL DCA TYPE JMP I SPACI L04,
/PAGE 15 /DOLLAR ROUTINE /LENGTH: 65 REGISTERS *600 DOLLAR, TAD PF /WHICH PASS IS THIS? SZA SMA CLA /PASS 1 OR PASS3? JMP I EPASS2 /NOPE, IT'S PASS2 CLA OSR RTL SPA /TEST BIT 2 JMP I NEXI /SUPPRESS SYMBOL TABLE RTR RAR SNL CLA /LOOK AT BIT 11 JMP .+3 /IT IS 0; FORGET IT TAD BBB /IT IS 1; SET TO PUNCH DCA DDD TAD CRLF /CR,LF JMS I EEE JMS I LDTI /OUTPUT LEADER-TRAILER TAD C377 /OUTPUT A RUBOUT FOR DDT JMS I DDD DCA LOW /INITIALIZE SORT ROUTINE DCA LOW+1 DCA LOW+2 ELOOP, TAD CRLF /CARRIAGE RETURN, LINE FEED JMS I EEE JMP SORT /GET A SYMBOL FROM SORT ELUP2, TAD I TEM3 /GET FIRST WORD OF SYMBOL SPA /WAS IT DEFINED? JMP UASYM /NO, BIT0 IS 1, ERROR JMS I EEE /YES, OUTPUT FIRST WORD ISZ TEM3 /INCREMENT POINTER TO NEXT WORD TAD I TEM3 /PICK IT UP JMS I EEE /TYPE IT OUT ISZ TEM3 /POINTER TO THIRD WORD TAD I TEM3 /PICK IT UP JMS I EEE /TYPE IT JMS I EEE /TYPE TWO SPACES ISZ TEM3 /INCREMENT POINTER TO VALUE TAD I TEM3 /GET VALUE OF SYMBOL JMS I OCTI /GO TO OCTAL OUTPUT ROUTINE JMP ELOOP /RETURN FOR MORE SYMBOLS OUT1, TAD C204 /OUTPUT AN EOT FOR DDT JMS I DDD TAD CRLF /TYPE A CRLF FOR DDT JMS I EEE TAD C377 /TYPE A RUBOUT FOR DDT JMS I DDD JMS I LDTI /MORE LEADER-TRAILER JMP I NEXI /GO TO NEXT PASS
/PAGE 16 UASYM, CLA TAD TEM3 /GET ADDRESS OF SYMBOL PUSH /ON PUSHDOWN LIST TAD TEM3 /GET CURRENT LOCATION TAD C3 /COUNTER WHEN THE SYMBOL DCA TEM3 /WAS LAST SEEN TAD I TEM3 /PUT INTO AACT DCA AACT IAC PUSHJ /GO TO ERROR ROUTINE ERROR1 /CODE FOR UA IS 1 ISZ TEM2 TAD I TEM2 /RESET VALUE TO HIGHEST AND PGE /ADDRESS ON PAGE TAD SL7 /SET LOW 7 BITS TO 1 DCA I TEM2 JMP ELOOP /RETURN FOR MORE SYMBOLS EPASS2, BINPUN /PUNCH BINARY TAPE
/PAGE 17 /SYMBOL SORTING ROUTINE /LENGTH: 63 REGISTERS SORT, DCA INFO /INDICATOR TELLS IF ANY SYMBOLS WERE SORTED TAD IAM1 /POINTER TO BEGINNING OF SYMBOL TABLE DCA PNT1 /PUT IT IN ADDRESS POINTER CMA /SET HIGH SYMBOL TO 7777 7777 7777 DCA HIGH CMA DCA HIGH+1 CMA DCA HIGH+2 LCHK, TAD PNT1 /HAVE WE CHECKED ALL OF SYMBOL TABLE? CLL CMA IAC /COMPARE POINTER WITH ANOTHER POINTER TAD SPNT /TO THE END OF THE SYMBOL TABLE SNA CLA JMP AOUT /ALL THROUGH TAD LOWPNT /SET UP POINTERS FOR CYMBOL COMPARISON DCA SORT1 /TO SSEE IF SYM IS GREATER THAN LOW TAD PNT1 /GET ADDRESS OF CURRENT SYMBOL DCA SORT2 JMS I SYMCMI /GO TO SYMBOL COMPARISON ROUTINE JMP INC /SYM IS EQUAL TO LOW JMP INC /SYM IS LESS THAN LOW TAD HIPNT /SYM IS GREATER THAN LOW DCA SORT2 /NOW SET UP POINTERS FOR CHECK3 ROUTINE TAD PNT1 /TO SEE IF SYM IS LESS THAN HIGH DCA SORT1 JMS I SYMCMI /GO TO SYMBOL COMPARISON ROUTINE JMP INC /SYM IS EQUAL TO HIGH JMP INC /SYM IS GREATER THAN HIGH ISZ INFO /SYM IS LESS THAN HIGH TAD PNT1 /GET ADDRESS OF SYMBOL DCA SORT1 /IN AN INDEX REGISTER TAD I SORT1 /PUT THE SYMBOL IN HIGH AND MASK /GET RID OF THE UNDEFINED BIT DCA HIGH TAD SORT1 /PUT ADDRESS OF SYMBOL IN ADDR FOR DOLL DCA TEM3 TAD I SORT1 /FINISH PUTTING SYMBOL IN HIGH DCA HIGH+1 TAD I SORT1 DCA HIGH+2
/PAGE 18 INC, TAD C4 /INCREMENT POINTER TAD PNT1 /FOR NEXT COMPARE DCA PNT1 /PUT IT BACK IN PNT1 JMP LCHK /GO LOOK AT NEXT SYMBOL AOUT, TAD HIGH /ALL THROUGH, NOW PUT HIGH INTO LOW DCA LOW TAD HIGH+1 /HIGH+1 GOES INTO LOW+1 DCA LOW+1 TAD HIGH+2 /HIGH+2 GOES INTO LOW+2 DCA LOW+2 TAD INFO /WERE ANY SWITCHES MADE IN THIS PASS? SNA CLA JMP OUT1 /NO: ALL DONE JMP ELUP2 HIGH, 0 /STORAGE FOR HIGH SYMBOL 0 0 LOW, 0 /STORAGE FOR LOW SYMBOL 0 0 PNT1, 0 /STORAGE FOR ADDRESS OF CURRENT SYMBOL LOWPNT, LOW-1 /POINTER USED WITH AUTO INDEX REGISTER HIPNT, HIGH-1 /POINTER USED WITH AUTO INDEX REGISTER L06, /END OF PAGE PAUSE
/PAL III /PART III /PAGE 19 *1000 /ROUTINE TO PROCESS SPECIAL CHARACTERS /CALLED BY ROUTINE NCHEK WHEN IT DISCOVERS A SPECIAL CHARACTER /SPSHUL ASSUMES THAT THE SPECIAL CHARACTER DELIMITS A SYMBOL OR OCTAL WORD /A SEARCH IS MADE THROUGH THE SYMBOL TABLE FOR THE SYMBOL, IF ANY /THE VALUE OF THE SYMBOL, OR OCTAL WORD, IS LEFT IN REGISTER SYMVAL /THE SYMBOL TYPE IS LEFT IN REGISTER TYPE /CODES FOR SYMBOL TYPES ARE AS FOLLOWS: /MEMORY REF INSTRUCTIONS 0 /USER SYMBOLS& MICRO OPS +1 /LENGTH: 85 REGISTERS
/PAGE 20 SPSHUL, CLA /JUNK IN AC WHEN SPSHUL IS CALLED TAD SYM1 /SYMBOL TO HANDLE? SNA CLA JMP OCTALW /NO, GO PROCESS OCTAL WORD JMS I SMGETI /SEARCH FOR SYMBOL JMP PUTIN /NOT THERE, PUT IT IN THE SYMBOL TABLE CLL TAD OPCDP /IS IT A PSEUDO-CODE? SNL JMP PSEUDA /YES: PROCESS IT TAD MICRP /NO: IS IT A MICRO INSTR.? SNL CLA IAC /YES: CODE=+1 PUSHSP, DCA TYPE /STORE CODE IN REGISTER TYPE TAD CHAR /GET THE SPECIAL CHARACTER TAD M211 /IS IT A TAB? SNA JMP I SPACI /YES; TREAT AS A SPACE TAD M4 /IS IT A CARRIAGE RETURN? SNA JMP I CARRI /YES, PROCESS CARRIAGE RETURN TAD M23 /IS IT A SPACE (CODE 240)? SNA JMP I SPACI /YES: PROCESS SPACE TAD M4 /IS IT A DOLLAR SIGN (CODE 244)? SNA JMP I DOLLI /YES, PROCESS $ TAD M6 /IS IT A STAR (CODE 252)? SNA JMP I STARI /YES, PROCESS STAR TAD M1 /IS IT PLUS(CODE 253)? SNA JMP I ADDI /YES, PROCESS PLUS TAD M1 /IS IT A COMMA (CODE 254)? SNA JMP I SYMSTI /YES, PROCESS COMMA TAD M1 /IS IT A MINUS (CODE 255)? SNA JMP I SUBI /YES, PROCESS MINUS TAD M1 /IS IT A PERIOD (CODE 256)? SNA JMP I POINTI /YES, PROCESS PERIOD TAD M17 /IS IT AN = (CODE 275)? SNA JMP I EQUALI /YES, PROCESS EQUAL SIGN TAD C2 /IS IT A SEMI-COLON? SNA CLA JMP I CARRI /YES: TREAT AS CR
/PAGE 21 ERRORN, TAD CHAR /NO, ILLEGAL CHARACTER PUSH /SAVE IT TAD C4 /CODE FOR IC IS 4 PUSHJ /CALL ERROR ERROR2 JMS I AAA /GET ANOTHER JMP I .+1 /RETURN TO NCHEK NCHEK+1 PSEUDA, CLA /CLEAR INFO FOR ALL PSEUDO-OPS DCA INFO TAD SYMVAL /GET ADDRESS OF ROUTINE DCA .+2 PUSHJ /CALL ROUTINE 0 JMP PUSHSP /HANDLE TERMINATOR PUTIN, TAD M1 /STORE SYMBOL WITH AUTO-INDEXC DCA AUTOA /ADDRESS-1 GOES INTO AUTOA TAD SYM1 /FIRST WORD OF SYMBOL TAD C4TH /PUT IN UNDEFINED BIT DCA I AUTOA TAD SYM2 /SECOND WORD OF SYMBOL DCA I AUTOA TAD SYM3 /THIRD WORD OF SYMBOL DCA I AUTOA TAD AACT /VALUE OF SYMBOL DCA I AUTOA TAD C4 /MOVE S.T. POINTER BACK 4 REGISTERS TAD SPNT DCA SPNT JMP PUSHSP-1 OCTALW, TAD OCWD /GET OCTAL WORD DCA SYMVAL /SAVE IT AS THE SYMBOL VALUE DCA OCWD JMP PUSHSP-1 /PROCESS AS USER SYMBOL MICRP, OPCD-MICR OPCDP, -OPCD SMGETI, SYMGET
/PAGE 22 /SYMBOL COMPARISON ROUTINE /COMPARES SYMBOLS: ADDRESSES IN INDEX REGISTERS /SORT1 AND SORT2. /THE ROUTINE COMPARES A(I) WITH B(I) /EXITS TO CALLING ADDRESS+1 IF A=B /EXITS TO CALLING ADDRESS+2 IF A>B /EXITS TO CALLING ADDRESS+3 IF A<B /WHERE A IS SYMBOL IN SORT1, B IS SYMBOL IN SORT2 /LENGTH: 30 REGISTERS SYMCOM, 0 CLL /CLEAR LINK TAD I SORT1 AND MASK /DELETE DEFINED BIT DCA POPTEM TAD I SORT2 AND MASK CIA TAD POPTEM SZA CLA /FIRST PAIR EQUAL? JMP TSIGN-2 CLL TAD I SORT2 /SECOND WORD OF SYMBOL 1 CMA IAC TAD I SORT1 /-SECOND WORD OF SYMBOL 2 SZA CLA /SECOND PAIR EQUAL? JMP TSIGN-1 /NO: TEST SIGN CLL TAD I SORT2 /THIRD WORD OF SYMBOL 1 CMA IAC TAD I SORT1 /-THIRD WORD IF SYMBOL 2 SNA CLA JMP C5OUT /ALL THREE ARE EQUAL JMP TSIGN ISZ SORT2 ISZ SORT2 TSIGN, SNL /TEST SIGN C3OUT, ISZ SYMCOM /EXIT IF SYMBOL1<SYMBOL2 C4OUT, ISZ SYMCOM /EXIT IF SYMBOL1>SYMBOL2 C5OUT, JMP I SYMCOM /EXIT IF SYMBOL1=SYMBOL1
/PAGE 23 /PUSHJ ROUTINE TO RECURSIVELY CALL SUBROUTINES /CHECKS FOR PUSHDOWN OVERFLOW VIA THE /PUSH ROUTINE /LENGTH: 9 REGISTERS PUSHJM, 0 DCA ITEM /CARRY C(AC) TO SUBROUTINE TAD I PUSHJM /ADDRESS OF WHERE TO JUMP DCA POPTEM /SAVE IT TAD PUSHJM /GET RETURN IAC PUSH /PUSH DOWN TAD ITEM /RESTORE C(AC) JMP I POPTEM /CALL SUBROUTINE /SET INDIRECT BIT /LENGTH: 4 REGISTERS INDI, TAD C400 /"I"= 0400 DCA SYMVAL ISZ INFO /I= VALID INFORMATION POPJ /RETURN L10,
/PAGE 24 /ALPHABETIC OUTPUT ROUTINE /CALLED BY JMS I EEE, WITH PACKED SIXBIT WORD IN AC /A CALL WITH 0 IN THE AC, WILL GENERATE TWO SPACES /LENGTH: 35 REGISTERS *1200 ALFO, 0 DCA ALFTEM /SAVE THE PACKED CHARACTER TAD M2 /PUT -2 IN THE COUNTER - 2 WORD TO DCA ALFTEM+1 /BE OUTPUTTED TAD ALFTEM /GET FIRST CHARACTER RTR /ROTATE INTO POSITION RTR RTR NXCL, AND SL6 /MASK OFF EXTRANEOUS BITS SNA /IS THE CHARACTER A ZERO? JMP ALFL-1 /YES, OUTPUT A SPACE TAD M43 /CHECK FOR LINE FEED -43 SNA JMP FLF /GO TO SPECIAL LINE FEED SECTION TAD M2 /CHECK FOR CARRIAGE RETURN -45 SNA JMP FCR /GO TO SPECIAL CR SECTION TAD C5 /CALCULATE CHAR -40 SPA /IF RESULT IS .GE. 0, ADD 240 TAD C100 /OTHERWISE, ADD 340 TAD C240 ALFL, JMS I DDD /GO TO TYPEOUT ROUTINE NEXL, TAD ALFTEM /PICK UP PACKED WORD ISZ ALFTEM+1 /ALL DONE? JMP NXCL /NO, GO PROCESS IT CLA /YES, EXIT WITH CLEARED AC JMP I ALFO /EXIT FLF, TAD M3 /GET LF CODE(212) FCR, TAD C215 /GET THE CODE FOR CARRIAGE RETURN JMP ALFL /GO OUTPUT IT M43, -0043 C100, 0100 C240, 0240 ALFTEM, 0 0
/PAGE 25 /OCTAL OUTPUT ROUTINE /CALLED WITH JMS I OCTI, OCTAL NUMBER IN THE ACCUMULATOR /LENGTH: 17 REGISTERS OCTO, 0 DCA ALFTEM /SAVE WORD TAD M4 /COUNTER FOR 4 CHARACTERS DCA ALFTEM+1 NEXT2, TAD ALFTEM /PICK UP OUTPUT WORD RAL /ROTATE THREE BITS LEFT RTL DCA ALFTEM /SAVE RESULTS TAD ALFTEM /PICK IT UP AGAIN RAL /GET LAST BIT FROM LINK AND SL3 /TRIM TO 3 BITS TAD C260 /CONVERT TO ASCII JMS I DDD /OUTPUT IT ISZ ALFTEM+1 /DONE 4? JMP NEXT2 /NO JMP I OCTO /YES, EXIT C260, 0260 /ROUTINE TO GENERATE LEADER-TRAILER /LENGTH: 9 REGISTERS LDTR, 0 TAD KONS /SET COUNTER FOR DCA TEM2 /# OF CODES LD1, TAD C200 JMS I BBB /PUNCH ONE FRAME OF LEADER TRAILER ISZ TEM2 /DONE? JMP LD1 /NO: CONTINUE JMP I LDTR /YES: EXIT ROUTINE KONS, -40 / L/T CONSTANT
/PAGE 26 /BINARY PUNCH ROUTINE /LINK = 1 IF ORIGIN SETTING /CALLED WITH JMS I PUNI, BINARY WORD IN ACCUMULATOR /LENGTH: 22 REGISTERS BINP, 0 DCA TEM1 /SAVE WORD TO BE PUNCHED TAD TEM1 /LINK IS ONE IF ORIGIN RTR /PUT CHARACTER INTO POSITION RTR RTR AND SL7 /SAVE SEVEN BITS DCA TEM3 /SAVE IT TAD TEM3 /PICK IT UP JMS I BBB /AND GO TO PUNCH ROUTINE TAD CKSM /UPDATE CHECKSUM TAD TEM3 DCA CKSM TAD TEM1 /PICK UP ORIGINAL CHARACTER AGAIN AND SL6 /SAVE LOW ORDER SIX BITS DCA TEM3 /SAVE IT FOR CHECKSUM TAD TEM3 /PICK IT UP JMS I BBB /PUNCH IT TAD CKSM /UPDATE CHECKSUM TAD TEM3 DCA CKSM JMP I BINP /EXIT
/PAGE 27 /ROUTINE TO PLACE ITEMS ON PUSHDOWN LIST /CHECKS FOR PUSHDOWN OVERFLOW /LENGTH: 17 REGISTERS PUSHIN, 0 DCA I PSHPN1 /SAVE AC ON PUSHDOWN LIST ISZ PSHPN1 /INCREMENT PUSHDOWN POINTER TAD P1END /CHECK FOR PUSHDOWN OVERFLOW TAD PSHPN1 /HAS POINTER PASSED P1END? SPA CLA JMP I PUSHIN /NO, POINTER IS OK, EXIT TAD PSHPN1 /GET ADDRESS OF PUSHDOWN LIST FOR ERROR DCA I PSHPN1 /SAVE IT ON LIST FOR ERROR PICKUP ISZ PSHPN1 /INCREMENT PUSHDOWN POINTER TAD PERR1 /GET RETURN ADDRESS FOR ERROR CALL DCA I PSHPN1 /THUS SIMULATING A PUSHJ JMP I PERR3 /HOP INTO THE ERROR ROUTINE PERR1, .+1 /ERROR RETURN ADDRESS HLT /HALT ON ERROR RETURN JMP .-1 /NO RECOVERY PERR3, MCRIP+1 /ERROR ADDRESS FOR SIMULATED PUSHJ /ROUTINE TO ASSEMBLE OCTAL AND DECIMAL /NUMBERS : SWITCH IS MADE BY OCTAL AND DECIMA /PSEUDO OPS /LENGTH: 22 REGISTERS NMBR, ISZ INFO /VALID INFORMATION NEXNUM, TAD OCWD /GET CURRENT WORD CLL RAL CLL RAL NSWTCH, NOP /SWITCH FOR OCTAL;DECIMA TAD OCWD CLL RAL DCA OCWD /STORE OCWD*8 OR OCWD*10 TAD CHAR TAD M60 /TURN INTO DIGIT TAD OCWD /ADD TO CURRENT DCA OCWD JMS I AAA /FETCH A CHARACTER JMS I NCHEKI /CHECK IT JMP NEXNUM /ALL VALID NUMBERS JMP I RONGI /LETTER IN WORD BEGUN WITH NUMBER CLA CMA TAD I NCHEKI /DECREASE RETURN ADDRESS IN NCHEK DCA I NCHEKI JMP .-4 M60, -60 RONGI, ERRORN /CALL ERROR-COMBINATION NOT LEGAL L12, /PAL III /PART IV /PAGE 28 /ASR 33 I/O ROUTINES /CALLED BY JMS I AAA /EXITS WITH LEGAL CHARACTER IN CHAR /LENGTH: 14 REGISTERS *1400 LOREAD, 0 KSF JMP .-1 KRB /READ THE CHARACTER SNA /BLANK TAPE? JMP LOREAD+1 /IGNORE TAD M200 /LEADER? SNA JMP LOREAD+1 /IGNORE TAD C200 DCA CHAR /SAVE CHAR JMS I CHEKI /IS IT LEGAL? JMP LOREAD+1 /NO, TRY AGAIN JMP I LOREAD /ROUTINE TO SET SIGN FOR /ADD OR SUBTRACT OR IOR /LENGTH: 8 REGISTERS SUB, TAD M2 /SIGN FOR SUBTRACT IS -1 ADD, IAC /SIGN FOR ADD IS +1 SPACE, DCA TEM2 /SIGN FOR IOR IS 0 PUSHJ /GO PROCESS THE INFORMATION SPAC /ADDRESS TAD TEM2 DCA SIGN /SET SIGN JMP I FFF /GO BACK TO CSYM
/PAGE 29 /PAL 750 READ ROUTINE /CALLED BY JMS I AAA /EXITS WITH LEGAL CHARACTER IN CHAR /LENGTH: 48 REGISTERS HIREAD, 0 ISZ RCNT /IS BUFFER EMPTY? JMP GETCHR /NO, FETCH A CHARACTER ISZ SWITCH /DID TAPE END? SKP /NO JMP ENDBF /YES, GO HALT DCA SWITCH /SET SWITCH AGAIN TAD RBGN /POINTER TO BEGINNING OF BUFFER DCA AUTOA /IN AN AUTO-INDEX REGISTER TAD RKON /CONSTANT FOR SIZE OF BUFFER DCA RCNT /IN READ COUNTER READIN, RFC /FETCH A CHARACTER DCA TEM3 /START COUNTING ISZ TEM3 /OVERFLOW? JMS WAIT JMP FULL1 /YES, SET SWITCH, TAPE ENDED RSF /CHARACTER READY YET? JMP .-4 /NO, TRY AGAIN RRB SNA /IS IT BLANK TAPE? JMP READIN /IGNORE BLANK TAPE TAD M200 /IS IT LEADER-TRAILER? SNA JMP READIN /IGNORE LEADER-TRAILER TAD C200 /RESTORE ORIGINAL CODE DCA I AUTOA /SAVE IT ISZ RCNT /BUFFER FULL YET? JMP READIN /NO, GET SOME MORE JMP FULL /FULL FULL1, CLA CMA /SET TAPE SWITCH TO 7777 DCA SWITCH TAD RCNT /GET ALTERED COUNT FOR BUFFER CMA IAC FULL, TAD RKON SNA /WAS BUFFER COMPLETELY EMPTY? JMP ENDBF /YES DCA RCNT /NO, COUNT OF BUFFER SIZE TAD RBGN /RESET BUFFER POINTER DCA AUTOB GETCHR, TAD I AUTOB /GET A CHARACTER FROM BUFFER DCA CHAR JMS I CHEKI /IS IT LEGAL? JMP HIREAD+1 /NO JMP I HIREAD /YES ENDBF, CLA CMA /SET COUNT TO EMPTY DCA RCNT HLT /HALT JMP HIREAD+1 /TRY AGAIN
/PAGE 30 /CHECK FOR SPECIAL CHARACTERS IN READ ROUTINES /EXIT TO CALLING ADDRESS+1 IF CHAR IS TO BE IGNORED /EXIT TO CALLING ADDRESS+2 IF CHAR IS LEGAL /THE FOLLOWING CHARACTERS ARE IGNORED: / 0 BLANK TAPE /200 LEADER-TRAILER /212 LINE FEED /214 FORM FEED /377 RUBOUT /LENGTH: 40 REGISTERS CHEK, 0 TAD CHAR AND SL7 /SET CHANNEL 8 TAD C200 /IN CASE OF PARITY DCA CHAR /INPUT TAD CHAR TAD M377 /IGNORE RUBOUT SNA CLA JMP I CHEK TAD PF /PASS 3? SMA CLA JMP .+3 TAD CHAR /GET CHARACTER DCA I AUTOC /STORE IN PASS3 BUFFER TAD CHAR /CHECK FOR A COMMENT TAD M215 /CARRIAGE RETURN? SNA CLA JMP ECMN /YES, END OF COMMENT TAD FLAG /NO, ARE WE PRESENTLY IN A COMENT? SZA CLA JMP I CHEK /YES, IGNORE THE CHARACTER TAD CHAR TAD M212 /LINE FEED? SNA JMP I CHEK /YES, IGNORE LINE FEED TAD M2 /FORM FEED? SNA JMP I CHEK /YES, IGNORE FORM FEED
/PAGE 31 TAD M43A /IS IT A SLASH?? SNA CLA JMP COMMNT /YES: START OF COMMENT ISZ CHEK /NO, LEGAL CHARACTER JMP I CHEK /EXIT COMMNT, ISZ FLAG /BEGINNING OF COMMENT JMP I CHEK /SET FLAG TO ZERO, EXIT ECMN, DCA FLAG /END OF COMMENT ISZ CHEK /GET CHARACTER JMP I CHEK /EXIT M43A, -0043 M377, -0377 /THE EXPUNGE PSEUDO-OP /LENGTH: 13 REGISTERS EXPN, DCA INFO /NO PUNCHING TAD PF /WHICH PASS IS THIS? SZA CLA /IGNORE IT ON PASS 2 OR 3 POPJ /EXIT CMA /MOVE SYMBOL TABLE BACK TAD MCRI /TO PSEUDO-OPS DCA IAM1 TAD IAM1 DCA SPNT DCA I MCRIP POPJ /EXIT MCRI, OPCD MCRIP, MICRP TAD C6 /SET TABLE FOR ENTRY ISZ PSHPN1 /RESET POINTER FOR RETURN TO ERROR HALT JMP I .+1 ERROR2 L14,
*1600 /PAGE 32 /ERROR ROUTINES FOR PAL III /LENGTH: 45 REGISTERS /THE ERROR ROUTINES ARE OF TWO TYPES / TYPE 1 CONSISTS OF / UA UNDEFINED ADDRESS / DT DOUBLE TAG / ST SYMBOL TABLE OVERFLOW / RD REDEFINITION BY PARAMETER ASSIGN. / TYPE 1 ERRORS ARE CALLED BY / PUSHJ / ERROR1 /WITH THE ADDRESS OF THE OFFFENDING SYMBOL ON THE PUSHDOWN LIST /AND WITH THE CODE FOR THE ERROR IN C(AC) /THE ERROR PRINTOUT IS / XX YYYYYY AT ZZZZ /WHERE XX REPRESENTS THE PARTICULAR ERROR CODE INVOLVED /YYYYYY REPRESENTS THE SYMBOL THAT CAUSED THE ERROR /ZZZZ REPRESENTS THE LOCATION IN THE USER'S PROGRAM AT WHICH THE /ERROR OCCURRED /TYPE 2 ERRORS CONSIST OF / IC ILLEGAL CHARACTER / IR ILLEGAL REFERENCE / PO PUSHDOWN OVERFLOW / PU PUSHDOWN UNDERFLOW /TYPE 2 ERRORS ARE CALLED BY / PUSHJ / ERROR2 /WITH THE VALUE OF THE ILLEGAL CHARACTER, LITERAL, OR ORIGIN ON THE /PUSHDOWN LIST AND THE CODE FOR THE ERROR IN THE ACCUMULATOR /THE ERROR PRINTOUT IS /XX YYYY AT ZZZZ /WHERE XX REPRESENTS THE PARTICULAR ERROR CODE INVOLVED /YYYY REPRESENTS THE VALUE OF THE ILLEGAL CHARACTER OR REFERENCE /ZZZZ REPRESENTS THE LOCATION IN THE USER'S PROGRAM AT WHICH THE ERROR / OCCURRED /NUMBER CODE FOR ERRORS /1 UA /2 DT /3 ST /4 IC /5 IR /6 PO /7 PU /10 RD
/PAGE 33 ERROR1, JMS ETYPO /TYPE ERROR CODE DCA TEM2 /SAVE SYMBOL ADDRESS AS A POINTER TAD I TEM2 /GET FIRST WORD OF SYMBOL AND MASK /GET RID OF UNDEFINED BIT DCA I TEM2 /SYMBOL IS DEFINED FOR FUTURE REFERENCE TAD I TEM2 /GET IT BACK IN THE AC JMS I EEE /TYPE OUT THE FIRST WORD OF THE SYMBOL ISZ TEM2 /INCREMENT THE POINTER TO THE 2ND WORD TAD I TEM2 /PICK UP THE 2ND WORD JMS I EEE /TYPE IT OUT ISZ TEM2 /MOVE THE POINTER TO THE THIRD WORD TAD I TEM2 /PICK UP THE THIRD WORD JMS I EEE /TYPE IT OUT ECOMON, JMS I EEE /TYPE TWO SPACES TAD ATCODE /GET "AT" JMS I EEE /TYPE IT JMS I EEE /TYPE TWO SPACES TAD AACT /GET THE ABSOLUTE ADDRESS COUNTER JMS I OCTI /TYPE IT OUT TAD C377 /TYPE A RUBOUT JMS I DDD JMP I TEM1 /EXIT ERROR2, JMS ETYPO /TYPE THE ERROR CODE JMS I OCTI /TYPE THE VALUE OF IC, PO, OR PU JMP ECOMON /TYPE "AT" AND AACT ETYPO, 0 /SUBROUTINE TO TYPE ERROR CODE TAD TBLEAD /ADD ERROR CODE TO TABLE POINTER DCA TEM2 /SAVE POINTER TO CODE IN TEMP POP /GET EXIT ADDRESS FROM PDL DCA TEM1 /SAVE IT, ERROR ADDRESS NOW AVAILABLE TAD PF /WHICH PASS IS THIS? SZA CLA /ERROR PRINTOUTS ONLY ON PASS1 JMP ERROUT /OTHERWISE, EXIT FROM ERROR ROUTINE TAD C377 /TYPE A RUBOUT IN CASE OF IR JMS I DDD TAD CRLF /CARRIAGE RETURN, LINE FEED JMS I EEE TAD I TEM2 /GET THE ERROR CODE LETTERS JMS I EEE /TYPE THE ERROR CODE JMS I EEE /TYPE TWO SPACES POP /GET SYMBOL ADDRESS OR IC, IL, IO VALUE JMP I ETYPO /EXIT WITH IT IN THE AC ERROUT, POP /CLEAR JUNK OFF THE PUSHDOWN LIST CLA JMP I TEM1 /EXIT
/PAGE 34 /PASS3 ROUTINE /ASSEMBLY LISTING ON ASR33 IF SW11 DOWN, 75A IF UP /LENGTH: 80 REGISTERS POUT, CLA OSR /GET SWITCH REGISTER CLL RAR /WAS BIT 11 SET? SNL CLA JMP PART1 /NO TAD BBB /YES, RESET PRINT POINTER DCA DDD /FOR 75A PUNCH DCA TCNT /ZERO CHARACTER COUNTER PART1, TAD CRLF /CARRIAGE RETURN, LINE FEED JMS I EEE TAD INFO /ANY INFORMATION ON THIS LINE? SZA CLA JMP PART2 /YES TAD M6 /NO, TYPE 12 SPACES DCA TEM3 JMS I EEE ISZ TEM3 JMP .-2 JMP .+7 /DON'T TYPE AACT PART2, TAD AACT /VALID INFO, TYPE AACT JMS I OCTI JMS I EEE /TYPE 2 SPACES TAD BINW /TYPE ASSEMBLED VALUE JMS I OCTI JMS I EEE /TYPE TWO SPACES TAD CHAR /WAS IT A CR? TAD M215 SZA TAD M56 /IS IT ;?? SZA CLA JMP I TABIT-1 /NO: RETURN CLA CMA /YES: PUT STATEMENT DCA I AUTOC /DELIMITER IN BUFFER PART3, TAD TBUF /SET BUFFER DCA AUTOC PART4, TAD I AUTOC /GET CHARACTER TAD M211 /TAB? SNA JMP I TABIT /YES, TYPE TAB RUBOUT OR TAB STOP TAD M1 /LINE FEED? SNA JMP PART4 /YES, IGNORE IT TAD M2 /FORM FEED? SNA JMP FFEED /YES, TYPE FORM FEED TAD M1 /CARRIAGE RETURN? SZA JMP .+3 DCA TCNT /ZERO COUNTER FOR NUMBER OF CHARACTERS JMP PART4 /YES
/PAGE 35 TAD C215 /RESTORE ORIGINAL CHARACTER SPA /RUBOUT JMP PART5 /YES, ALL DONE SZA /IGNORE CHARRIAGE RETURN JMS I DDD /NO, TYPE OR PUNCH CHARACTER ISZ TCNT /COUNT A CHARACTER JMP PART4 PART5, CLA /ALL DONE TAD TBUF /RESET BUFFER DCA AUTOC TAD LOPUNI /RESET PUNCH POINTER DCA DDD JMP I .+1 MOUT /RETURN TO MAIN TABIT, TAB TCNT, 0 M56, -56 FFEED, TAD M6 /TYPE SIX BLANK LINES DCA TEM3 TAD CRLF JMS I EEE ISZ TEM3 JMP .-3 TAD C214 /TYPE FORM FEED JMS I DDD TAD M6 /TYPE SIX MORE BLANK LINES DCA TEM3 TAD CRLF JMS I EEE ISZ TEM3 JMP .-3 JMP PART4 /RETURN TBLEAD, TABLE-1 /POINTER FOR ERROR CODES ATCODE, 0124 /AT L16, PAUSE
/PAL III /PART V /PAGE 36 *2000 /ROUTINE TO HANDLE ORIGINS /LENGTH: 13 REGISTERS STAR, PUSHJ /ORIGIN SETTING, GO ASSEMBLE EXPRESSION CSYM /ADDRESS FOR PUSHJ HANDLER TAD BINW /PICK UP ASSEMBLED BINARY WORD DCA AACT /RESET ABSOLUTE ADDRESS COUNTER DCA INFO /SAY NO TO MAIN CMA /WHICH PASS IS THIS? TAD PF /DO NOT PUNCH ON PASS1 OR PASS3 SZA CLA POPJ /EXIT ON PASS1 OR PASS3 CLL CML /SET LINK FOR ORIGIN PUNCH IN BINP TAD AACT /PICK UP ORIGIN JMS I PUNI /GO PUNCH IT POPJ /EXIT PSHLST, 0 /PUSH DOWN LIST *.+13
/PAGE 37 /CHECK ROUTINE /DISTINGUISHES BETWEEN NUMBERS, LETTERS, SPECIAL CHARACTERS /NUMBERS HAVE CODES BETWEEN 260 AND 271 /LETTERS HAVE CODES BETWEEN 301 AND 332 /ANY CHARACTER NOT A NUMBER OR A LETTER IS A SPECIAL CHARACTER /HOWEVER, SPECIAL CHARACTERS ARE MEANT TO INCLUDE ONLY /PLUS, MINUS, COMMA, EQUAL, STAR, PERIOD, SPACE, RETURN, DOLLAR /EXIT TO SPSHUL IF CHAR IS A SPECIAL CHARACTER /EXIT TO CALLING ADDRESS+1 IF CHAR IS NUMBER /EXIT TO CALLING ADDRESS +2 IF CHAR IS LETTER /LENGTH: 23 REGISTERS NCHEK, 0 TAD CHAR /IS CHAR < 260? TAD M260 /GET CHAR-260 SPA JMP I SPECI /CHAR<260,SPECIAL CHARACTER TAD M12 /IS CHAR<272? SPA /FORM CHAR-272 JMP NUMBEX /YES, 260<CHAR<272 TAD M7 /IS CHAR<301? SPA JMP I SPECI /NO,CHAR IS A SPECIAL CHARACTER TAD M32 /IS CHAR<333? SMA JMP I SPECI /NO, CHAR IS A SPECIAL CHARACTER LETREX, ISZ NCHEK /EXIT FOR LETTERS NUMBEX, CLA TAD CHAR /TRIM CHAR TO SIX BITS AND SL6 DCA CHAR /PUT IT BACK JMP I NCHEK /EXIT M260, -0260 M7, -0007 M32, -0032
/PAGE 38 /SYMBOL TABLE SEARCH ROUTINE /EXITS TO CALLING ADDRESS+1 IF SYMBOL NOT IN TABLE /EXITS TO CALLING ADDRESS+2 IF SYMBOL IN TABLE /ENTRY ADDRESS IS RETURNED IN AC IF NOT IN TABLE /ADDRESS OF VALUE IN AC IF IN TABLE /LENGTH: 41 REGISTERS SYMGET, 0 TAD SATAB DCA SORT2 TAD SORT2 IAC DCA TEM3 LOOP, TAD SPNT /END OF SYMBOLS YET? CLL CMA IAC TAD SORT2 SNA CLA /SKIP IF NOT TESTED ALL JMP NITBL /TERMINATE SEARCH, TABLE FULL TAD SYMPNT /GET ADDRESS-1 OF SYM1 DCA SORT1 /IN AN INDEX REGISTER JMS I SYMCMI /COMPARE TWO SYMBOLS JMP INTABL /THEY MATCH IF RETURN IS HERE NOP /THEY DON'T MATCH ISZ SORT2 /INDEX TO NEXT SYMBOL JMP LOOP-3 NITBL, TAD TEM3 /CHECK TABLE OVERFLOW CIA CLL /COMPARE AGAINST PAGE TAD RBGN /SYMBOLS STOP AT 6600 SZL CLA JMP NTEXIT /OK, ROOM FOR THIS SYMBOL TAD SYMPNT IAC /ADDRESS OF SYMBOL PUSH TAD C3 /CODE FOR ST IS 3 PUSHJ /GO TO ERROR ROUTINE ERROR1 HLT /HALT ON S.T. ERROR JMP .-1 /NO RECOVERY NTEXIT, TAD TEM3 /ADDRESS TO STORE IN JMP I SYMGET /EXIT INTABL, TAD I SORT2 DCA SYMVAL /PUT IT IN SYMVAL TAD TEM3 /RETURN WITH ADDRESS TAD C3 ISZ SYMGET JMP I SYMGET /EXIT SYMPNT, SYM1-1 SATAB, OPTABL-1
/PAGE 39 /ROUTINE TO HANDLE COMMAS /LENGTH: 22 REGISTERS SYMSTO, TAD PF /WHICH PASS IS THIS? SZA CLA JMP EXIT /IGNORE SYMBOL DEFINITIONS, PAS2 TAD I TEM3 /PICK UP THE FIRST WORD OF SYMBOL SPA CLA /HAS IT ALREADY BEEN DEFINED? JMP DEFIN /NO, GO PROCESS IT TAD TEM3 /YES, COMPLAIN ABOUT A DOUBLE TAG PUSH /SAVE ENTRY ADDRESS OF SYMBOL TAD C2 /CODE FOR D.T. IS 2 PUSHJ ERROR1 /ERROR ROUTINE JMP EXIT /DON'T PROCESS IT DEFIN, TAD I TEM3 /MAKE THE SYMBOL DEFINED AND MASK DCA I TEM3 /PUT IT BACK ISZ TEM3 /INCREMENT POINTER TO VALUE ISZ TEM3 ISZ TEM3 TAD AACT /GET THE CURRENT LOCATION DCA I TEM3 /STORE IT AS THE VALUE OF THE WORD EXIT, DCA INFO /CLEAR INFO JMP I FFF /BACK TO CSYM /THE FIELD PSEUDO-OP /PUNCHES A WORD IN THE FORM /11 XXX 000 /LENGTH: 17 REGISTERS FLD, PUSHJ /EVALUATE EXPRESSION CSYM /ADDRESS TAD PF /WHICH PASS IS THIS? SPA SNA CLA JMP .+7 /NOT PASS 2 TAD BINW /IT IS PASS 2 AND SL3 /JUST THREE BITS CLL RTL /MOVE LEFT 3 PLACES RAL TAD KON6 /BITS FOR LOADER JMS I BBB /PUNCH IT TAD C200 /RESET ORIGIN TO 200 PUSHJ / IN NEW FIELD STAR+3 DCA INFO POPJ KON6, 0300 /BITS FOR LOADER L20,
*2200 /PAGE 40 /ROUTINE TO FIX MEMORY REFERENCE INSTRUCTIONS /LENGTH: 11 REGISTERS /CAN BE GIVEN ONLY AFTER EXPUN FIXY, PUSHJ /RECURSIVE CALL TO MAIN PROCESSOR CSYM /ADDRESS FOR PUSHJ HANDLER DCA INFO TAD PF /WHICH PASS IS THIS? SZA CLA /IGNORE FIX ON PASS2 OR PASS3 POPJ /EXIT TAD I MCRIPA /ONE MORE MEMORY TAD M4 /REFERENCE INSTRUCTION DCA I MCRIPA POPJ /EXIT MCRIPA, MICRP /ROUTINE TO HANDLE PARAMETER ASSIGNMENTS /ALLOWS FOR MULTIPLE DEFINITIONS OF THE TYPE A=B=C=...=1 /LENGTH: 28 REGISTERS EQUAL, TAD TEM3 /GET ENTRY ADDRESS OF SYMBOL DCA TEM5 /SAVE IT IN A SPECIAL TEMP REGISTER TAD I TEM5 /MAKE THE SYMBOL DEFINED CLL SMA CML /ALREADY DEFINED C(L)=1 AND MASK DCA I TEM5 /PUT IT BACK SZL JMP EQERR /REDEFINING DEFGO, TAD C3 TAD TEM5 PUSH /PUSH IT DOWN FOR POSSIBLE RECURSION PUSHJ /RECURSIVE CALL TO PROCESSOR CSYM /ADDRESS FOR PUSHJ ROUTINE POP /GET THE LATEST SYMBOL VALUE ADDRESS DCA TEM5 /PUT IT BACK IN TEM5 TAD BINW /PICK UP THE BINARY VALUE DCA I TEM5 /STORE IT AS THE VALUE OF THE SYMBOL DCA INFO /NO PUNCHING POPJ /EXIT EQERR, TAD TEM5 /ADDRESS OF SYMBOL PUSH TAD P10 PUSHJ /RD CODE=10 ERROR1 /ERROR TYPE 1 JMP DEFGO /NOW DEFINE IT P10, 0010
/PAGE 41 /ERROR MESSAGE TABLE TABLE, 2501 /UA 0424 /DT 2324 /ST 1103 /IC 1122 /IR 2017 /PO 2025 /PU 2204 /RD /INCLUSIVE OR ROUTINE /ENTER WITH ONE ARGUMENT IN C(AC); /AND WITH THE OTHER IN SYMVAL /SYMVAL IS UNCAHNGED; ANSWER IN C(AC) /LENGTH: 7 REGISTERS IOR, 0 DCA ITEM /SAVE C(AC) TAD SYMVAL /PICK UP ARGUMENT CMA AND ITEM /PERFORM OPERATION TAD SYMVAL JMP I IOR /EXIT /ROUTINE TO OUTPUT TABS OR TABSTOPS /DEPENDING ON SET OF BIT 10 /BIT 10=0, OUTPUT TAB RUBOUT FOR TAB /BIT 10=1, OUTPUT SPACES TO NEXT TAB STOP /LENGTH:23 REGISTERS TAB, OSR /CHECK TABSTOP SWITCH RTR /BIT 10 SZL CLA JMP TABSTP /OUTPUT SPACES FOR TABS TAD C211 /TAB JMS I DDD TAD C377 /RUBOUT JMS I DDD JMP I BACK /RETURN TABSTP, TAD I CNT /OUTPUT 8 SPACES MINUS NUMBER OF CHARACTERS TAD MTABS SMA JMP .-2 DCA I CNT TAD SP /OUTPUT ONE SPACE JMS I DDD ISZ I CNT JMP .-3 JMP I BACK /RETURN MTABS, -10 BACK, PART4 CNT, TCNT SP, 240 BINPUN, CLL /CLEAR LINK FOR BIN PUNCH TAD CKSM /PUNCH CHECKSUM JMS I PUNI JMS I LDTI /PUNCH LEADER TRAILER JMP I NEXI /GO TO NEXT PASS L22, /END OF PAGE PAUSE
/PAL III /PART VI /SYMBOL TABLE /PSEUDO-OPS OPTABL, 0611 /FIELD 0514 0400 FLD 0530 /EXPUNGE 2025 1607 EXPN 0611 /FIXMRI 3015 2211 FIXY 2001 /PAUSE 2523 0500 STOP 0611 /FIXTAB 3024 0102 FIXT 0405 /DECIMAL 0311 1501 DECMA 1703 /OCTAL 2401 1400 OCTALP 1100 /I 0000 0000 INDI 3200 /Z 0000 0000 ZPAGE
/73 BASIC SYMBOLS /MEMORY REFERENCE INSTRUCTIONS OPCD, 0116 /AND 0400 0000 0000 2401 /TAD 0400 0000 1000 1123 /ISZ 3200 0000 2000 0403 /DCA 0100 0000 3000 1215 /JMS 2300 0000 4000 1215 /JMP 2000 0000 5000 0605 /FEXT 3024 0000 0000 0601 /FADD 0404 0000 1000 0623 /FSUB 2502 0000 2000 0615 /FMPY 2031 0000 3000
/MRI'S CONTINUED 0604 /FDIV 1126 0000 4000 0607 /FGET 0524 0000 5000 0620 /FPUT 2524 0000 6000 0616 /FNOR 1722 0000 7000 /PROGRAM INTERRUPT MICR, 1117 /ION 1600 0000 6001 1117 /IOF 0600 0000 6002 /MEMORY PARITY TYPE 188 2315 /SMP 2000 0000 6101 0315 /CMP 2000 0000 6104 /HIGH SPEED PERFORATED TAPE READER AND CONTROL TYPE 750C 2223 /RSF 0600 0000 6011 2222 /RRB 0200 0000 6012 2206 /RFC 0300 0000 6014
/HIGH SPEED PERFORATED TAPE PUNCH AND CONTROL TYPE 75E 2023 /PSF 0600 0000 6021 2003 /PCF 0600 0000 6022 2020 /PPC 0300 0000 6024 2014 /PLS 2300 0000 6026 /TELETYPE KEYBOARD/READER 1323 /KSF 0600 0000 6031 1303 /KCC 0300 0000 6032 1322 /KRS 2300 0000 6034 1322 /KRB 0200 0000 6036 /TELETYPE TELPRINTER/PUNCH 2423 /TSF 0600 0000 6041 2403 /TCF 0600 0000 6042 2414 /TLS 2300 0000 6046 2420 /TPC 0300 0000 6044
/GROUP 1 OPERATE MICROINSTRUCTIONS 1617 /NOP 2000 0000 7000 1101 /IAC 0300 0000 7001 2201 /RAL 1400 0000 7004 2224 /RTL 1400 0000 7006 2201 /RAR 2200 0000 7010 2224 /RTR 2200 0000 7012 0315 /CML 1400 0000 7020 0315 /CMA 0100 0000 7040 0314 /CLL 1400 0000 7100 0314 /CLA 0100 0000 7200
/GROUP 2 OPERATE MICRO INSTRUCTIONS 1014 /HLT 2400 0000 7402 1723 /OSR 2200 0000 7404 2313 /SKP 2000 0000 7410 2316 /SNL 1400 0000 7420 2332 /SZL 1400 0000 7430 2332 /SZA 0100 0000 7440 2316 /SNA 0100 0000 7450 2315 /SMA 0100 0000 7500 2320 /SPA 0100 0000 7510
/COMBINED MICROINSTRUCTIONS 0311 /CIA 0100 0000 7041 1401 /LAS 2300 0000 7604 2324 /STL 1400 0000 7120 0714 /GLK 1300 0000 7204 2324 /STA 0100 0000 7240 /DECTAPE TRANSPORT TYPE TU55 AND DECTAPE CONTROL TYPE TC01 0424 /DTRA 2201 0000 6761 0424 /DTCA 0301 0000 6762 0424 /DTXA 3001 0000 6764 0424 /DTSF 2306 0000 6771 0424 /DTRB 2202 0000 6772 0424 /DTLB 1402 0000 6774 0424 /DTLA 1401 0000 6766
/MEMORY EXTENSION CONTROL TYPE MC8/I,MC8/L 0304 /CDF 0600 0000 6201 0311 /CIF 0600 0000 6202 2204 /RDF 0600 0000 6214 2211 /RIF 0600 0000 6224 2211 /RIB 0200 0000 6234 2215 /RMF 0600 0000 6244 /RANDOM ACCESS DISK FILE TYPE DF32 0403 /DCMA 1501 0000 6601 0415 /DMAW 0127 0000 6605 0423 /DSAC 0103 0000 6612 0405 /DEAC 0103 0000 6616 0406 /DFSC 2303 0000 6622 0415 /DMAR 0122 0000 6603 0403 /DCEA 0501 0000 6611 0405 /DEAL 0114 0000 6615 0406/DFSE 2305 0000 6621 0415 /DMAC 0103 0000 6626
/END OF PROGRAM SYTA, 0 /BEGINNING OF USER SYMBOLS $



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