*20 /DISK ASSEMBLER / / EJECT / D I A L A S S E M B L E R - - - V E R S I O N 2 / / /COPYRIGHT 1969, DIGITAL EQUIPMENT CORPORATION, MAYNARD MASSACHUSSETS, 01754 / /PDP-12 DISK DIAL ASSEMBLER / / / THIS ASSEMBLER REQUIRES THE STANDARD DISK DIAL HARDWARE / / / / LATEST ASSEMBLER <5/14/70>. INCLUDES CHAINING. / / / EJECT / 4 K L O A D E R M A P / / / /0000-0177 PAGE 0: COMMON LITERALS AND POINTERS. /0200-0377 BANK CHECK ROUTINE; SYMBOL SEARCH ROUTINE /0400-0577 SYMBOL TABLE GETTER ROUTINE /0600-0777 ROUTINE TO GET A SYMBOL FROM SYMBOL TABLE( OR ADD ON). / SDECO4 IS ACTIVE, SDECO8 IS NOT USED. / SDECO4 USES 6777-6000 FOR USER SYMBOLS. / 5400-5777 IS USED FOR USER SYMBOLS AND FOR A SWAPPING BUFFER/ / IF MORE THEN 300 SYMBOLS . EXTRA SYMBOLS GO OUT ON UNIT 1. /1000-1177 GENERAL RECURSIVE EXPRESION EVALUATOR. /1200-1377 RECURSIVE ADDRESS EVALUATOR. /1400-1577 /CENTRAL PROCESSING LOOP. MAIN START OF ASSEMBLER AFTER INITILIZATION. /1600-1777 /TEXT PROCESSOR,CURRENT LINE TESTER, PLUS MINOR SUPPORT ROUTINES. /2000-2177 AN INPUT CHARACTER SCANNER ROUTINE, THE PRINTER BUF ROUTINE, AND TAB ROUTINE. /2200-2377 NUMBER CONVERSIONS, TYPE CHECKS. /2400-2577 SYMBOL SORT FOR OUTPUT. TTY ROUTINE. /2600-2777 SYMBOL OUTPUT AND VALUE ROUTINE, OCTAL PRINT ROUTINE, FIELD CHANGE ROUTINE, AND WORK AREA. /3000-3177 OUTPUT LIST ROUTINE, 8K PSEUDO OP INITIALIZATION(DESTROYED AND NEVER UESED). WORK AREA. /3200-3377 ERROR MESSAGE PROCESSOR, TYPE EVALUATOR, SYSTEM SYMBOL TABLE SWAPPER, / FAIRLY LOW LEVEL CHARACTER GETTER, AND ROUTINE TO SKIP IF NOT PASS2 OR NOT IN LIST MODE. /3400-3577 INPUT CHARACTER CONVERTOR TO INTERNAL FORM. PLUS PAGE CHECKERS, OTHER / LITTLE ROUTINES. /3600-3777 INTERNAL TO EXTERNAL CHARACTER CONVERTOR, SYMBOL TABLE TYPE GETTERS AND SETTERS, / LOW LEVEL CHARACTER GETTER, COMMENT PROCESSOR, LIST AND NOLIST PROCESSORS. / / /T HE FOLLOWING LOCATIONS ARE IN A S S E M T W O ! / / /4000-4177 GENERAL TAPE IO CALL ROUTINES, INITILIAZTION FOR TAPE ROUTINES, PLUS EXTRA LITTLE STUFF. /4200-4377 MORE TAPE I/O ROUTINES, PSEUDO OP PROCESSOR(FOR PAGED IN PSEUDO OPS), AND LOADER CORE MAP. /4400-4777 INPUT BUFFER+SWAPPED IN AND OUT WORK AREA FOR SAVSYM AND LODSYM. /5000-5377 OUTPUT BUFFER, PLUS INITIALIZATION FOR ENTIRE ASSEMBLER AFTER IT S FIRST LOADED IN / AND THIS ALSO CONTAINS THE SWAPPED IN PSEUDO OP PROCESSOR. NOTE: WHEN THINGS ARE SWAPPED IN, / THE PREVIOUS CONTENTS OF THE LOCATIONS ARE FIRST SWAPPED OUT TO PRESERVE THEM. /5400-5777 USER SYMBOLS IF < 300 SYMBOLS, ELSE IT S BUFFER AREA FOR SWAPPING SYMBOLS FROM TAPE 1. /6000-6777 USER SYMBOLS(FIRST 200 OF THEM ANYWAY). /7000-7377 MODE SYMBOLS(EITHER PMODE OR LMODE TABLE, DEPENDING ON MODE.). /7400-7577 PSEUDO OP TABLE PLUS SPECIAL CHARACTER DEFINITION TABLE. /7600-7777 SUPPOSEDLY UNUSED, BUT WHEN PSEUDO OP TABLE IS LOADED, IT S LENGTH / OF 400 WORDS OVERLAYS IT. / / / /****-**** E N D O F 4 K M A P / / / EJECT / 8 K L O A D E R M A P / / /THIS MAP SHOWS ONLY CHANGES TO 4K MAP. / / / / /0600-0777 SDECO8 IS NOW ACTIVE AND SDECO4 IS PASSIVE. SDECO8 USES THE UPPER 4K OF CORE / FOR THE SYMBOL TABLE. THUS IT STORES NO USER SYMBOLS ON UNIT1(EXCEPT IF A SAVSYM IS GIVEN). /5000-5377 PSEUDO OP TABLE IS NO LINGER PAGED IN HERE. SEE 7000-7377. /5400-5777 OVERLAPPED READ ROUTINES FOR READING WHILE CALCULATING. /6000-6177 LINE PRINTER CHECKER AND BASIC LINE PRINTER ROUTINE. /6200-6377 OVERLAPPED TAPE OUTPUT ROUTINES PLUS COMMON READ-WRITE ROUTINES. /6400-6777 INPUT BUFFER NO .2 /7000-7377 RESIDENT PSEUDO OP PROCESSOR. NOTE THAT IT CAN RESIDE IN TWO SEPERATE PAGES(FOR 4 OR 8K). /7400-7777 INPUT BUFFER NO.1 FOR TAPE. / / / F I E L D 1 R E F E R E N C E S / / /10000-16777 USER DEFINED SYMBOLS. /17000-17377 SYSTEM MODE SYMBOLS(LMODE OR PMODE). /17400-17577 PSEUDO OPS AND SPECIAL CHARACTER TABLE. / / / / / E N D O F 8 K M A P / / EJECT / T H E P S E U D O O P P R O C E S S O R / / / / / THE PSEUDO OP PROCESSOR IS A 400 LOCATION ROUTINE WHICH IS PAGED IN ON THE 4K MODE AND RESIDENT IN THE 8K MODE. /AFTER THE DESIRED PSEUDO OP IS FOUND IN THE TABLE BY "EXPR" IT THEN JMPS TO AN ISZ CHAIN /THE ISZ CHAIN IS A BUNCH OF SEQUENTIAL ISZ S OF LOCATION "OP1". AFTER FALLING THROUGH THE ISZ S OP1 CONTAINS / THE DESIRED PSEUDO OP NUMBER. THE ROUTINE THEN PAGES IN THE PSEUDO OP PROCESSOR(IF 4K, ELSE IT S RESIDENT), THEN JMS / TO IT WITH THE DESIRED OPERATION NUMBER IN THE AC. WHEN FINISHED THE PSEUDO OP PROCESSOR RETURNS AND IT S SWAPPED BAC /K OUT. IN THE 8K VERSION IT S RESIDENT AND IS NOT SWAPPED IN OR OUT. / / / / / EJECT / S Y M B O L T A B L E O R G A N I Z A T I O N / / / /A SYMBOL TABLE ENTRY IS COMPOSED OF 4 WORDS. THE FIRST THREE ARE THE NAME AND THE LAST IS THE VALUE /IF THE SYMBOL IS A PSEUDO OP THEN THE LAST WORD CONTAINS A POINTER TO THE ROUTINE WHICH WILL PROCESS /THE PSEUDO OP AND THE REST OF THE STAATEMENT. / / /THE NAME IS COMPOSED OF SIX CHARACTERS. /THESE CHARACTERS ARE USUALLY THE 26 LETTERS PLUS 10 NUMBERS PLUS A NULL CHARACTER IF LESS THEN 6 LETTERS LONG. /THIS GIVES YOU 45 OCTAL POSSIBLE CHARACTERS FOR THE LEFT OR THE RIGHT HALF OF A WORD. /IF YOU USE SIXBIT NOTATION, YOU LL WASTE 23 POSSIBLE POSITIONS ON THE CHARACTER. THEREFORE, SIXBIT IS NOT USED. /NOW, SINCE THE FIRST CHARACTER OF A NAME MUST BE A LETTER, THIS LEAVES ONLY 32 OCTAL /CONBINATIONS FOR THE FIRST CHARACTER. THUS IF WE MULTIPLY THE LEFT /CHARACTERS OF A WORD BY 45, WE WILL HAVE 2 FREE BITS IN THE FIRST WORD OF A NAME./ /(32*45+45<2000 OCTAL). THESE TWO LEFT BITS ARE USED AS FOLLOWS: / / / / 00: SPECIAL CHARACTER / 01: UNDEFINED / 10: DEFINED / 11: PSEUDO OPERATION / / / EJECT / / / / / VERSION=17 /THIS IS USED IN CHECKING TAPE 1. / / /EVERY TIME YOU ASSEMBLE AND CHANGE THE MAJOR SYMBOL LOCATIONS, UP THIS BY 1. / / / UNITAS=4777 /PLACE TO GET UNIT FROM E7=0 D6=300 D7=370 D8=410 D9=446 PTHREE=7325 /CLA CLL CML IAC RAL /GENERATES A +3 IN AC WHEN EXECUTED MTWO=7344 /CLA CLL CMA RAL /GENERATES A -2 IN AC WHEN EXECUTED. MTHREE=7346 /CLA CLL CMA RTL /GENERATES A -3 IN AC WHEN EXECUTED. / / / / / / TERMC=00 /SET TERMC TO 44 IF DOLLAR SIGN IS THE END OF FILE CHAR. / / / / EJECT /PDP-12 ASSEMBLER PAGE 0 PMODE *1 DECOUT, PUT ERTOT, 0 LISTWD, 0 CNTLPI, CNTRLP MICROB, 0 EQRETI, 7777 TEMP, 0 /VARIABLES *10 BINPTR, 2000+D7+10 BINBLK, 0 CURLIN, 0 M40, -40 TYPEA, 0 P11, 11 /16 AND 17 ARE USED /FOR AUTO-INDEXING. *20 ANY, 0 /WAS THIS AN INSTRUCTION TYPE, 0 /HOLDS TYPE OF CURRENT SYMBOL VADR, 0 /VALUE OF CURRENT SYMBOL SADR, 0 /POINTER OF FIRST WORD OF CURRENT SYMBOL VAL, 0 /VALUE OF CURRENT SYMBOL VALK, 0 SCURR, 0 /CURRENT SYMBOL NUMBER SEND, 141 /POINTER TO FIRST FREE REGISTER AFTER SYMBOL TABLE AADR, 0 /ACTUAL CURRENT ADDRESS APAGE, 0 /ORIGIN OF CURRENT PAGE - ACTUAL PERMA, 141 /FIRST REGISTER AFTER PERMANENT SYMBOL TABLE EVAL, 0 /HOLDS ADDRESS PORTION DURING CALCULATION SGN, 0 PASS, 0 /7777 IF PASS 2 FLDWD, 0 /7777 IF EXTENDED MEMORY MODE, 0 /7777 IF PDP-8; 0 IF LINC TEM1A, 0 0 0 CURR, 0 CHARX, 0 CHARX2, 0 ABANK, 0 POINT, 0 /PUSH DOWN LIST IN, 0 /TELLS WHETHER SYMBOL WAS ACCEPTED ITEM, 0 HIC, 0 LWC, 0 MICROL, 0 INST, 0 /- IF SYMBOLIC A MICRO INST. MICRO, 0 CHARAC, 0 INIT1, INIT /POINTERS EMPTY1, EMPTY SOPS, OPS RESET1, RESETL BIT6A, BIT6 PASSEK, PASSER CURSKA, CURSKP GETCHR, SYSIN CHEKER, PAGSET SYMLST, LSTSYM MAINEX, MAIN INAS, CJMP1 MOVE1, MOVE8 SKIP, SKIP2 ERR1, ERROR EXPR1, EXPR TYCARI, TYCAR MAIN1, MAINSE PAGE1, RESET B21, B2 IDX1, IDX PUSH1, PUSH2 POPU1, POPUP1 GETSY1, GETSYM GETAS1, GETASY TYPAD1, TYPADD SDECO1, SDECO8 SRITIC, SWRC SYB, SYMBU SRD1, SREAD1 RET1, RETURN MON, MONIT PUNON1, PUNONE M1000, -1000 M43, -43 M33, -33 P400, 400 M45, -45 M67, -67 P76, 76 LINENO, JBTEST P3777, 3777 SCLEAR, CLEARR M47, -47 P240, 240 M4, -4 P6000, 6000 PM60A, M60A LOWTMP, 0 /MAY BE USED ONLY FOR IMM. TEMP. NEVER USED IF YOU LEAVE ROUTINE. PCHECK, CHECK P5000, 5000 P300, 300 P1777, 1777 P177, 177 P7600, 7600 P200, 200 P4000, 4000 M215, -215 P2000, 2000 P212, 212 P215, 215 P7400, 7400 P777, 777 P7, 7 P77, 77 TEM1, 0 /FIRST TEM2, 0 /SECOND TEM3, 0 /THIRD WORD OF CURRENT SYMBOL CON, 0 /HOLDS ACCUMULATED VALUE OF WORD ADR, 0 /HOLD FULL 12 BIT ADDRESS IND, 0 /400 IF INDIRECT OTHERWISE 0 ERRCNT, 0 SWITCH, 0 SNUM, 0 EMPTRA, 0 SPCUNT, 0 /LINE CHARACTER SPACE COUNTER. SY, SYMBUF TBCONT, 0 BINTAB, 2000+D7 SETINU, UBITS /POINTS TO THE ROUTINE TO TURN ON THE HEADER BLOCK BITS / / / / / EJECT /PDP-12 ASSEMBLER PAGE 1 *200 BANKCH, JMS I EXPR1 TAD ANY SZA CLA JMP BANKEM CMA TAD AADR TAD P2000 AND P6000 DCA AADR BANKHR, JMS I RESET1 JMS I PAGE1 TAD AADR DCA EVAL JMS I PASSEK JMS I CURSKA JMP I MAIN1 BANKEM, CLA CLL IAC RTL /+4 AND EVAL DCA FLDWD TAD EVAL RTR RAR JMP BANKHR-2 / CURREN, 0 JMS I RESTO1 ISZ COMMAN /CHECK FOR TOO MANY COMMAS. DCA SNUM /YEP. A BADDY JMS I PSTCHK JMS I MOVEAA TAD MODE RAL /PLACE SIGN BIT INTO THE LINK CLA TAD AADR SNL AND P1777 6211 DCA I VADR 6201 SZL JMP PDP8ER TAD AADR AND P6000 CLL RTR PDP8ER, TAD P4000 DCA .+2 JMS I TYPAD1 0 JMP I MAIN1A / COMMAN, -1 /RESET IRREGULARLY. PSTCHK, STOCHK MOVEAA, ERR2 RESTO1, RESTOR MAIN1A, MAINSF / SAVE1, SAVE / SEARCH, 0 JMS I SAVE1 DCA SCURR 6211 SEARC1, TAD SCURR JMS I SDECO1 CLA CMA TAD SADR DCA 16 TAD I 16 AND P1777 CIA TAD TEM1 SZA CLA JMP IND1 TAD I 16 AND P3777 CIA TAD TEM2 SZA CLA JMP IND1 TAD I 16 AND P3777 CIA TAD TEM3 SZA CLA JMP IND1 /NO MATCH. TAD TOP CIA TAD SADR SMA CLA JMP PSUD TAD PERMA CIA TAD SCURR SPA DCA INST /- IF INSTRUCTION CLA CLL PSUD, TAD I 16 DCA VALK TAD 16 DCA VADR MTHREE TAD 16 DCA 16 TAD I 16 AND P4000 DCA TEMP TAD I 16 AND P4000 RAR CLL TAD TEMP TAD VALK DCA VAL TAD MODE SMA CLA JMS I IND1B JMS I GETYE ISZ SEARCH JMS I IND1C TAABA, 6201 JMP I SEARCH IND1B, LNINST GETYE, GETYPE IND1C, ANYY TOP, 7374 IND1, ISZ SCURR TAD SCURR CIA TAD SEND SZA CLA JMP SEARC1 ISZ ANY JMP TAABA EJECT /PDP-12 ASSEMBLER PAGE 2 *400 GETSYM, 0 TAD CHARX SNA JMP SPECAL TAD M33 SPA JMP GETLET TAD M12A SMA CLA JMP SPECAL JMS I DPCVOP /DIGIT JMP I B11 M12A, -12 DPCVOP, DPCV SPECAL, TAD CHARX2 DCA TEM3 DCA TEM2 DCA TEM1 JMS I SCH1 JMP B11+1 TAD TYPE TAD P2000 SNA CLA JMP I VAL TAD VAL DCA TYPE JMP GSTART SCH1, SEARCH B11, B1 PTHREE JMS I ERR1 JMS I IDX1 JMP GETSYM+1 GETLET, JMS I GETAS1 /GET SYMBOL TAD TYPE TAD P2000 SNA CLA JMP I VAL /PSEUDO OP. GSTART, TAD I GETSYM AND P177 DCA CURR TAD GETSYM AND P7600 TAD CURR DCA CURR TAD I GETSYM AND P7600 SZA JMP GTYPOT TAD CURR DCA GETSYM JMP GSTART GTYPOT, CIA TAD TYPE SNA CLA JMP I CURR TAD I GETSYM AND P7600 TAD P200 SNA CLA JMP I CURR ISZ I GETSY1 JMP GSTART PAGEC, JMS I EXPR1 TAD ANY SZA CLA JMP PAGEM CMA TAD AADR TAD P200 AND P7600 DCA AADR PAGHER, JMS I PAGE1 TAD AADR DCA EVAL JMS I PASSEK JMS I CURSKA JMP I MAIN1 PAGEM, TAD EVAL /MULTIPLY BY 200 RTR RTR RTR JMP PAGHER-2 M1,-1 MOVE8, 0 TAD M1 DCA 16 CMA TAD I MOVE8 DCA 17 ISZ MOVE8 TAD I MOVE8 ISZ MOVE8 DCA MOVA TAD P777 DCA TEMP MOVB, TAD TEMP CLL CML RAL DCA TEMP SZL JMP I MOVE8 MOVA, 0 TAD I 16 AND TEMP AND P3777 6201 DCA I 17 JMP MOVB / DOLIST, CLA SKP /LIST ENTRY PSEUDO. PLIST, CLA CMA /NOLIST PSEUDO. DCA MOVE8 /IN TEMPORARY. TAD PASS /IS THIS PASS2? SNA CLA JMP DOPOUT /NO. IGNORE IT. TAD MOVE8 /0=LIST,7777=NOLIST DCA I JJSTART /FUDGE JBTEST PARAMS. TAD MOVE8 CMA DCA I JJEND /SET UP LINE NUMBER LIMITS. DOPOUT, JMP I B21 /CLEAN UP SYSTEM. JJSTART, JSTART JJEND, JEND / / / / / / / / VRSTR, 0 /THIS ROUTINE RESTORE 6400 FROM THE SCRATCH AREA JMS I VRSTRR /CALL THE READ ROUTINE VSAVE /POINTER TO THE SAVE AREA JMP I VRSTR /RETURN TO THE CALLER / / / / VRSTRR, READ /POINTER TO THE READ ROUTINE / / / / / / / / EJECT /PDP-12 ASSEMBLER PAGE 3 *600 /SYMBOL NUMBER DECODER SDECO8, 0 /CONVERT A SYMBOL NUMBER TO AN ADDRESS DCA SNUM /SAVE THE NUMBER TAD SNUM AND P6000 SZA CLA JMP I ERSY /TOO MANY SYMS TAD SNUM CLL RTL CIA TAD STAB /STAB IS TOP OF SYMBOL TABLE DCA SADR /ADDRESS OF FIRST WORD OF SYMBOL PTHREE TAD SADR DCA VADR /POINTS TO SYMBOL VALUE TAD COUNT /GET THE NUMBER OF CHARACTERS IN THE OUTPUT BUFFER SZA CLA /IF NON-ZERO, SEE IF ITS OK TO PRINT ONE. JMS CHECK /BY CALLING THE CHECK ROUTINE. JMP I SDECO8 TYPADD, 0 CLA TAD I TYPADD DCA TYPEA TAD TYPEA DCA TYPE 6211 TAD I SADR AND P1777 DCA I SADR TAD TYPE AND P6000 TAD I SADR DCA I SADR ISZ SADR TAD I SADR AND P3777 DCA I SADR TAD TYPE RTL AND P4000 TAD I SADR DCA I SADR ISZ SADR TAD I SADR AND P3777 DCA I SADR TAD TYPE RTL RAL AND P4000 TAD I SADR DCA I SADR MTWO TAD SADR DCA SADR TAD TYPE AND P6000 DCA TYPE 6201 ISZ TYPADD JMP I TYPADD ERSY,STEXD STAB, 7600 /SET TO POINT TO END OF THE SYMBOL TABLE / / / / / / / / / / BUFFERED TTY AND LPT ROUTINE / GGGET, 0 /GETS A CHARACTER FROM THE BUFFER CLA CMA /DECREMENT COUNT BY 1 TAD COUNT DCA COUNT TAD I OUTP /GET THE CHARACTER DCA LOWTMP /SAVE FOR A SECOND JMS BUMP /BUMP THE RING POINTER NOW OUTP, FIRST /POINTS TO THE NEXT GET FROM SPOT IN THE BUFFER TAD LOWTMP /REGET THE CHARACTER JMP I GGGET /AND EXIT / / / / / PUT, 0 DCA TYPADD /SAVE THE CHAR IN ANOTHER TEMP LOC JMS I PCHECK /CHECK TO STATUS OF THE DEVICES. TAD COUNT /GET THE COUNT TAD PLTST /COMPARE AGAINST THE MAXIMUM NUMBER ALLOWED SNA CLA JMP PUT+2 /BUFFER IS FULL. WAIT TAD TYPADD /RECALL THE DESIRED CHARACTER DCA I INP /STASH IN THE BUFFER JMS BUMP /BUMP THE BUFFER POINTER INP, FIRST /THE BUFFER POINTER ISZ COUNT /BOP UP THE COUNT JMS I PCHECK /SEND OUT ANOTHER CHAR IF ALL IS WELL JMP I PUT /AND EXIT / / / / BUMP, 0 /THIS BUMPS THE RING BUFFER POINTER ISZ I BUMP TAD I BUMP TAD PLOVR /TEST FOR WRAP AROUND SNA CLA /? TAD PLTST /GET MINUS END +START TAD I BUMP /NOW READJUST POINTER IF NECESSARY DCA I BUMP ISZ BUMP JMP I BUMP / / / / / CHECK, 0 /THIS CHECKS THE OUTPUT STATUS TAD COUNT /GET THE NUMBER OF CHARS IN THE BUFFER SNA CLA JMP I CHECK /RETURN IF NO CHARS IN THE BUFFER TSF /KEYBOARD OK??? JMP I CHECK /NOPE. RETURN NOW LSD /HOW ABOUT THE LINE PRINTER CNOP, JMP I CHECK /IF NO LINE PRINTER THIS GETS ZAPPED RDF /READ IN THE PRESENT DATA FIELD TAD CCDF /SAVE IT AWAY DCA .+4 /SAVE IT AWAY FOR A SECOND CCDF, CDF 0 /RESET THE DATA FIELD TO FIELD ZERO JMS GGGET /GET A CHAR FROM THE BUFFER JMS I CTYPO /NOW OUTPUT IT RIGHT AWAY. 0000 /RETURN CDF GOES HERE JMP I CHECK /NOW RETURN TO THE CALLER / / / / / / COUNT, 0 /NUMBER OF CHARACTERS NOW IN THE BUFFER PLTST, -BAD+FIRST PLOVR, -BAD /-UPPER LIMIT CTYPO, TYPO /ADDRESS OF THE ACTUAL PUTTER / / / / / / / / SKIP2, 0 DCA SDECO8 /SAVE SKIP COUNT TAD P240 JMS I DECOUT ISZ SDECO8 JMP .-3 JMP I SKIP2 / / / / / / / / / / / / VPRSRV, 0 /THIS ROUTINE PRESERVES LOCATIONS 6400-67777 JMS I VPRSRW /IN THE SCRATCH AREA. CALL THE WRITE ROUTINE VSAVE JMP I VPRSRV /AND RETURN TO THE CALLER. / / / / VPRSRW, WRITE /POINTER TO THE WRITE ROUTINE. / / / / / / / / / / / EJECT *1000 SCOLON=200 COMMA=600 SYMB=4000 EQUALS=1400 USYMB=2000 EXCLAM=2200 ANDS=3400 PLUS=4600 MINUS=5200 SPACE=5600 ALL=7600 /PDP-12 ASSEMBLER PAGE 4 EXPR, 0 TAD CON JMS I PUSH1 DCA CON TAD INST JMS I PUSH1 DCA INST TAD MICROL JMS I PUSH1 DCA MICROL TAD SGN JMS I PUSH1 TAD CRIOR /OR DCA SGN TAD H6 JMS I PUSH1 DCA H6 TAD EXPR JMS I PUSH1 SKP A, JMS I IDX1 JMS I GETSY1 B-1000+USYMB B-1000+SYMB A-1000+SPACE C-1000+PLUS C+3-1000+MINUS C+5-1000+EXCLAM G-1000+SCOLON C+7-1000+ANDS G-1000+ALL TAD VAL JMP .+3 B1, CLA TAD LWC JMS I SGN SKP JMS I IDX1 B2, JMS I GETSY1 C+5-1000+SPACE GET-1-1000+COMMA B1-2-1000+SYMB B1-2-1000+USYMB ERONE-1000+EQUALS A+5-1000 C, TAD CRIOR+1 /PLUS DCA SGN JMP B2-1 TAD CRIOR+2 /MINUS JMP C+1 TAD CRIOR /OR JMP C+1 TAD CRIOR+3 /AND JMP C+1 H, TAD MODE SMA CLA JMP LINKI TAD P400 TAD H6 DCA H6 JMP A+1 H6, 0 B, TAD VAL JMS I SGN JMS I GETSY1 EQU-1000+EQUALS GET-1000+SPACE B2+1-1000 LINKI, TAD P10 UN, TAD P10 JMP H+4 JMS I DEFIN1 GET, JMS I GETAD1 TAD ADR JMS I CRIOR G, JMS I POPU1 DCA EXPR TAD CON DCA EVAL TAD H6 DCA IND JMS I POPU1 DCA H6 JMS I POPU1 DCA SGN TAD MICROL DCA MICROB JMS I POPU1 DCA MICROL TAD INST DCA MICRO JMS I POPU1 DCA INST JMS I POPU1 DCA CON JMP I EXPR / ERONE, JMP I .+1 EQUERR / EQU, TAD I REPUN1 DCA CRIOR-1 DCA EQRETI JMS I IDX1 JMS I EXPR1 CLA CMA DCA EQRETI TAD CRIOR-1 JMS I SDECO1 TAD EVAL 6211 DCA I VADR 6201 JMS I TYPAD1 SYMB JMS I PASSEK JMS I CURSKA JMP I MAIN1 0 CRIOR, RIOR RADD RSUB RAND REPUN1, RESTOR-2 GETAD1, GETADR P10, 10 DEFIN1, CURREN STEXD,TAD P7 JMS I ERR1 JMP I MON EJECT /PDP-12 ASSEMBLER PAGE 5 *1200 GETADR, 0 JMS I IDX1 TAD GETADR JMS I PUSH1 JMS I EXPR1 TAD MODE SMA CLA JMP LNKOR TAD MICRO SMA CLA JMP CHKLA TAD CON CLL RTL RTL AND P7 TAD M6A SMA CLA JMP LEVEL+1 CHKLA, TAD EVAL AND P7600 SNA JMP AWAY+1 CIA TAD APAGE SNA CLA JMP AWAY IAC JMS I NUPAGE JMP LEAVE DCA ADR LEAVE, JMS I POPU1 DCA GETADR JMP I GETADR AWAY, TAD P200 DCA TEMP TAD EVAL AND P177 TAD TEMP TAD IND JMP LEAVE-1 LNKOR, TAD MICROB SMA CLA JMP CHKL TAD EVAL AND P1777 TAD IND LEVEL, DCA EVAL TAD EVAL JMP LEAVE-1 M6A, -6 NUPAGE, UNDERR 0 CHKL, TAD TYPEA RTL AND P6000 SZA CLA JMP LEVEL-3 TAD EVAL TAD IND JMP LEVEL LDT, 0 TAD CHARX SNA JMP I LDT DCA NUPAGE+1 TAD NUPAGE+1 TAD M45 SMA CLA JMP NOTLDT ISZ IN /LETTER OR DIGIT JMS I IDX1 TAD NUPAGE+1 JMP I LDT NOTLDT, DCA CHARX JMP I LDT A1W, 0 JMS LDT DCA NUPAGE+1 TAD NUPAGE+1 CLL RTL DCA VAL /CHR. *4 TAD VAL RTL RAL /CHR. *32 TAD VAL TAD NUPAGE+1 /CHR *1 DCA VAL JMS LDT TAD VAL JMP I A1W AAS, 0 JMS A1W DCA TEM1 JMS A1W DCA TEM2 JMS A1W DCA TEM3 JMS LDT SNA CLA JMP I AAS JMP .-3 ORGIC, JMS I IDX1 JMS I EXPR1 TAD MODE SMA CLA JMP LINKIC TAD EVAL DCA AADR TAD EVAL AND P7600 CIA TAD APAGE SNA CLA JMP LNRT JMS I PAGE1 TAD AADR DCA EVAL LNRT, JMS I PASSEK JMS I CURSKA JMP I MAIN1 LINKIC, TAD EVAL AND P1777 TAD ABANK DCA AADR JMP LNRT EJECT / / / / / / / / / / / / / / / / / / / / / / / E N D O F A S S E M O N E ! ! ! ! ! ! ! ! ! ! / - - - - - - - - - - - - - - - - - - - - - - - / / / / / / / / / / / / CHAIN "ASSEM2" /GO GET THE SECOND PART NOW. / / EJECT