/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 ASYMBOL2 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