JSB SPACE CLA IOR B1KKK SET 'EQU' LABEL FLAG IN BIT 15. EQU25 LDB F1ADR ADD FLD 1 LABEL TO SYMB TABLE. CLE JSB SYMAD CLA JMP EQU,I RETURN EQU15 NOP SKP * * * 'ERROR' PRINTS ERROR MESSAGES ON THE LIST DEVICE. * * CALLING SEQUENCE: * A REG SHOULD CONTAIN - ERROR MESSAGE # IF * ERROR HAS BEEN DISCOVERED IN PASS 1; * + ERROR MESSAGE # IF ERROR HAS BEEN DISCOVERED * IN PASS 2. * JSB ERROR * * ON RETURN, MESSAGE WILL HAVE BEEN PRINTED * ON LIST DEVICE. * ERROR NOP ISZ NMERR LDB LIST SUPPRESS SZB,RSS LISTING? LDB .+6 STB SAVH SSA,RSS PASS I ERRORS? JMP EL2 NO. PASS 2. * * PASS I ERRORS * EL1 CMA,INA YES. MAKE ERROR # POS. LDB E1 PUT ERROR # INTO RBL ERROR MESSAGE BUFFER. JSB DECML LDA SAVH CLB,INB JSB SPACE SPACE ONE LINE. LDA .+2 OUTPUT ERROR MESSAGE. JSB IOSUB DEF SAVH DEF ERR1-1 DEF .-14 JMP ERROR,I EXIT. * * * PASS II ERRORS * EL2 SZA,RSS A = JMP EL1 0? YES. GO BACK. LDB E2 PUT ERROR MESSAGE NO. INTO RBL ERROR MESSAGE BUFFER. JSB DECML LDA LINE# PUT LINE NO. INTO LDB E3 ERROR MESSAGE BUFFER. RBL INB JSB DECML LDA SAVH CLB,INB JSB SPACE LDA .+2 OUTPUT ERROR MESSAGE. JSB IOSUB DEF SAVH DEF ERR2-1 DEF .M28 JMP ERROR,I SKP * * "IOSUB" DOES THE INPUT/OUTPUT. * * CALLING SEQUENCE: * * LDA <1 FOR INPUT, 2 FOR OUTPUT> * JSB IOSUB * DEF * DEF * DEF <- NO. OF CHARS OR + NO. OF WORDS> * * IOSUB NOP * * FIRST, SET UP THE .IOC. CALLING PARAMETERS. * STA SAVA ALF,ALF PUT READ/WRITE PARAM IN ALF PROPER PLACE. LDB IOSUB,I PLUG IN L.U.#. LDB 1,I SZB,RSS IS L.U.=0? JMP IOSUB,I YES. THEN QUIT RIGHT HERE. IOR 1 STA IOW3 LDA IOW0 SET UP AND UMSK CONTROL WORDS. IOR 1 STA IOW0 LDA IOW2 AND UMSK IOR 1 STA IOW2 LDA IOW4 AND UMSK IOR 1 STA IOW4 ISZ IOSUB SET BUFFER ADDR. LDA IOSUB,I STA IOBUF ISZ IOSUB SET # OF CHARS OR WORDS. LDA IOSUB,I LDA 0,I STA IONUM ISZ IOSUB SET RETURN ADDRESS. * * NOW FIND OUT WHAT IS TO BE DONE AND MAKE * NECESSARY MODIFICATIONS IN CALLING PARAMETERS. * JSB .IOC. IOW0 OCT 040000 AND EQMSK ALF,ALF CPA .+2 PUNCH OUT? JMP IO2 YES. CPA B16 2767A LINE PRINTER OUTPUT? JMP IO3 YES CPA B12 2610A/2614A LINE PRINTER OUTPUT? JMP IO3 YES. ADA .M20 NO. MAG TAPE I/O? SSA JMP IO4 NO. ADA .M20 SSA,RSS JMP IO4 NO. LDA IOW3 YES. SO FIX .IOC. CALL FOR IOR MCODE MAG TAPE I/O. STA IOW3 LDA IONUM NOW CONVERT - # OF CHARS CMA,INA SLA TO + # OF WORDS. INA RAR STA IONUM JMP IOBEG IO2 NOP LDA IOW3 PUNCH OUT: FIX FUNCTION IOR PCODE WORD FOR BINARY OUTPUT. STA IOW3 JMP IOBEG IO3 JSB .IOC. LP OUTPUT: SET LP NORMAL MODE. IOW2 OCT 030700 JMP IO3 JMP IOBEG IO4 LDA IOW3 TTY I/O OR CARD READER INPUT. LDB PNFLG WE PUNCHING BINARY ON TTY? SZB IOR =B500 YES. SET FUNCTION WORD. IOR B400 NO. SET FUNCTION WORD FOR ASCII. STA IOW3 JMP IOBEG * * NOW BEGIN THE I/O. * IOBEG NOP JSB .IOC. START THE I/O. IOW3 NOP JMP *-2 IOBUF NOP IONUM NOP IOST JSB .IOC. I/O DONE YET? IOW4 OCT 040000 SSA JMP IOST NO, KEEP WAITING. RAL SSA JMP IOER2 CMB,INB SAVE - # OF CHARS LDA SAVA READ IF THIS WAS A READ CPA .+1 OPERATION. STB CRLEN JMP IOSUB,I IOER2 HLT 36B TRANSMISSION ERROR. JMP IOBEG GO TRY AGAIN. SKP * * * THIS ROUTINE GENERATES LEADR ON PUNCH DEVICE * * CALLING SEQUENCE; * JSB LEEDR * LEEDR NOP LDA PCH SZA,RSS JMP LEEDR,I JSB TTYPL LIST AND PUNCH ON TTY? SZA,RSS HLT 52B YES. LET USER TURN ON PUNCH. JSB LEADR DEF *+3 DEF PCH DEF .+12 JSB TTYPL LIST AND PUNCH ON TTY? SZA,RSS HLT 53B YES. LET USER TURN OFF PUNCH. JMP LEEDR,I SKP * 'LOADB' RETURNS IN THE A REG THE BYTE WHOSE * BYTE ADDRESS WAS SPECIFIED IN THE B REG. * BYTE ADDRESS IS UNCHANGED UPON EXIT. * * CALLING SEQUENCE: * B REG SHOULD CONTAIN BYTE ADDRESS OF * BYTE TO BE FETCHED. * JSB LOADB * UPON RETURN, THE BYTE WILL BE IN THE LOW BITS OF * THE A REG. B REG WILL CONTAIN ORIGINAL * BYTE ADDRESS. * * LOADB NOP STB L.000 SAVE BYTE ADDRESS CLE,ERB SET E TO INDICATE HI OR LO BYTE LDA 1,I PICK UP WORD LDB HIMSK PUT HIMASK IN B SEZ WANT HI BYTE? BLF,BLF NO MAKE MASK LO AND 1 ISOLATE BYTE SEZ,RSS IS BYTE HI? ALF,ALF YES SHIFT LO LDB L.000 RESET B JMP LOADB,I EXIT. SKP * * "LOGUN" RETURNS THE BINARY EQUIVALENT OF THE ASCII * LOGICAL UNIT NO. ON A CONTROL CARD. * * CALLING SEQUENCE: * B REG CONTAINING BYTE ADDRESS OF ANY CHAR * AFTER "$" AND BEFORE "=" IN A CONTROL STATEMENT. * A REG DOESN'T MATTER; * JSB LOGUN * * UPON EXIT: A REG WILL CONTAIN BINARY EQUIVALENT OF * LOGICAL UNIT NO., UNLESS OVERFLOW IS SET, IN WHICH * CASE AN ERROR HAS BEEN DETECTED, AND A REG IS * GARBAGE. * NOTE! LOGICAL UNIT NO. MUST BE IN THE RANGE 1 THRU * 74 OCTAL. * LOGUN NOP CLO LDA .EQ. SKIP TO JSB SKPTO EQUALS SIGN. SOC REACH END OF CARD FIRST? JMP LOGUN,I YES, SO ERROR. INB NO. SET NEXT BYTE ADDRESS. LDA SPAC SKIP OVER JSB SKIP BLANKS. SOC REACH END OF CARD? JMP LOGUN,I YES, SO ERROR. CLA CONVERT ASCII LOGICAL UNIT NO. JSB CNVRT (OCTAL NO.) TO BINARY. SOC ANY ERRORS? JMP LOGUN,I YES. STA 1 NO. IS THE NO. OUT OF RANGE? SZA,RSS JMP LOG1 YES. IS 0. SSA JMP LOG1 YES. IS NEG. ADA MB75 SSA,RSS JMP LOG1 YES, IS > 74 OCT. LDA 1 NO, IS OK. PUT IN A REG. JMP LOGUN,I LOG1 STO JMP LOGUN,I SKP * * THIS ROUTINE CONTROLS THE LISTING OF * SOURCE PROGRAM * * CALLING SEQUENCE: * LDA <- # OF CHARS IN SOURCE RECORD IF YOU WANT * TO LIST LINE #-SOURCE RECORD ONLYF * + # OF CHARS IN SOURCE RECORD IF YOU * WANT TO LIST LINE #-OCTAL CODE-SOURCE- * RECORD> * JSB LSTR * * LSTR NOP LDB LIST SUPPRESS SZB,RSS LISTING? JMP LSTR,I YES RETURN SSA,RSS NO. FORMAT 1? JMP LSTR2 * * LIST FORMAT 1 * LSTR1 ADA .M25 YES. ADJUST CHAR STA CLEN COUNT TO INCLUDE LINE NO. AND LDB ABF0 SPACES. CONVERT RBL LINE LDA LINE# NO. JSB DECML TO DECIMAL LDA .+2 OUTPUT LINE. JSB IOSUB DEF LIST DEF OUTBF-1 DEF CLEN JMP LSTR,I RETURN * * LIST FORMAT 2 * LSTR2 ADA .P27 ADJUST LINE CHAR COUNT. CMA,INA TO INCLUDE STA CLEN OTHER STUFF. LDA LINE# CONVERT LINE NO. TO DECIMAL LDB ABF0 AND PUT IN OUTPUT BUFFER. RBL JSB DECML LDA EQUFL IS THIS AN EQU STATEMENT? SZA JMP LST4 YES, SO JUST PRINT IT. LDA INST2 NO. CONVERT ADDR PORTION TO AND HIMSK ABS AND PUT IN ASCII OUTPUT ALF,ALF IOR T.002 BUFFER. LDB ABF0 RBL ADB .+5 JSB OCTL DEC 4 LDA INST2 NOW CONVERT BITS 16-23 OF AND LOMSK MICROINSTRUCTION TO ASCII LDB ABF0 AND PUT IN ASCII OUTPUT RBL BUFFER. ADB .+10 JSB OCTL DEC 3 LDB ABF0 CONVERT BITS 15-0 OF MICRO- RBL INSTRUCTION WORD TO ASCII AND ADB .+14 PUT INTO OUTPUT BUFFER. LDA INST1 JSB OCTL DEC 6 LST4 LDA .+2 OUTPUT THE LINE. JSB IOSUB DEF LIST DEF OUTBF-1 DEF CLEN LINE JMP LSTR,I EXIT. SKP * * 'NOPER' PUTS NOP'S IN THE FIELD WORDS, SO THEY * CAN BE COMBINED TO MAKE A WORD TYPE 1 NOP * MICROINSTRUCTION. * * CALLING SEQUENCE: * JSB NOPER * NOPER NOP * * PUT NOP'S IN THE FIELDS OF A TYPE 1 WORD. * LDA SPNOP 'SPECIAL' NOP STA FLD3 INTO FIELD 3. LDA STNOP 'STORE' NOP STA FLD5 INTO FIELD 5. LDA SBNOP 'S-BUS' NOP STA FLD6 INTO FIELD 6. LDA PASS 'ALU' NOP STA FLD4 INTO FIELD 4. LDA OPNOP 'OPCODE' NOP STA FLD2 INTO FIELD 2. JMP NOPER,I SKP * * "NUM" CONVERTS A FIELD WHOSE STARTING BYTE ADDRESS * IS IN B REG., INTO A BINARY NO. THE NO. * IS RETURNED IN THE A REG. IF ERROR, OVERFLOW * BIT IS SET ON RETURN. * * CALLING SEQUENCE: * LDB * JSB NUM * * UPON RETURN: A REG. CONTAINS THE BINARY NO. * OVERFLOW BIT SET IF ERROR * * ALLOWABLE CONTENTS OF FIELD ARE: *