.TITLE KMC11 ECHO DR11-K INPUT .LIST MEB ;+ ; ; DRECHO ECHO THE INPUT FROM THE DR11-K ; ; AUTHOR THOMAS J. LINSCOMB ; COMPUTATION CENTER ; UNIVERSITY OF TEXAS AT AUSTIN ; AUSTIN, TEXAS 78712 ; ; DATE 830331 ; ; INPUT DR.CSR IS THE STARTING ADDRESS OF THE UNIT TO BE ECHOED ; ; OUTPUT THE INPUT FROM THE DR-11K WILL BE SAMPLED UNTIL AN INTERRUPT ; OCCURS. THE KMC-11 WILL THEN ENTER AN INTERNAL LOOP BUT ; WILL CONTINUE TO RUN. ; ;- .SBTTL SYMBOL DEFINITIONS ; ; DEVICE ADDRESSES. ; DR.CSR = 167740 ; DR11K UNIT 4 CSR DR.INP = DR.CSR+2 ; INPUT REG. DR.OUT = DR.CSR+4 ; OUTPUT REG. ; ; MISC. ; LTICS = ^D2000 ; LATENCY TICKS (.1 SEC.) TIMEXP = 1 ; BRG OFFSET FOR TIME EXPIRED .SBTTL INITIALIZATION INIT: BRWRTE IMM,034 ; OUTBA17,OUTBA16, CLOCK OUT BR,SELB,OBR ; SET MISC. REG. BRWRTE IMM,0 ; SET UP THE SP'S SP BR,SELB,SP1 ; OLD INPUT - LOW BYTE SP BR,SELB,SP2 ; HIGH BYTE SP BR,SELB,SP3 ; NEW INPUT - LOW BYTE SP BR,SELB,SP4 ; HIGH BYTE BRWRTE IMM,LTICS SP BR,SELB,SP5 ; LATENCY CLOCK TICKS BRWRTE IMM, ; LAT. HIGH BYTE SP BR,SELB,SP6 ; ; CLEAR THE DR11 CSR ; BRWRTE IMM,DR.CSR ; DR11 CSR OUT BR,SELB,OBA1 ; LOW BYTE OF ADDRESS BRWRTE IMM, ; GET HIGH BYTE OUT BR,SELB,OBA2 ; MOVE HIGH BYTE BRWRTE IMM,0 ; CLEAR CSR OUT BR,SELB,OUTDA1 ; NPR HIGH AND OUT BR,SELB,OUTDA2 ; -- LOW BYTE =0 BRWRTE IMM,021 ; OUT NPR ! NPR RQ OUT BR,SELB,ONPR ; ISSUE NPR REQUEST INIT1: BRWRTE IBUS,NPR BR0 INIT1 ; NPR STILL IN PROGRESS BRWRTE IMM, ; HIGH BYTE OF DR11K ADRESS OUT BR,SELB,IBA2 ; INPUT ! CSR ; ; READ THE CSR TO DETECT AN INTERUPT. ; RDCSR: BRWRTE IMM,DR.CSR ; SET UP LOW BYTE FOR CSR OUT BR,SELB,IBA1 BRWRTE IMM,15 ; INBA17!INBA16!NPR RQ OUT BR,SELB,ONPR RDCSR1: BRWRTE IBUS,NPR ; NPR - READ COMPLETE ? BR0 RDCSR1 ; NO ; ; LOW BYTE OF THE DR11-K CSR IS NOW IN INDAT1. IF BIT SEVEN IS ; SET THE INTERRUPT BOTTON HAS BEEN PRESSED AND THE PROGRAM SHOULD ; EXIT. ; BRWRTE IBUS,INDAT1 ; LOW CSR TO BRG BR7 EXIT ; INTERRUPT SET -EXIT ; ; NOW GO OUT AND READ THE INPUT DATA ; BRWRTE IMM,DR.INP ; LOW BYTE FOR INPUT OUT BR,SELB,IBA1 BRWRTE IMM,15 ; INBA17!INBA16!NPR RQ OUT BR,SELB,ONPR ; READ DR11K INPUT ; ; MOVE SP3 TO SP1 AND SP4 TO SP2. MAKING SP1 AND SP2 THE LAST ; INPUT RECIEVED ; BRWRTE SELA,SP3 ; LOW BYTE SP BR,SELB,SP1 BRWRTE SELA,SP4 ; HIGH BYTE SP BR,SELB,SP2 20$: BRWRTE IBUS,NPR ; NOW WAIT FOR NPR BR0 20$ ; INPUT NOT FINISHED SPBR IBUS,INDAT1,SP3 ; LOW BYTE TO BRG AND SP3 SP IBUS,INDAT2,SP4 ; HIGH BYTE TO SP4 COMP BR,SP1 ; NEW INPUT = TO SP Z 30$ ; .EQ. ALWAYS DROUT ; .NE. -UPDATE THE OUTPUT 30$: BRWRTE SELA,SP4 ; NOW CHECK HIGH BYTE COMP BR,SP2 Z WATE ; .EQ. ; .NE. ; ; THE INPUT FROM THE DR11K IS NOT THE SAME AS LAST READ SO THE ; OUTPUT HAS TO BE UPDATED. ; DROUT: OUT IBUS,INDAT1,OUTDA1 ; LOW BYTE OUT IBUS,INDAT2,OUTDA2 ; HIGH BYTE BRWRTE IMM,DR.OUT ; DR11K OUTPUT ADDRESS OUT BR,SELB,OBA1 ; LOW BYTE BRWRTE IMM,21 ; OUT NPR!NPR RQ OUT BR,SELB,ONPR ; WRITE IT OUT ; ; NOW LETS WAIT A FEW CLOCK TICKS SO WE DON'T SUCK THE SYSTEM ; BUS DOWN. ; WATE: CALLSB SP17,TCB ; TEST CLOCK BIT CALLSB SP17,DLC ; DECREMENT LATENCY COUNTER BR0 RDCSR ; TIME EXPIRED ALWAYS WATE ; STILL MORE WAITING ; ; COME HERE TO EXIT - KMC WILL LOOP SETTING AND WAITING FOR TICS ; EXIT: CALLSB SP17,TCB ; HANG KMC IN ALWAYS EXIT ; WAITING LOOP .PAGE .SBTTL SUBROUTINES FOR WAITING ;; TCB - TEST CLOCK BIT. ; ; WAIT UNTIL TIMER EXPIRES. THEN RESTART IT AND RETURN. ; ; ENTRY: SP17 = RETURN REGISTER ; TCB: SPBR IBUS,UBBR,SP0 ; READ CLOCK STATUS BR4 TCB1 ; IF TIMER EXPIRED ALWAYS TCB TCB1: BRWRTE IMM,034 ; MASK CLOCK AND OUT BA'S SP BR,AANDB,SP0 OUT SELA,OBR ; START CLOCK AGAIN RTNSUB SP17,P0 ;; DLC - DECREMENT LATENCY COUNTER ; ; ENTRY: SP5, SP6 = LATENCY TICS ; SP17 = RETURN REGISTER ; EXIT: COUNTER DECREMENTED, IF COUNTER EQUALS ZERO ; BRG BIT0 SET TO 1 OTHER WISE CLEARED. ; DLC: SP DECA,SP5 ; DECREMENT LOW BYTE C DLC1 ; IF NO CARRY SP DECA,SP6 ; DECREMENT HIGH BYTE C DLC1 ; IF NO CARRY BRWRTE IMM,LTICS ; RESET COUNTER SP BR,SELB,SP5 BRWRTE IMM, SP BR,SELB,SP6 BRWRTE IMM,TIMEXP RTNSUB SP17,P0 ; RETURN WITH TIME EXPIRED DLC1: BRWRTE IMM,0 RTNSUB SP17,P0 ; MORE TIME LEFT .PAGE .SBTTL BRKPNT NBRKS = 8. .SAV=. .=START+<<1024.->*2> $NBRKS=0 .REPT NBRKS .IRP $$NBRK,<\$NBRKS> OUT IMM,$$NBRK*20+1,OMAIN ALWAYS . $NBRKS=$NBRKS+1 .ENDM .ENDM .=.SAV .END