LDA CHNUM GET CHANNEL # ADA .4 ADD 4 TO IT STA CHNUM SAVE NEW # LDA DMP01 LOAD DMA COMMAND JSB SETCH ADD NEW CHANNEL # STA DMP01 REPLACE DMA COMMAND LDA DMP10 LOAD DMA COMMAND JSB SETCH ADD NEW CHANNEL # STA DMP10 REPLACE DMA COMMAND LDA DMP11 LOAD DMA COMMAND JSB SETCH ADD NEW CHANNEL # STA DMP11 REPLACE DMA COMMAND LDA WTDM2 LOAD DMA COMMAND JSB SETCH ADD NEW CHANNEL # STA WTDM2 REPLACE DMA COMMAND * END OF DMA INITALIZATION * ISZ DMAUP ADJUST TO START ADDRESS LDA DMAUP,I GET STARTING ADDRESS STA DMUP1 SAVE IT ISZ DMAUP LDA DMAUP,I GET WORD COUNT SZA,RSS IS IT ZERO? LDA BFMAX YES-LOAD MAXIMUM BUFFER SIZE STA DMPW SAVE WORD COUNT CMA,INA MAKE IT NEGATIVE STA DMPCT SAVE IT ISZ DMAUP ADJUST RETURN FOR POSSIBLE ERROR LDA CWDMA GET DMA CONTROL WORD DMP01 OTA CHAN+4 OUTPUT CONTROL WORD DMP02 CLC CHAN SETUP THE DMA BUFFER ADDRESS LDA DMUP1 GET BUFFER ADDRESS DMP03 OTA CHAN OUTPUT THE ADDRESS TO DMA DMP04 STC CHAN SETUP THE DMA WORD COUNT * CHECK FOR DMA * CCA CHECK FOR DMA DMP12 OTA CHAN OUTPUT MASK DMP13 LIB CHAN LOAD MASK COMPLEMENT SZB NO DMA IF B=0 JMP DMP17 YES-CONTINUE JSB CLEAR CLEAR CONTROLLER JSB ERMS,I REPORT NO DMA DEF E157 POINTER TO MESSAGE JMP DMAUP,I ABORT-ERROR EXIT E157 EQU * ASC 06,E157 NO DMA/ DMP17 EQU * CMB PATCH FOR 2114/15/16 DMA STB DMASK SAVE IT * END OF DMA CHECK LDA DMPCT GET BUFFER LENGTH DMP05 OTA CHAN OUTPUT NEG WORD COUNT TO DMA * * DMA SETUP COMPLETE * SETUP FOR A READ OR WRITE LDA ..1MG LOAD BIT 15 MASK LDB DMUP1 GET BUFFER STARTING ADDRESS AND B IS BIT 15 SET? SZA,RSS JMP DMP06 NO-SETUP WRITE LDA .RRF YES-SETUP READ JMP DMP07 GOTO READ ROUTINE DMP06 EQU * LDA .WCC SETUP WRITE INSTRUCTION DMP07 EQU * ADA .LDB STA DMP08 STORE IT DMP08 LDB RRF LOAD READ/OR WRITE COMMAND JSB OCMMD OUTPUT READ COMMAND DMP09 STC DATA,C SET THE DATA TRANSFER DMP10 STC CHAN+4,C START DMA LDA DTA GET SELECT CODE OF TRAP CELL JSB INTJB,I LOAD TRAP CELL WITH JSB DEF TCDAT BASE PAGE LINK DEF .DATI DESTINATION OF JSB JSB WTDMA WAIT FOR DMA TRANSFER DMP11 CLC CHAN+4,C TURN OFF DMA JSB FLGWT WAIT FOR COMMAND FLAG DMP20 EQU * JSB CLRCH CLEAR ALL FLAGS JSB LDINT,I FILL TRAP CELL WITH ERROR MSG DMP14 LIB CHAN LOAD DMA WORD COUNT SZB,RSS IS IT ZERO? JMP DMP15 YES-DMA COMPLETE ADB DMASK ADB DMPW NO-COMPUTE WORD COUNT STB DMPW SAVE WORD COUNT DMP15 EQU * LDA DMPW STA INBFL SAVE INPUT BUFFER LENGTH LDA MSKEF JSB BITCK IS EOF BIT SET? JMP DMP19 YES-EXIT JSB STATS GET STATUS AND MSKIO ISOLATE I/O ERROR BITS SZA ANY I/O ERRORS? JMP DMAUP,I YES-ERROR RETURN DMP19 EQU * ISZ DMAUP OK-GO TO NORMAL RETURN JMP DMAUP,I EXIT * DMP24 EQU * JSB CLEAR CLEAR CONTROLLER JSB DATFG REPORT NO DATA FLAG JMP DMAUP,I ERROR EXIT * ..1MG EQU MSKDN CHAN EQU 2 DMA CHANNEL SET TO DMA CHANNEL 1 CWDMA EQU SW13 CHNUM NOP 1 OR 2 CHANNEL DMUP1 NOP BUFFER STARTING ADDRESS DMPCT NOP DMA WORD COUNT DMPW NOP DMA WORD COUNT (POSITIVE) MSKLS OCT 177770 MASK OFF LSD * * WTDMA_WAITS FOR DMA FLAG AND * STORES THE TRANSFER TIME IN DTIME *CALL: * JSB WTDMA * * WTDMA NOP CLA SET UP MILLI-SEC COUNTER STA DTIME CLEAR TRANSFER TIME COUNTER LDB .ME3 SETUP TIME OUT COUNTER FOR 1 SEC. STB WTDM1 WTDM2 EQU * SFC CHAN+4 IS DMA FLAG SET? JMP WTDM3 YES-EXIT WTDM4 EQU * SFC CMMD IS THE COMMAND FLAG SET? JMP DMP20 YES-EXIT LDA .1 NO-CHECK FOR TIME OUT JSB TMRR,I GO WAIT FOR 1 MILLI-SEC ISZ DTIME INCREMENT TIME TRANSFER COUNT ISZ WTDM1 INCREMENT TIME OUT COUNTER JMP WTDM2 NO TIME OUT-GO CHECK FLAG JSB CLEAR TIME OUT-CLEAR CONTROLLER JSB ERMS,I REPORT DMA FLAG LOST DEF E163 POINTER TO MESSAGE JMP WTDM3 JUMP OVER MESSAGE * E163 EQU * ASC 10,E163 LOST DMA FLAG/ WTDM3 EQU * JMP WTDMA,I EXIT * WTDM1 NOP TIME OUT COUNTER * SETCH - SETUP CHANNEL NUMBER IN DMA CMDS. *CALL: * JSB SETCH * * SETCH NOP AND MSKLS MASK OFF CHANNEL # ADA CHNUM ADD NEW CHANNEL # JMP SETCH,I RETURN * * * * * * RWSLO - REWINDS TAPE UNIT TO LP AND CHECKS FOR * LP ONLY STATUS * NOTE: SLOW REWIND USING BSR COMMAND *CALL: * JSB RWSLO (P ) * JMP ERROR RETURN (P+1) * NORMAL RETURN(P+2) * RWSLO NOP JSB BSRWO BSR TO REACH LP RWSL1 SFC CMMD IS IT FINISHED? JMP RWSL2 YES-GO CHECK LP LDA MSKOL NO- CHECK FOR OFF-LINE JSB BITCK IS UNIT OFF-LINE? JMP RWSL3 YES-GO REPORT ERROR JMP RWSL1 NO- GO CHECK COMMAND FLAG RWSL2 EQU * JSB BSRWF BACK SPACE TO LP LDA MSKLP IS UNIT AT LP? JSB BITCK JMP RWSL4 YES-OK TO EXIT JMP RWSL1 NO-GO BSR AGAIN RWSL3 EQU * LDB MSKLP SETUP EXPECTED STATUS JSB ERMS,I REPORT UNIT OFF-LINE DEF E140 * JMP RWSLO,I GO TO ERROR RETURN RWSL4 EQU * ISZ RWSLO ADJUST RETURN FOR NORMAL EXIT JMP RWSLO,I EXIT * * * * SUBROUTINE ALLCP- COMPARES EACH ON-LINE UNIT * - TO CONTENTS OF INPUT BUFFER *CALL: - (CLEARS INPUT BUFFER AND READS A RECORD) * JSB ALLCP * * ALLCP NOP CLA STA UNITX TEMPORARY UNIT NUMBER ALCP1 EQU * JSB UNISL GOTO SELECT UNIT ROUTINE JMP ALCP2 OFF-LINE RETURN JSB .CLBF,I CLEAR INPUT BUFFER JSB SIOR,I READ A RECORD JSB COMPR COMPARE INPUT AND OUTPUT BUFFERS ALCP2 EQU * LDA UNITX GET CURRENT UNIT # INA INCREMENT UNIT # STA UNITX SAVE IT CPA .4 IS IT LAST UNIT? JMP ALCP3 YES-EXIT ROUTINE JMP ALCP1 NO-GO TRY NEXT UNIT ALCP3 EQU * JMP ALLCP,I EXIT * * * SUBROUTINE ALLRW- REWINDS ALL UNITS * *CALL: * JSB ALLRW * ALLRW NOP CLA STA ARW01 CURRENT UNIT NUMBER ARW02 EQU * JSB UNISL GOTO SELECT UNIT SUBROUTINE JMP ARW03 OFF-LINE RETURN JSB LPREW REWIND TO LOAD POINT ARW03 EQU * LDA ARW01 GET CURRENT UNIT # INA INCREMENT UNIT # STA ARW01 SAVE IT CPA .4 IS IT THE LAST UNIT? JMP ALLRW,I YES-EXIT JMP ARW02 NO-GOTO NEXT UNIT * ARW01 NOP UNIT NUMBER * * * SUBROUTINE ALLWR- WRITES OUTPUT BUFFER ON ALL UNITS * *CALL: * JSB ALLWR * ALLWR NOP CLA STA AWR01 CURRENT UNIT NUMBER AWR02 EQU * JSB UNISL GOTO SELECT UNIT SUBROUTINE JMP AWR03 OFF-LINE RETURN JSB SIOW,I WRITE A RECORD AWR03 EQU * LDA AWR01 GET CURRENT UNIT # INA INCREMENT UNIT # STA AWR01 SAVE IT CPA .4 IS IT THE LAST UNIT? JMP ALLWR,I YES-EXIT JMP AWR02 NO-GOTO NEXT UNIT AWR01 NOP * * * * * * * SUBROUTINE CLRBF - ROUTINE CLEARS INPUT BUFFER *CALL: * JSB CLRBF * * CLRBF NOP LDA FWAM GET FIRST WORD OF AVAILABLE MEMORY ADA BUFLG COMPUTE FW OF INPUT BUFFER STA TMP1 STORE INPUT BUFFER ADDRESS LDA LWAM GET LAST WORD AVAILABLE LDB .M1 ADA B GET LAST WORD - 1 STA TMP2 CBF01 EQU * CLA STA TMP1,I PUT ZERO IN LOCATION ISZ TMP1 INCREMENT POINTER LDA TMP2 LOAD LAST WORD AVAILABLE CPA TMP1 IS POINTER=LWA JMP CLRBF,I YES-EXIT JMP CBF01 NO-LOOP * * * * * INTERRUPT ROUTINES * * TCJMP- PUT JMP INSTRUCTION IN TRAP CELL *CALL: * LDA * JSB TCJSB * DEF
* DEF * * *INDIRECT CALL USE: * JSB INTJB,I * TCJSB NOP STA TCJS1 SAVE TRAP CELL SELECT CODE LDA JSBI GET JSB INSTRUCTION AND MKADD MASK OFF ADDRESS ADA TCJSB,I ADD ON NEW ADDRESS STA TCJS1,I PUT IT IN TRAP CELL LDB TCJSB,I GET ADDRESS OF BASE PAGE LINK ISZ TCJSB ADJUST POINTER TO NEXT PARAMETER LDA TCJSB,I GET DESTINATION OF JSB STA B,I PUT IT IN BASE PAGE LINK ISZ TCJSB SKIP OVER ADDRESS-ADJUST RETURN JMP TCJSB,I RETURN TO CALLER * TCJS1 NOP TRAP CELL SELECT CODE * * * * INTON- TURN ON INTERRUPTS *CALL: * JSB INTON,I * * .INTN NOP CCA SET INTERRUPT FLAG STA FGINT JSB CLRCH CLEAR DMA,COMMAND, AND DATA CHANNELS STF INTP TURN ON INTERRUPT SYSTEM JMP .INTN,I RETURN TO CALLER * * * INTOF- TURN OFF INTERRUPTS *CALL: * JSB INTOF,I * * .INTF NOP CLA CLEAR INTERRUPT FLAG STA FGINT CLF INTP TURN OFF INTERRUPTS JMP .INTF,I RETURN TO USER * * * * * CMMDI- REPORT INTERRUPT ERROR ON * COMMAND CHANNEL *CALL: * JSB CMMDI,I * .CMDI NOP JSB CMDSV SAVE THE A AND B REG CLB SETUP EXPECTED STATUS JSB ERMS,I REPORT COMMAND INTERRUPT ERROR DEF E160 JSB CMDRS RESTORE A AND B REG JMP .CMDI,I RETURN TO CALLER * * CMDSV NOP STA CDSV1 SAVE THE A REG STB CDSV2 SAVE THE B REG JMP CMDSV,I EXIT ROUTINE * CMDRS NOP LDA TSTN GET CURRENT TEST # CPA .37 IS IT OP DESIGN? JMP .IRQ,I YES-EXIT LDA CDSV1 LDB CDSV2 RESTORE A AND B REG JMP CMDRS,I EXIT ROUTINE * * CDSV1 NOP CDSV2 NOP * * DATAI-REPORT INTERRUPT ERROR ON * DATA CHANNEL * *CALL: * JSB DATAI,I * .DATI NOP JSB CMDSV SAVE THE A AND B REG CLB SETUP EXPECTED STATUS JSB ERMS,I REPORT DATA INTERRUPT ERROR DEF E161 JSB CMDRS RESTORE A AND B REG JMP .DATI,I RETURN TO CALLER * * * DMAI- REPORT INTERRUPT ERROR ON * DMA CHANNEL *CALL: * JSB DMAI,I * .DMAI NOP CLB SETUP EXPECTED STATUS JSB CMDSV SAVE THE A AND B REG JSB ERMS,I REPORT DMA INTERRUPT ERROR DEF E162 JSB CMDRS RESTORE A AND B REG JMP .DMAI,I RETURN TO CALLER * E160 EQU * ASC 09,E160 COMMAND INT/ E161 EQU * ASC 07,E161 DATA INT/ * SKP ORG PAG14 LST * SKIP TO NEXT PAGE OF MEMORY ******************************** E162 EQU * ASC 07,E162 DMA INT/ * * * LDINT-LOADS ALL INTERRUPT CHANNELS * (COMMAND,DATA,AND DMA) WITH * ERROR MESSAGES *CALL: * JSB LDINT,I * * .LDIT NOP LDA CMD GET SELECT CODE OF COMMAND CH JSB INTJB,I GO INSERT JSB IN TRAP CELL DEF TCCMD BASE PAGE LINK DEF .CMDI ADDRESS OF SUBROUTINE LDA DTA GET SELECT CODE OF DATA CH JSB INTJB,I GO INSERT JSB IN TRAP CELL DEF TCDAT BASE PAGE LINK DEF .DATI ADDRESS OF SUBROUTINE LDA .LDI1 GET ADDRESS OF DMA CHANNEL JSB INTJB,I GO INSERT JSB IN TRAP CELL DEF TCDA1 BASE PAGE LINK DEF .DMAI ADDRESS OF SUBROUTINE LDA .LDI1 INA GET ADDRESS OF DMA CHANNEL JSB INTJB,I GO INSERT JSB IN TRAP CELL DEF TCDA2 BASE PAGE LINK DEF .DMAI ADDRESS OF SUBROUTINE JMP .LDIT,I EXIT * .LDI1 DEF CHAN+4 * * * * RDGAP-ISSUES A RFF COMMAND AND WAITS FOR FIRST * DATA FLAG THEN CLEARS IT. * CALL: * JSB RDGAP * P+1 * P+2 * RDGAP NOP LDB RFF GET RFF COMMAND JSB OCMMD OUTPUT THE COMMAND RGP01 STC DATA,C SETUP DATA TRANSFER CLB SETUP TIME OUT COUNTER RGP02 SFC DATA IS DATA FLAG SET? JMP RGP03 YES-EXIT ROUTINE INB,SZB NO-HAS COUNTER TIMED OUT JMP RGP02 NO-GO CHECK FLAG AGAIN JSB CLEAR YES-CLEAR CONTROLLER JSB DATFG REPORT NO DATA FLAG JMP RDGAP,I ERROR EXIT RGP03 CLF DATA CLEAR DATA FLAG ISZ RDGAP SETUP FOR NORMAL RETURN JMP RDGAP,I EXIT * * DCODE-UPDATES RECORD COUNT * RECNO IS SET TO ZERO WHENEVER BOT OCCURS * *CALL: * JSB DCODE,I * * .DCOD NOP LDA MSKLP JSB BITCK IS IT AT BOT? JMP DCOD1 YES-CLEAR RECORD COUNT JMP DCOD2 NO-GO DECODE THE COMMAND DCOD1 EQU * CLA STA RECNO CLEAR RECORD COUNTER DCOD2 EQU * LDA OCMD4 GET THE LAST COMMAND AND BSR CHECK FOR 41 CODE CPA BSR IS IT A REVERSE COMMAND? JMP DCOD3 YES-GO DECREMENT REC NO. JMP DCOD4 NO-GO CHECK FORWARD MOTION * DCOD3 EQU * LDA RECNO GET RECORD NUMBER SZA SKIP IF RECORD COUNT =0 ADA .M1 SUBTRACT A RECORD STA RECNO UPDATE RECORD COUNTER JMP DCOD9 EXIT DCOD4 EQU * LDA OCMD4 GET LAST COMMAND AND .3 ISOLATE FORWARD MOTION BITS CPA .3 IS IT FORWARD MOTION? JMP DCOD8 YES-INCREMENT COUNTER LDA OCMD4 NO-GET LAST COMMAND AND .09D ISOLATE WRITE COMMAND BITS CPA .09D IS IT A WRITE COMMAND? DCOD8 EQU * ISZ RECNO YES-INCREMENT RECORD COUNTER NOP DCOD9 EQU * JMP .DCOD,I EXIT ROUTINE * * * * EXTENDED ERROR MESSAGE ROUTINE * .ERMS NOP STA .ER17 SAVE REGISTERS-STATUS STB .ER18 -EXPECTED STATUS LDA FGINT LOAD INTERRUPT SYS ON FLAG STA INTFG SAVE INTERRUPT FLAG LDA .ERMS,I GET POINTER TO ERROR MSG STA .ER01 SAVE IT FOR ERROR MESSAGE ISZ .ERMS ADJUST RETURN LDA ERSKP LOAD ERROR MSG SKIP FLAG SZA IS IT SET? JMP .ERMS,I YES-EXIT SUBROUTINE * LDB SW11 GO CHECK SWITCH 11 JSB SWRC,I IS IT SET? JMP .ER15 YES-DO NOT OUTPUT MESSAGE LDA TST0F GET TEST 0 FLAG SZA IS IT TEST 0? JMP .ER15 YES-DELETE MESSAGES JSB STATS GET STATUS STA .ER14 SAVE STATUS LDA FG183 LOAD 13183 FLAG SZA,RSS IS IT A 13183? JMP .ER05 NO-SKIP OVER UNIT ID SETUP LDA .ER18 LOAD A WITH EXPECTED STATUS LDB UNIT GET THE UNIT NUMBER BLF,BLF MOVE UNIT # TO BITS 13-14 RBL,BLF ADB MSKDN ADD DENSITY BIT IOR B ADD ID TO EXPECTED STATUS STA .ER18 RESTORE EXPECTED STATUS .ER05 EQU * * BEGIN SETUP FOR NON ERROR MESSAGES LDA UNIT LOAD CURRENT UNIT # STA .ER02 SAVE IT LDA RECNO LOAD CURRENT RECORD # STA .ER03 SAVE IT LDA OCMD4 GET THE LAST COMMAND EXECUTED STA .ER04 SAVE IT LDA .ER18 GET EXPECTED STATUS STA EXPST SAVE IT ON BASE PAGE JSB INTOF,I TURN OFF THE INTERRUPT ROUTINE * BEGIN MESSAGE OUTPUT ROUTINE JSB MS,I OUTPUT MESSAGE-CURRENT UNIT DEF .ER07 RETURN DEF .ER08 POINTER TO MESSAGE .ER02 NOP CURRENT UNIT H154 EQU * .ER08 EQU * ASC 06,H154 UNIT #/ .ER07 EQU * JSB MS,I OUTPUT MESSAGE-RECORD NUMBER DEF .ER09 RETURN DEF H102 POINTER TO MESSAGE .ER03 NOP CURRENT RECORD NUMBER H102 EQU * ASC 07,H102 RECORD #/ .ER09 EQU * JSB MS,I OUTPUT MESSAGE-COMMAND DEF .ER11 RETURN DEF .ER12 POINTER TO MESSAGE .ER04 NOP LAST EXECUTED COMMAND H054 EQU * .ER12 EQU * ASC 08,H054 COMMAND #/ .ER11 EQU * LDA .ER14 GET STATUS IN A REGISTER JSB FMT03 GO OUTPUT MESSAGE DEF H155 POINTER TO MESSAGE JMP .ER13 JUMP OVER MESSAGE H155 EQU * ASC 11,H155 STATUS IS _ .ER13 EQU * LDA .ER18 LOAD A WITH EXPECTED STATUS JSB FMT03 OUTPUT THE MESSAGE DEF H1551 POINTER TO MESSAGE JMP .ER15 JUMP OVER MESSAGE H1551 EQU * ASC 11,H155 AND SHOULD BE _ .ER15 EQU * * ERROR MESSAGE LDA SUBTS GET CURRENT SUBTEST # ALF,ALF MOVE TO UPPER BYTE ADA TSTN LOAD CURRENT TEST # IN LOWER BYTE LDB .ER14 LOAD CURRENT STATUS JSB .ZERM,I REPORT ERROR .ER01 NOP LDA INTFG LOAD THE INTERRUPT FLAG SZA IS IT SET? JSB INTON,I YES-TURN IT BACK ON LDB SW09 CHECK SWITCH REG. BIT 9 JSB SWRC,I IS IT SET? JMP .ER16 YES-GO CHECK RETURN LDA .ER17 RESTORE A AND B REGISTER LDB .ER18 JMP .ERMS,I EXIT ROUTINE .ER16 EQU * LDA TSTN GET THE CURRENT TEST # CPA .37 IS IT OPDSN? JMP .IRQ,I YES-EXIT TO OPDSN JMP .ZUSR,I EXIT TO HALT 75 * * .ER17 NOP A REG CONTENTS .ER18 NOP B REG CONTENTS .ER14 NOP CURRENT STATUS * * SUBROUTINE FMT02-SETUP FOR CALL TO FMTR * *CALL: * JSB .FMT2,I INDIRECT CALL * DEF * * FMT02 NOP LDB FMT02,I GET MESSAGE ADDRESS ISZ FMT02 ADJUST RETURN CLA,CLE SETUP FOR OUTPUT JSB FMTR,I OUTPUT THE MESSAGE JMP FMT02,I EXIT * * * SUBROUTINE FMT03-SETUP FOR CALL TO FMTR WITH A # * *CALL: * LDA <# FOR MESSAGE> * JSB .FMT3,I INDIRECT CALL-OUTPUT THE MESSAGE * DEF * * * * FMT03 NOP STA FM01 SAVE OCTAL NUMBER OUTPUT LDB SW10 CHECK SWITCH 10 JSB SWRC,I IS IT SET? JMP FM08 YES-SKIP OVER MESSAGE LDA FMT03,I GET ADDRESS OF MESSAGE STA FM03 SAVE IT ISZ FMT03 ADJUST RETURN JSB FMT02 OUTPUT THE MESSAGE FM03 NOP POINTER TO MESSAGE CLE CLEAR THE E REGISTER JSB BINC OUTPUT BIT 15 OF # LDA .M5 SET UP BIT COUNTER STA COUNT FM04 EQU * JSB FMT02 OUTPUT A SPACE DEF FMTSP POINTER TO MESSAGE JSB BINC OUTPUT THE #'S BITS JSB BINC -THREE IN A ROW