/MACRO-8M / 8 JUL 69 RBH /ASSEMBLY PARAMETERS: INBUF= 6200 OUTBUF= 7000 MACBUF= 0000 FIN= 7577 BOT= FIN-600 /MACRO-8M / 3 APR 69 RBH /PAGE ZERO CHANGES /LOCATIONS 1-6 AND 10 & 11 ARE USED BY OS/8 FILE SYSTEM /MACRO-8 NEEDS TO GET AT LOCATION 4, AND PROVIDE A POINTER /IN LOCATION 5. SCATP= 4 SCAT= JMP I 4 /INTERRUPT HANDLER EXIT *5 INTHAN /INT. HNDLRS FOR TTY & PUNCH *17 sYMTAB-1 /PRESET TO COPY BASIC SYMBOLS TPASI, TSTPAS /RELOCATED FROM 0005 *26 STAB, FIN /VERY TOP OF SYMBOLS SEND, BOT /NEW VALUE OF LAST PERM *42 / PERMA, BOT /SYMBOL TABLE LOCATION *46 MACEND, 0 /SET BY INITIALIZATION *76 NOW3, 0000 /PASS 3 FLAG FROM 0011 ZBUFE, 5400 /BUFFER FOR PAGE ZERO LITERALS CBUFE, 5200 /BUFFER FOR C PAGE LNKS & LITS *104 BINOUT, HSOUT /BINARY PUNCH ROUTINE 0 /FREE LOCATION *107 0 /FREE *113 OUTPUT, DECPUT /LISTING OUTPUT TO DECTAPE *115 INPUT, DECGET /SOURCE CODE ON DECTAPE *117 PUSH1, PUSH2 /ROUTINE MOVED DECOUT, TYOUT /TELETYPE OUTPUT DRIVER *122 WRITE, 6600 /DECTAPE READ, 7000 /FILE SYSTEM JOIN, 7100 /ENTRY POINTS ERR, DECERR /DECTAPE ERROR TRAP UNTRM1, UNTRIM /TYPE OUT TRIMMED ASCII *131 RESCAT, 0 /NORM INT. RETN PNTR /MACRO-8M / 3 APR 69 RBH /SYMBOL DEFINITIONS: / /PAGE ZERO CONSTANTS CM7= 142 CM1= 151 C600= 156 C6= 157 C4= 161 C200= 163 C7600= 164 C177= 165 CM12= 170 C3777= 172 C1777= 173 CM3= 174 C6000= 176 / TYPE= 22 CON= 37 PASS= 47 TEM1A= 50 SKIP= 103 ERR1= 106 PAGE1= 112 / GETYPE= 357 PAGEC= 610 PERIOD= 641 A= 1021 H= 1071 II= 1252 ORGIC= 1355 WAIT= 1427 TSTPAS= 1675 EXMEM= 2156 DECIM= 2241 OCT= 2243 OCTS= 2251 ZUNCON= 3103 MACROD= 4043 MACREF= 4200 ESCAPE= 4261 FINIS= 4336 /MACRO-8M / 4 APR 69 RBH /PAGE 1 CHANGES /SYMBOL DEFINITIONS: CONE= 261 CURREN= 333 EVAL= 43 MAINEX= 102 SADR= 24 VADR= 23 *200 MACRO, CLA CLL /STARTING POINT TAD Z SCATP /SAVE INT RETURN PNTR DCA Z RESCAT /FOR I/O ROUTINES JMP I Z MAINEX /THEN START PASS 1 *276 TAD Z EVAL /RELOCATED FROM 303 DCA I CURREN JMP CONE-3 TISADR, 0 /TAD INDIRECT FROM FIELD 1 CDF 10 TAD I Z SADR CDF 00 JMP I TISADR DVADRI, DIVADR /DCA I Z VADR TO FLD 1 0 0 0 /3 FREE LOCATIONS *344 JMS I DVADRI /DCA I Z VADR TO FLD 1 *360 JMS TISADR *364 JMS TISADR *376 MOVE2 /MOVE SYMBOL FROM FIELD 1 /MACRO-8M / 3 APR 69 RBH /PAGE 2 CHANGES /SYMBOL DEFINITIONS: SAVE= 2127 *401 JMS I SAVE1 /POINTER REMOVED FROM PAGE 0 *410 JMS TADI16 /TAD I FROM FIELD 1 *416 JMS TADI16 *424 JMS TADI16 *432 CIA CLL /13-BIT ARITHMETIC *434 SZL CLA *437 CIA STL /MORE 13-BIT *441 RAR /LINK IS SIGN BIT *444 JMS TADI16 *455 TOP /SPLIT OPS FROM PSEUDOS *462 CIA CLL /MORE BIG COMPARISIONS *464 SNL CLA *532 JMP I MACRFI /NEW POINTER LOCATION *554 TADI16, 0 /TAD I Z 16 FROM FIELD 1 CDF 10 TAD I Z 16 CDF 00 JMP I TADI16 SAVE1, SAVE /POINTER MOVED FROM PAGE 0 MACRFI, MACREF /RELOCATED FROM 0006 0 /FREE LOCATION /MACRO-8M / 1 APR 69 RBH /PAGE 3 CHANGES /SYMBOL DEFINITIONS: RESET= 676 *600 DISADR, 0 /DCA INDIRECT TO FIELD 1 CDF 10 DCA I Z SADR CDF 00 JMP I DISADR TSADRI, TISADR /OFF-PAGE LINK 0 /FREE LOCATION 0 /ANOTHER *636 JMS RESET /REMOVES PAGE 0 POINTER *651 JMS I TSADRI /TAD I SADR *653 JMS DISADR /DCA I SADR *656 JMS I TSADRI /TAD I SADR JMS DISADR /DCA I SADR *661 JMS I TSADRI /TAD I SADR *663 JMS DISADR /DCA I SADR *667 JMS I TSADRI /TAD I SADR JMS DISADR /DCA I SADR /MACRO-8M / 1 APR 69 RBH /MORE PAGE 3 CHANGES *705 DECERR, DCA DISADR /SAVE ERROR CODE JMS I Z JOIN /TURN OFF ERROR FLAG CLA /ALREADY HAVE ERROR CODE TAD Z C6 /ERROR 6: FS JMS I Z ERR1 /TYPE MESSAGE TAD DISADR /RETRIEVE ERROR CODE JMP . /LIVE HALT / RSHL, 0 /LEFT SHIFT ROUTINE SNA /LOOK OUT FOR ZERO JMP I RSHL /DON'T DO ANYTHING CIA /MAKE NEGATIVE DCA DISADR /USE FOR COUNTING TAD Z CON /NUMBER TO BE SHIFTED CLL RAL /SHIFT IT ISZ DISADR /MORE? JMP .-2 /YES DCA Z CON /ALL THROUGH JMP I RSHL /RETURN /MACRO-8M / 3 APR 69 RBH /PAGE 4 CHANGES /SYMBOL DEFINITIONS: SYMB= 1000 USYMB= 2000 BKSL= 2600 SPACE= 5600 ALL= 7600 B1= 1037 C= 1053 CRIOR= 1167 VAL= 25 SGN= 44 POINT= 60 GETADR= 1200 POPUP1= 1347 *1002 JMS PUSH2 /REMOVES PAGE 0 POINTER *1005 JMS PUSH2 *1010 JMS PUSH2 *1014 JMS PUSH2 *1017 JMS PUSH2 *1034 B3+2-1000+BKSL /IMPLEMENTS BACKSLASH OPERATOR G-1000+ALL /SHUFFLE TABLES TO DO IT 0 /FREE LOCATION *1045 C+5-1000+SPACE /MAKE SPACE AN IOR *1047 B3-1000+SYMB /MORE SHUFFLING B3-1000+USYMB /AND TUGGING AT FORELOCK *1064 J, JMS I Z INPUT /NEW INPUT ROUTINE POINTER *1070 0 /FREE LOCATION /MACRO-8M / 4 APR 69 RBH /OORE PAGE 4 CHANGES *1103 JMS I DEFIN1 /REMOVES PAGE 0 POINTER GET, JMS I GETAD1 /DITTO *1106 JMS I Z SGN /TO DO MATH ON LITERAL ADDRESSES G, JMS I POPU1 /GETS RID OF PAGE 0 POINTER *1115 JMS I POPU1 *1117 JMS I POPU1 *1123 JMS I POPU1 *1125 JMS I POPU1 *1131 PUSH2, 0 /RELOCATED FROM 4000 DCA I Z POINT ISZ Z POINT JMP I PUSH2 B3, TAD Z VAL /MOVED FROM 1035 JMP B1+2 /TO GET BACKSLASH TAD .+2 /PARSING OF BACKSLASH JMP C+1 /TREAT AS BINARY OPERATOR RSHL /LEFT-SHIFT ROUTINE DICRIO, 0 /DCA I CRIOR-1 TO FLD 1 CDF 10 DCA I CRIOR-1 CDF 00 JMP I DICRIO 0 *1157 JMS DICRIO /DCA I CRIOR-1 TO FLD 1 *1173 POPU1, POPUP1 /MOVED FROM PAGE 0 DEFIN1, CURREN /THIS TOO GETAD1, GETADR /SO'S THIS ONE /MACRO-8M / 2 APR 69 RBH /PAGE 5 CHANGES /SYMBOL DEFINITIONS: ADR= 40 CCON= 45 CONC= 204 CONZ= 317 *1211 JMP LEAVE-1 /ADDRESS IS DIFFERENT *1227 JMP LEAVE /SAME REASON *1232 JMS I CONC1 /REMOVE PAGE 0 POINTER TAD Z CCON /SQUEEZE OUT "LG" MESSAGE TAD Z C600 /WHICH LOST BIG DCA Z ADR LEAVE, JMS POPUP1 /ELIMINATES PAGE 0 POINTER DCA GETADR JMP I GETADR /RETURN FROM SUBROUTINE CONC1, CONC /MOVED FROM PAGE 0 CONZ1, CONZ /ALSO FROM PAGE 0 *1251 JMP LEAVE-1 /ADDRESS CHANGED *1264 JMS I CONC1 /INSTEAD OF VIA PAGE 0 *1267 JMS I CONZ1 /INSTEAD OF VIA PAGE 0 *1272 JMS POPUP1 /ROUTINE IS ON-PAGE /MACRO-8M / 3 APR 69 RBH /PAGE 6 CHANGES /SYMBOL DEFINITIONS: PASS3= 1557 *1400 MAIN, CLA /(-600) THIS ROUTINE KILLS ISZ Z SEND /ITSELF AFTER COPYING TAD I Z 17 /BASIC SYMBOLS FROM CDF 10 /05000-05577 TO DCA I Z SEND /17000-17577 CDF 00 ISZ MAIN /MAIN IS RESET TO A JUMP JMP MAIN+1 /JUST BELOW CLA /RE-EXECUTABLE CODE STARTS PASS1, TAD Z PERMA /HERE DCA Z SEND /RESTORE TO BASIC SYMBOLS TAD CMCBF /AND CLEAN OUT MACROS *1417 DCA Z NOW3 /NEW ADDRESS *1430 TAD LIST1 /MOVED FROM PAGE 0 *1477 CM40, SMA SZA CLA /USED AS CONSTANT *1524 TAD Z NOW3 /NEW ADDRESS *1531 TAD CM40 /INSTEAD OF (-40) *1550 OCTS1, REWIND /SET UP FOR NEW PASS *1554 THIRD /INITIALIZE FOR PASS 3 *1561 ISZ Z NOW3 /NEW ADDRESS *1565 DCA I CKSUMI /CHECKSUM MOVED *1573 CJMP1, JMP PASS3 /GO ON TO PASS 3 *1575 LIST1, LIST /BOTTOM OF PUSHDOWN LIST CKSUMI, CKSUM /BINARY CHECKSUM CMCBF, MACBUF /MACRO BUFFER ORIGIN /MACRO-8M / 3 JUN 69 RBH /PAGE 7 CHANGES /SYMBOL DEFINITIONS: ITEM= 62 IDX= 2043 *1600 BIT6, 0 /TRANSLATE ASCII TO TAD Z ITEM /FUNNY SIX-BIT AND Z C177 /OMITTING ] AND ) SNA /SKIP BLANK CHARS JMP I (IDX+1) TAD (-140) /TEST FOR LOWER CASE SMA /STILL + IF L.C. TAD (-40) /MAKE L.C. INTO U.C. TAD Z C4 /GET RID OF ],^,& _ SMA SZA JMP BIT6EX /CLA THEN JMP IDX+1 TAD (134-132) /SKIM OFF [ AND \ SMA SZA JMP BON /ADD 73 TO C(AC) TAD CC32 /TAKE LETTERS SMA SZA JMP I BIT6 /AND EXIT DIRECTLY TAD CC20 /NUMERALS & HIGHER PUNCT. SMA JMP BON+5 /ADD 33 TO C(AC) TAD CC20 /LOWER PUNCT. SMA JMP BON+1 /ADD 54 TO C(AC) TAD Z C4 /LOOK FOR EOF SNA JMS I (REWIND) /TO DO SOMETHING OBVIOUS TAD (34-15) /LOOK FOR CR SNA JMP BON-1 /MAKE IT 46 (;) TAD Z C4 /LOOK FOR TAB BIT6EX, SNA CLA JMP BON+1 /MAKE IT 54 (SPACE) JMP I (IDX+1) /IGNORE EVERYTHING ELSE TAD (-25) /ADD 46 BON, TAD (17) /ADD 73 TAD (-11) /ADD 54 SNA /LOOK FOR ) JMP I (IDX+1 /IGNORE ) TAD CC32 /ADD 65 TAD CC32 /ADD 33 IAC JMP I BIT6 /RETURN WITH MASHED CHARACTER /MACRO-8M / 3 JUN 69 RBH /ADDITIONAL PAGE 7 CHANGES UNTRIM, 0 /TYPE TRIMMED ASCII TAD (-40) /SEPARATE OUT LETTERS SPA /WHICH BECOME NEGATIVE TAD CC100 /ADD EXTRA 100 TO THEM TAD C240 /NOW ADD VALUE OF SPACE JMS I Z OUTPUT /AND DO SOMETHING WITH IT JMP I UNTRIM CC100, 100 / *1706 JMS I Z OUTPUT /DECTAPE OR TTY *1727 STRING, JMS I Z INPUT /INPUT FROM DECTAPE *1732 JMS I Z INPUT *1744 JMS I Z INPUT *1755 CC32, 32 CC20, 20 *1763 C240, 240 /ASCII SPACE PAGE /MACRO-8M / 4 APR 69 RBH /PAGE 10 CHANGES *2002 JMS DISEND /DCA I Z SEND TO FIELD 1 *2007 JMS DISEND *2012 JMS DISEND *2015 JMS DISEND *2027 CIA CLL /13-BIT ARITHMETIC *2031 SZL CLA /LOOK FOR SYMBOL TABLE OVERFLOW *2041 JMP . /LIVE HALT 0 /FREE LOCATION *2045 JMS I Z INPUT /POINTER NOW ON PAGE 0 *2064 JMS MACGET /MACROS STORED IN FIELD 1 *2074 JMS MACGET *2102 MACGET, 0 /UNPEEL A MACRO CDF 10 TAD I MACGET-1 CDF 00 JMP I MACGET DISEND, 0 /DCA I Z SEND TO FIELD 1 CDF 10 DCA I Z SEND CDF 00 JMP I DISEND COMMEN, JMS I Z INPUT /SKIP A COMMENT *2162 TAD Z NOW3 /NEW ADDRESS /MACRO-8M /28 MAR 69 RBH /PAGE 11 CHANGES *2316 MOVE2, 0 /SHARED WITH RTDIG IN DPCV TAD Z CM1 /[-1 DCA Z 16 STA TAD I MOVE2 /ADDRESS OF TARGET DCA Z 17 CDF 10 /GO TO FIELD 1 TAD I Z 16 CDF 00 AND Z C1777 /[1777] DCA I Z 17 CDF 10 TAD I Z 16 CDF 00 AND Z C3777 /[3777] DCA I Z 17 CDF 10 TAD I Z 16 CDF 00 DCA I Z 17 ISZ MOVE2 /SKIP OVER ARGUMENT JMP I MOVE2 /RETURN TDIVDR, TIVADR /TAD I Z VADR FROM FLD 1 *2361 JMS I TDIVDR /TAD I Z VADR FROM FLD 1 /MACRO-8M / 4 JUN 69 RBH /PAGE 12 CHANGES *2411 CAFF, 214 /ASCII FORM FEED ALPHA, 0 /LIST SYMBOLS TAD CAFF /PUT OUT FORM FEED JMS I Z OUTPUT *2442 CIA CLL /13-BIT ARITHMETIC *2444 SZL CLA /13-BIT COMPARISON *2454 JMS I MOVIE /MOVE FROM FIELD 1 *2505 JMS I MOVIE *2507 JMS I TAD16I /TAD I 16 FROM FLD 1 *2516 TAD CAFS /PUT OUT END-OF-FILE JMS I Z OUTPUT TAD CM4 /MAKE SURE LAST CHARS JMS I Z SKIP /GET INTO BUFFER JMP I ALPHA /RETURN TAD16I, TADI16 /TAD I Z 16 FROM FLD 1 *2526 CAFS, 234 /ASCII END-OF-FILE *2576 MOVIE, MOVE2 /MOVE FROM FIELD 1 CM4, -4 /MACRO-8M / 1 APR 69 RBH /PAGE 13 CHANGES *2600 MESSAG, 0 /TYPE OUT MESSAGE AND C77 /CREATED BY 'TEXT' SNA /SKIP EXCEPT ON JMP I MESSAG /00 STOP CODE JMS I Z UNTRM1 /UNTRIM SIX-BIT CODE ISZ MESSAG /SKIP BECAUSE NOT JMP I MESSAG /STOP CODE YET C77, 77 /SIX-BIT MASK *2634 JMS I Z OUTPUT *2636 JMS I Z OUTPUT *2707 JMS I Z OUTPUT *2726 JMS I Z OUTPUT /MACRO-8M / 3 APR 69 RBH /PAGE 14 CHANGES /SYMBOL DEFINITIONS: PUN= 3023 *3025 DCA UNPUN /SAVE FOR CHECKSUM TAD UNPUN JMS I Z BINOUT /PUNCH ONE LINE TAD UNPUN /ACCUMULATE TAD CKSUM /CHECKSUM DCA CKSUM JMP I PUN /RETURN CKSUM, 0 UNPUN, 0 TAD .-3 /GIMMICK OUT PUNCH *3042 TAD CKSUM /NEW ADDRESS *3050 TAD CKSUM /NEW ADDRESS *3115 TAD Z NOW3 /NEW ADDRESS /MACRO-8M /28 MAR 69 RBH /PAGE 15 CHANGES /SYMBOL DEFINITIONS: ERROR= 3201 ENTS= 2000 OPS= 2712 OSYM= 2621 SEARCH= 400 TYCAR= 2632 *3204 TAD Z NOW3 /NEW ADDRESS *3206 JMP I ERROR /OR JMP ERRCHG+4 TO OUTPUT ON PASS 3 JMP ERRCHG /CHANGE "OUTPUT" TO TTY JMS I Z OUTPUT /RUBOUT FOR BIN LOADER JMS I ERRCHG-3 /CR-LF *3215 JMS I Z OUTPUT /1ST LETTER *3224 JMS I Z OUTPUT /2ND LETTER *3226 JMS I Z OUTPUT /SPACE JMS I ERRCHG-2 /SYMBOL *3231 JMS I Z OUTPUT /"+" *3237 JMS I ERRCHG-3 /CR-LF STA JMS I Z OUTPUT /2ND RUBOUT FOR BIN LDR TAD ERRCHG-1 /RESTORE "OUTPUT" DCA Z OUTPUT JMP I ERROR /RETURN *3247 TYCAR OSYM DECPUT /INITIAL VALUE IF PASS 3 ERRORS ERRCHG, TAD Z OUTPUT DCA ERRCHG-1 /SAVE WHAT'S THERE TAD Z DECOUT /GET TTY POINTER DCA Z OUTPUT STA /MAKE A RUBOUT JMP ERROR+7 /CONTINUE ON /MACRO-8M /23 MAR 69 RBH /MORE PAGE 15 CHANGES *3271 JMS I SEAR1 /REMOVE POINTER FROM PAGE 0 *3275 JMS I ENTS1 /SAME GAME *3323 2306 /FS FILE SYSTEM ERROR *3331 SEAR1, SEARCH ENTS1, ENTS LIST= . /BEGINNING OF PUSH-DOWN AREA /MACRO-8M / 3 JUN 69 RBH /NEW PAGE 16 STUFF: /TELETYPE & PUNCH OUTPUT ROUTINES *3440 TYOUT, 0 /TTY OUTPUT DCA I TYPNTI /PUT INTO BUFFER TAD TYPNTI /AND ADJUST POINTER IAC AND TYRING /MAKE IT GO IN CIRCLES DCA TYPNTI TAD TYCNTR TAD TYSIZE SMA CLA /BUFFER FILLED? JMP .-3 /YES, WAIT HERE IOF /NOT FILLED NOW ISZ TYCNTR /INCREMENT CHAR COUNT JMP TYRETN /TTY ALREADY GOING TAD I TYPNTO /WASN'T GOING, HAVE TO START IT TLS /PUT OUT CHARACTER CLA IAC /AND ADJUST POINTER TAD TYPNTO /FOR INTERRUPT HANDLER AND TYRING /BEND POINTER AROUND DCA TYPNTO TYRETN, ION /RESTORE INTERRUPT NOW JMP I TYOUT /AND PRETEND WE REALLY TYPED IT TYSIZE, 1-40 /-MAX VALUE OF TYCNTR TYPNTI, 3400 /FIRST WORD IN TTY BUFFER TYRING, 3437 /LAST DITTO INTHAN, PSF /INTERRUPT HANDLER SKP /WASN'T PUNCH JMP PANSR /GO SERVICE PUNCH TSF /SEE IF TTY OUT SKP /NOPE JMP TANSR /GO FIX IT UP IOT!114 /NUCLEAR DATA ADC FLAG KCC /TTY KEYBOARD SCAT /TRY TO TURN ON AGAIN /MACRO-8M / 3 JUN 69 RBH HSOUT, 0 /PUNCH OUTPUT CDF 10 /BUFFER IN FIELD 1 DCA I HSPNTI /PUT INTO BUFFER TAD HSPNTI IAC /POINT TO NEXT BUFFER LOC AND HSRING /BY GOING ROUND & ROUND DCA HSPNTI TAD HSCNTR TAD HSSIZE SMA CLA /BUFFER FILLED? JMP .-3 /YES, WAIT WITH INTERRUPT ON IOF /BUFFER NOT FILLED ISZ HSCNTR /INC & TEST BUFFER COUNT JMP HSRETN+2 /PUNCHING MERRILY AWAY TAD HSSCAT /JUST STARTING UP DCA Z SCATP /SO PLAY TRICKS JMP HSNEXT /BY TWEAKING INTERRUPT HANDLER HSRETN, TAD RESCAT /FIX SCAT POINTER AGAIN DCA Z SCATP CDF 00 /BACK TO FIELD ZERO ION /UNPLUG OUR EARS JMP I HSOUT /LOOK AS IF WE DID SOMETHING HSSIZE, 1-200 /-MAX VALUE OF HSCNTR HSPNTI, OUTBUF+400&7400 /FIRST WORD IN PUNCH BUFFER HSRING, OUTBUF+577&7577 /LAST DITTO HSSCAT, HSRETN /MACRO-8M / 3 JUN 69 RBH /INTERRUPT SERVICE ROUTINES FOR PUNCH AND TTY TANSR, TCF /CLEAR FLAG TAD TYCNTR /TEST BUFFER COUNT CIA CLL /WHICH CAN'T GO PAST -1 SMA SZA /SKIP IF STILL OK JMP .+3 /ALREADY AT -1 CMA CML /REDUCES IT BY 1 DCA TYCNTR SNL CLA /FINISHED IF COUNT=-1 SCAT TAD I TYPNTO /GET CHARACTER TLS /TYPE IT CLA IAC /AND FIX RING POINTER TAD TYPNTO AND TYRING /THIS MAKES THE RING DCA TYPNTO SCAT /NOW GO AWAY TYCNTR, -1 TYPNTO, 3400 PANSR, PCF /CLEAR FLAG TAD HSCNTR /TEST BUFFER COUNT CIA CLL /WHICH CAN'T GO PAST -1 SMA SZA /SKIP IF STILL OK JMP .+3 /ALREADY AT -1 CMA CML /REDUCES IT BY 1 DCA HSCNTR SNL CLA /FINISHED IF COUNT=-1 SCAT CDF 10 /BUFFER IN FIELD 1 HSNEXT, TAD I HSPNTO /GET CHARACTER PLS /PUNCH IT CLA IAC /AND FIX RING POINTER TAD HSPNTO AND HSRING /THIS MAKES THE RING DCA HSPNTO SCAT /NOW GO AWAY HSCNTR, -1 /RANGE TO +177 HSPNTO, OUTBUF+400&7400 /MACRO-8M / 4 APR 69 RBH /PAGE 17 CHANGES /SYMBOL DEFINITIONS: LSTSYM= 3601 EMPTY= 3636 *3602 JMP PATCH2 /IGNORE BLANKS TAD Z CM12 /LOOK FOR LINE FEED *3621 TAD LSTTOP /LISTING HAS OWN BUFFER *3625 TAD Z ZBUFE /100[8] CHARS *3642 TAD LSTTOP *3650 JMS I Z OUTPUT /USUALLY GOES TO DECTAPE *3656 PATCH2, TAD Z ITEM AND Z C177 SNA JMP I LSTSYM /BLANK, IGNORE JMP LSTSYM+2 /CONTINUE ON LSTTOP, 5477 /TOP OF LISTING BUFFER ZUNCON ALPHA /LIST SYMBOL TABLE WFN+4 /OUTPUT END-OF-FILE FLAG GW /ACTUAL CALL ON FILE SYSTEM ENDPAS, JMS I Z PAGE1 /HERE ON DOLLAR SIGN JMS I ENDPAS-4 /DUMP PG 0 LITERALS TAD Z PASS /SEE WHAT WE'RE DOING SMA CLA /PASS 2 OR 3? JMP UNDEF /1. LIST UNDEF SYMBS TAD Z NOW3 /SEE IF PASS 3 SNA CLA JMP I Z MAINEX /PASS 2. GO TO 3 JMS EMPTY /DUMP DOLLAR SIGN JMS I ENDPAS-3 /LIST SYMBOL TABLE STA /AND CLOSE LISTING FILE DCA I ENDPAS-2 /SET END-OF-FILE FLAG JMS I ENDPAS-1 /WRITE LAST BUFFER JMS I .+3 /WAIT UNTIL THRU IOF /QUIT JMP I Z C7600 /GO TO MONITOR OSWAIT /USE SUBROUTINE IN DECTAPE PKG /MACRO-8M / 1 APR 69 RBH /MORE PAGE 17 CHANGES UNDEF, TAD Z OUTPUT /SAVE PNTR TO OUTPUT DCA LSTSYM /LOCALLY TAD Z DECOUT /AND CHANGE OUTPUT TO DCA Z OUTPUT /TELETYPE SET TAD Z CM3 /BACK UP A POINTER TAD Z SEND /TO BOTTOM SYMBOL DCA Z SADR /IN ORDER TO SCAN TABLE UNDEF1, TAD Z C4 /MOVE TO NEXT SYMBOL TAD Z SADR DCA Z SADR TAD Z PERMA /SEE IF LAST USER CIA CLL /SYMBOL REACHED TAD Z SADR /13-BIT COMPARISON SZL CLA JMP UNDOUT /FINISHED JMS I UNDPNT /GET TYPE BITS TAD Z TYPE /CHECK FOR TYPE 2 TAD Z C6000 /WHICH MEANS UNDEFINED SZA CLA JMP UNDEF1 /NOT UNDEFINED TAD Z SADR /UNDEFINED, SO JMS I UNDPNT+1 /MOVE IT DOWN TO TEM1A /FLD 0 TO PRINT IT ISZ UNDCNT /BOOBY TRAP--1ST TIME? JMP UNDEF3+1 /NO, ELSE PRINT HEADING /MACRO-8M / 2 APR 69 RBH /MORE PAGE 17 CHANGES UNDEF2, JMS I UNDPNT+2 /TYPE A CR-LF TAD I MESPNT /HEADING FOR UNDEF SYMBS CLL RTR /LEFT HAND CHAR RTR RTR JMS I UNDPNT+3 /CALL MESSAGE SERVICE JMP UNDEF3 /STOP CODE SEEN TAD I MESPNT /RIGHT HAND CHAR JMS I UNDPNT+3 /PRINT IT JMP UNDEF3 /STOP CODE ISZ MESPNT /GO TO NEXT PAIR JMP UNDEF2+1 UNDEF3, JMS I UNDPNT+2 /CARRIAGE RETURN JMS I UNDPNT+4 /PRINT SYMBOL JMS I UNDPNT+2 /CARRIAGE RETURN JMP UNDEF1 /LOOK FOR ANOTHER UNDOUT, TAD LSTSYM /RESTORE OUTPUT PNTR DCA Z OUTPUT JMP I Z MAINEX /GO ON TO PASS 2 UNDCNT, -1 /BOOBY TRAP, NEVER RESET MESPNT, UDMESS /THIS ALSO UNDPNT, GETYPE /EXTRACT TYPE BITS MOVE2 /MOVE SYMBOL FROM FLD 1 TYCAR /OUTPUT CARRIAGE RETURN MESSAG /OUTPUT A MESSAGE OSYM /OUTPUT A SYMBOL /MACRO-8M /23 MAR 69 RBH /PAGE 20 CHANGES *4000 DIMCND, 0 /DCA I Z MACEND TO FIELD 1 CDF 10 DCA I Z MACEND CDF 00 JMP I DIMCND TMCNDI, TIMCND /TAD I Z MACEND FROM FLD 1 DIVADR, 0 /DCA I Z VADR TO FIELD 1 CDF 10 DCA I Z VADR CDF 00 JMP I DIVADR *4020 JMS DIMCND *4024 RIGHT2, DCA DIMCND /USE AS TEMPORARY JMS I TMCNDI /TAD I MACEND FROM FIELD 1 *4027 TAD DIMCND /PICK UP AGAIN JMS DIMCND /STORE IT *4033 CIA CLL /13-BIT ARITHMETIC *4035 SNL CLA /LOOK FOR MACRO OVERFLOW *4062 JMS DIVADR /DCA I Z VADR *4105 JMS DIVADR /DCA I Z VADR *4137 JMS I TVADRI /TAD I Z VADR *4165 IGNORE, JMS I Z INPUT *4172 TVADRI, TIVADR /TAD I Z VADR FROM FLD 1 /MACRO-8M /28 MAR 69 RBH /PAGE 21 CHANGES *4363 TIMCND, 0 /TAD I Z MACEND FROM FLD 1 CDF 10 TAD I Z MACEND CDF 00 JMP I TIMCND TIVADR, 0 /TAD I Z VADR FROM FLD 1 CDF 10 TAD I Z VADR CDF 00 JMP I TIVADR 0 0 0 /3 FREE LOCATIONS /PAGE 22 CHANGES /SYMBOL DEFINITIONS: PRSW= 4512 *4422 TAD PRSW /PERIOD SW. IS FP FLAG *4571 0 /FREE /MACRO-8M / 8 JUL 69 RBH /PAGE 23 CHANGES /SYMBOL DEFINITIONS: BEXP= 67 HIC= 70 LWC= 71 MAIN1= 111 IDX1= 116 MTSW= 2264 DECIMS= 2245 FINALL= 4400 DPN= 2346 ONEREG= 1443 *4720 CNSTNT, TAD I CNSPTR /DUBL & FLTG PSEUDO OPS DCA CNSPRX /PRESENT RADIX JMS I CNSPTR+1 /CHANGE TO DECIMAL JMS I Z IDX1 /HOP OVER % SIGN JMS I CNSPTR+3 /FINALL TAD I CNSPTR+4 /DPN SNA CLA /ANY DIGITS? JMP CNSOUT /NO, EXIT TAD I CNSPTR+2 /LOOK AT PERIOD SWITCH SZA CLA /ZERO IF PERIOD IN # JMP .+3 /NONE, SO DUBL INTEGER TAD Z BEXP /EXPONENT JMS I CNSPTR+5 /PUT OUT ONE WORD TAD Z HIC /HIGH ORDER WORD JMS I CNSPTR+5 TAD Z LWC /LOW ORDER WORD JMS I CNSPTR+5 CNSOUT, TAD CNSPRX /RESTORE ORIGINAL RADIX DCA I CNSPTR JMP I Z MAIN1 /BACK TO MAINLINE CNSPRX, 0 /TEMPORARY CNSPTR, MTSW DECIMS PRSW FINALL DPN ONEREG /MACRO-8M / 1 APR 69 RBH /MORE PAGE 23 CHANGES TOP /PNTR TO PERM SYMBOLS FIXED, TAD Z SEND /FIXTAB SKP ERASE, TAD FIXED-1 /EXPUNGE JMS I Z TPASI /ONLY ON PASS 1 DCA Z PERMA /LIMIT OF FIXED SYMBOLS TAD Z PERMA /NOW ALSO BOTTOM DCA Z SEND /SYMBOL IN TABLE JMP I Z MAIN1 /BACK TO MAINLINE UDMESS, TEXT "UNDEFINED SYMBOLS" /MACRO-8M /24 APR 69 RBH /BASIC SYMBOLS, LOADED INTO 5000-5577 /AND COPIED TO 17000-17577 AT STARTUP. *5000 SYMTAB, 1247; 4336; 0000; 6244 /RMF 1243; 4112; 0000; 6234 /RIB 1243; 4336; 0000; 6224 /RIF 1236; 4336; 0000; 6214 /RDF 0170; 4336; 0000; 6202 /CIF 0163; 4336; 0000; 6201 /CDF 0762; 4045; 0000; 7501 /MQA 1302; 4045; 0000; 7441 /SCA 0762; 4674; 0000; 7421 /MQL 0717; 5232; 0000; 7417 /LSR 0070; 5232; 0000; 7415 /ASR 1307; 4674; 0000; 7413 /SHL 1023; 4515; 0000; 7411 /NMI 0252; 4515; 0000; 7407 /DVI 0766; 5635; 0000; 7405 /MUY 1302; 4674; 0000; 7403 /SCL 1360; 5277; 0000; 6046 /TLS 1364; 4157; 0000; 6044 /TPC 1347; 4336; 0000; 6042 /TCF 1367; 4336; 0000; 6041 /TSF 0651; 4112; 0000; 6036 /KRB 0651; 5277; 0000; 6034 /KRS 0632; 4157; 0000; 6032 /KCC 0652; 4336; 0000; 6031 /KSF 1134; 5277; 0000; 6026 /PLS 1140; 4157; 0000; 6024 /PPC 1123; 4336; 0000; 6022 /PCF 1143; 4336; 0000; 6021 /PSF 1240; 4157; 0000; 6014 /RFC 1254; 4112; 0000; 6012 /RRB 1255; 4336; 0000; 6011 /RSF 0051; 4157; 0000; 6004 /ADC 0534; 4336; 0000; 6002 /IOF 0534; 5006; 0000; 6001 /ION 0417; 4627; 0000; 7204 /GLK 1323; 4674; 0000; 7120 /STL 1323; 4045; 0000; 7240 /STA /MACRO-8M /26 MAR 69 RBH 0675; 5277; 0000; 7604 /LAS 0170; 4045; 0000; 7041 /CIA 0464; 5344; 0000; 7402 /HLT 1076; 5232; 0000; 7404 /OSR 1312; 5120; 0000; 7410 /SKP 1331; 4674; 0000; 7430 /SZL 1315; 4674; 0000; 7420 /SNL 1315; 4045; 0000; 7450 /SNA 1317; 4045; 0000; 7510 /SPA 1331; 4045; 0000; 7440 /SZA 1314; 4045; 0000; 7500 /SMA 0516; 4157; 0000; 7001 /IAC 1256; 4674; 0000; 7006 /RTL 1233; 4674; 0000; 7004 /RAL 1256; 5232; 0000; 7012 /RTR 1233; 5232; 0000; 7010 /RAR 0174; 4674; 0000; 7020 /CML 0174; 4045; 0000; 7040 /CMA 0173; 4674; 0000; 7100 /CLL 0173; 4045; 0000; 7200 /CLA 1025; 5120; 0000; 7000 /NOP 1073; 5232; 0000; 7000 /OPR 0534; 5344; 0000; 6000 /IOT 0577; 5120; 0000; 5000 /JMP 0577; 5277; 0000; 4000 /JMS 0227; 4045; 0000; 3000 /DCA 0540; 5702; 0000; 2000 /ISZ 1345; 4224; 0000; 1000 /TAD 0063; 4224; 0000; 0000 /AND /MACRO-8M /28 MAR 69 RBH /TOP OF INSTRUCTION DEFINITIONS TOP= .-SYMTAB+BOT /SPECIAL CHARACTERS AND PSEUDO-INSTRUCTIONS 2000; 4000; 0056; 2400 /":ASCII VALUE 2000; 4000; 0062; 3400 /&:BINARY AND 4000; 0000; 0061; CNSTNT /%:OLD DUBL/FLTG 2000; 4000; 0075; 5600 /\:LEFT-SHIFT (^2) 5056; 1345; 0674; OCT /OCTAL 4231; 0170; 0742; DECIM /DECIMAL 5351; 1614; 0000; STRING /TEXT 4000; 0000; 0060; ENDPAS / 4231; 0347; 1013; MACROD /DEFINE 4347; 1614; 0047; FIXED /FIXTAB 4321; 1145; 1015; ERASE /EXPUNGE 5121; 1434; 0271; WAIT /PAUSE 5121; 0410; 0000; PAGEC /PAGE 4347; 0305; 0224; EXMEM /FIELD 4000; 0000; 0051; FINIS />:END MACRO 4000; 0000; 0077; ESCAPE /MACRO ESCAPE 2000; 4000; 0047; 1200 /<:BEGIN MACRO 2000; 4000; 0046; 0200 /;:CARR RETN 4000; 0000; 0074; II /[:PG 0 LIT 4000; 0000; 0064; II /(:C PG LIT 2000; 4000; 0055; 2200 /!:BINARY IOR 4000; 0000; 0066; ORGIC /*:ORIGIN 4000; 0000; 0072; PERIOD /.:C ADDR 2000; 4000; 0070; 0600 /,:TAG DEF 2000; 4000; 0050; 1400 /=:SYMB DEF 5702; 0000; 0000; A+1 /Z:(IGNORED) 4515; 0000; 0000; H /I:IND ADDR 2000; 4000; 0071; 5200 /-:BIN DIFF 2000; 4000; 0067; 4600 /+:BIN SUM 2000; 4000; 0054; 5600 /SPACE /MACRO-8M / 3 JUN 69 RBH /I/O ROUTINES FOR 5/7 ASCII ON DECTAPE /SYMBOL DEFINTIONS: SYMLST= 101 *5600 DECGET, 0 ISZ DGBCNT /TEST BYTE COUNT JMP DECGTN /O.K. ISZ DGTCNT SKP CLA /BUFFER READY JMS OSWAIT /WAIT UNTIL READY CDF 10 /GET THREE WORDS TAD I 14 DCA DTG1 TAD I 14 DCA DTG2 TAD I 14 DCA DTG3 CDF 00 TAD DGTCNT TAD (-177) SPA CLA /BUFFER NOW EMPTY? CMA /NO, SO DON'T READ TAD I (RFN+4) /YES, CHECK FILE STATUS SNA CLA /OK TO GET NEXT BUFFER LOAD? JMS GR /YES, REFILL IT TAD (-5) DCA DGBCNT /RESET BYTE COUNT /MACRO-8M / 3 JUN 69 RBH DECGTN, TAD Z CM7 DCA GR /SET SHIFT COUNT DECGTS, DCA Z ITEM /STORE INPUT CHARACTER TAD DTG3 CLL RAL DCA DTG3 TAD DTG2 RAL DCA DTG2 TAD DTG1 RAL DCA DTG1 TAD Z ITEM RAL ISZ GR JMP DECGTS TAD Z C200 /ADD 200'S BIT FOR HAPPINESS DCA Z ITEM TAD Z NOW3 /DOING PASS 3 LISTING? SZA CLA JMS I Z SYMLST /YES TAD Z ITEM /CARRY BACK CHAR JMP I DECGET /MACRO-8M /24 APR 69 RBH DECPUT, 0 AND Z C177 TAD DTP3 /INSERT NEW CHAR INTO TRIPLE DCA DTP3 STA /SHIFT 1 OR 7 BITS ISZ DPBCNT TAD (-6) DCA GW /USE ENTRY POINT FOR CNTR DECPTS, TAD DTP3 CLL RAL DCA DTP3 TAD DTP2 RAL DCA DTP2 TAD DTP1 RAL DCA DTP1 ISZ GW /SHIFT COUNT JMP DECPTS /GO AGAIN TAD DPBCNT SZA CLA /LAST BYTE? JMP I DECPUT /NO ISZ DPTCNT /YES, PREV BUFFER WRITTEN? SKP /YES JMS OSWAIT /NO, WAIT UNTIL DONE CDF 10 /PUT THREE WORDS AWAY TAD DTP1 DCA I 15 TAD DTP2 DCA I 15 TAD DTP3 DCA I 15 CDF 00 DCA DTP3 /CLEAR LOWEST BYTE TAD (-5) DCA DPBCNT /SET BYTE COUNT TAD DPTCNT TAD (-177) SMA CLA /BUFFER FULL? JMS GW /YES, WRITE IT JMP I DECPUT /MACRO-8M / 3 JUN 69 RBH GR, 0 /DECTAPE READ STA /RESET TRIPLE COUNT DCA DGTCNT TAD (INBUF-1) /BUFFER IS AT 10000 DCA Z 14 JMS I Z READ RFN /FILE POINTER SZA /ANY ERRORS? JMP I Z ERR /YES, SORRY JMP I GR /NO, RETURN DTG1, 0 DTG2, 0 DTG3, 0 DGBCNT, -1 /BYTE COUNT DGTCNT, -1 /TRIPLE COUNT GW, 0 /DECTAPE WRITE STA /RESET TRIPLE COUNT DCA DPTCNT TAD (OUTBUF-1) /BUFFER IS AT 10600 DCA Z 15 JMS I Z WRITE WFN /FILE POINTER SZA /ANY ERRORS? JMP I Z ERR /YES, SORRY JMP I GW /NO, RETURN DTP1, 0 DTP2, 0 DTP3, 0 DPBCNT, -5 /BYTE COUNT DPTCNT, -1 /TRIPLE COUNT OSWAIT, 0 /WAIT FOR TAPE TO CATCH UP JMS I Z JOIN /CALL FILE SYSTEM ROUTINE SZA /LOOK FOR ERRORS JMP I Z ERR /COMPLAIN! JMP I OSWAIT /FINISHED, ALL O.K. PAGE /MACRO-8M /24 APR 69 RBH /ACTIVE FILE POINTERS *6000 RFN, .+2 /COLLAPSE TWO VECTORS 3 /ON TOP OF EACH CDF 10 /OTHER INBUF /BUFFER AT 10000 0000 /END-OF-FILE FLAG 0000 /READ MODE FLAG 1 /INITIAL BLOCK (SCRATCH TAPE) 0 /BLOCK COUNT, UNUSED 1 /UNIT NUMBER 1 /NEXT BLOCK WFN, .+2 /ALSO COLLAPSED 3 /3 PAGES CDF 10 OUTBUF /BUFFER AT 10600 0000 /END-OF-FILE FLAG 4000 /WRITE MODE FLAG 0 /FIRST BLOCK (ASSIGNED) 0 /BLOCK COUNT, TALLIED 2 /UNIT NUMBER 0 /NEXT BLOCK (ASSISGNED) 6400 /FREE BLOCK LIST BUFFER 0 /RUNNING FBL POINTER /MACRO-8M / 8 JUL 69 RBH THIRD, 0 /SET UP FOR PASS 3 DCA WFN+4 /CLEAR E-O-F FLAG DCA WFN+6 /CLEAR INITIAL BLOCK # DCA WFN+7 /AND COUNT DCA WFN+13 /RESET RUNNING PNTR STA DCA I (DPTCNT) /RESET TRIPLE COUNT TAD (-5) /RESET DCA I (DPBCNT) /BYTE COUNT STA TAD WFN+3 /AND BUFFER POINTER DCA Z 15 DCA I (DTP3) /CLEAR BYTE ACCUMULATOR JMP I THIRD /I THINK THAT'S ALL REWIND, 0 /INITIALIZE DECTAPE FOR CIF CDF 00 /NEW PASS JMS I (OCTS) /RESET RADIX TAD RFN+6 /SET 1ST BLOCK OF FILE DCA RFN+11 /TO BE NEXT BLOCK JMS I (GR) /THEN READ 1ST BUFFER LOAD STA /RESET BYTE POINTER DCA I (DGBCNT) /BECAUSE NOTHING'S READY JMP I REWIND /GO BACK WITH INT. ON $