IDENT MPP,0 PERIPH EJECT * * * INTCHAN EQU 9 * CLOCKCHN EQU 14B * I.POINTS EQU 22B EJECT ORG 0 VFD 12/SETUP-1 * ORG 20B * * DIRECT CELL ASSIGNMENTS * CM0 BSSZ 1 CM1 BSSZ 1 CM2 BSSZ 1 CM3 BSSZ 1 CM4 BSSZ 1 CM5 BSSZ 1 BSSZ 3 SPACE FOR WRITING OUT P COUNTER * X1 BSSZ 1 X2 BSSZ 1 X3 BSSZ 1 SYSSTATE BSSZ 5 INTSTATE BSSZ 4 DATA 3 INTERUPT RUNNING * ORG 100B EJECT * * MASTER CONTRAL LOOP * * ( WILL HANG IN DOINT DURING AN INTERRUPT ) * MLOOP RJM CHKUSER RJM GETCM RJM GETINT RJM MCLOCK RJM QCLOCK RJM CCLOCK RJM DOINT DATA 2500B TURN OFF TRACE UJN MLOOP EJECT * * SEE IF USER HAS COME TO GRIEF * LJM 0 CHKUSER EQU *-1 * USERRA1 LDC 0 CRD CM0 LDD CM3 LPN 77B SHN 12 ADD CM4 ZJN CHKUSER-1 S.USERA = 0 SO DO NOT CHECK ANYTHING ADN 1 CRD CM0 LDD CM4 ADD CM3 ADD CM2 ADD CM1 ADD CM0 NJN CHIP1 RPN NJN CHKUSER-1 * ARITH1 LDC 0 P COUNTER = 0, SIGNAL ARITH ERROR MXN LJM CHKUSER-1 * CHIP1 LDC 0 ( RA + 1 ) .NE. 0 MXN 0 SIGNAL CHIPPAWA UJN CHKUSER-1 EJECT * * GET AN INTERRUPT, IF ANY, FROM CM * LJM 0 GETCM EQU *-1 WAKEUP1 LDC 0 CRD CM0 LDD CM4 ZJN GETCM-1 STD X1 SBN NUMBINTS+1 PJN GETCM-1 LDN 1 STM INTFLAGS,X1 STM INTFLAG LDN 0 STD CM4 WAKEUP2 LDC 0 CWD CM0 UJN GETCM-1 EJECT * * GET AN INTERRUPT, IF ANY, FROM OTHER PPUS * LJM 0 GETINT EQU *-1 EJM GETINT-1,INTCHAN NO REQUEST WAITING IAN INTCHAN STD X2 SBN NUMBINTS+1 PJN GETINT-1 LDN 1 STM INTFLAGS,X2 STM INTFLAG UJN GETINT-1 EJECT * * UPDATE MASTER CLOCK * LJM 0 MCLOCK EQU *-1 IAN CLOCKCHN STM CLOCKNEW SAVE NEW VALUE OF CLOCK SBM CLOCKOLD COMPUTE ELAPSED TIME PJN *+3 ADC 10000B CORRECT FOR WRAP AROUND STM CLOCKINC LDM CLOCKNEW STM CLOCKOLD * CLOCKM1 LDC 0 CRD CM0 GET MASTER CLOCK RJM STEPCLK UPDATE MASTER CLOCK CLOCKM2 LDC 0 CWD CM0 WRITE BACK MASTER CLOCK UJN MCLOCK-1 EJECT * * UPDATE QUANTUM CLOCK * MUST ALWAYS BE SEPERATED FROM LAST CALL BY A * CALL TO MCLOCK * LJM 0 QCLOCK EQU *-1 CLOCKQ1 LDC 0 CRD CM0 GET QUANTUM CLOCK LDD CM0 LMC 4000B ZJN QCLOCK-1 IGNORE ON HIGH BYTE = 4000B LPC 4000B NJN FSWAP1 WAS POS, SO DO NOT STEP RJM STEPCLK STEP CLOCK CLOCKQ2 LDC 0 CWD CM0 RE WRITE QUANTUM CLOCK LDD CM0 LPC 4000B CHECK FOR NEGATIVE VALUE NJN QCLOCK-1 WAS NEGATIVE * FSWAP1 LDC 0 POSITIVE, SO TRY TO SIGNAL SYSTEM MXN 0 UJN QCLOCK-1 EJECT * * UPDATE CHARGE CLOCK * MUST ALWAYS BE SEPERATED FROM LAST CALL BY A * CALL TO MCLOCK * LJM 0 CCLOCK EQU *-1 CLOCKC1 LDC 0 CRD CM0 GET CHARGE CLOCK RJM STEPCLK CLOCKC2 LDC 0 CWD CM0 RE WRITE CHARGE CLOCK UJN CCLOCK-1 EJECT * * THIS CODE CAUSES AN INTERRUPT IF ONE IS DESIRED * LJM 0 DOINT EQU *-1 LDM INTFLAG SEE IF ANY PENDING ZJN DOINT-1 NO LDN 0 STM INTFLAG STD X1 DOINTL AOD X1 SCAN INT FLAGS SBN NUMBINTS+1 PJN DOINT-1 NONE LEFT TO DO LDM INTFLAGS,X1 ZJN DOINTL STM INTFLAG FOUND ONE TO DO * INTLIST1 LDC 0 ADD X1 CRD CM0 GET P COUNTER FOR INTERRUPT LDD CM3 SHN 6 LPC 7700B ADD CM4 NJN DOINTB LDN 0 STM INTFLAGS,X1 LJM DOINT-1 DOINTB EQU * RPN 0 MJN *-1 INTBOX1 LDC 0 CWD CM3 WRITE P COUNTER TO XJ BOX EXN 0 GENERATE XJ FOR INTERRUPT * IAN CLOCKCHN GET CURRENT VALUE OF CLOCK STM CLOCKNEW SBM CLOCKOLD ( ALSO ALLOW SOME TIME TO PASS PJN *+3 BEFORE TEST OF SUCCESSFULL INT ) ADC 10000B STM SPCLOCK SAVE FOR POSSIBLE TIME CORRECTIONS LDN 2 CRD SYSSTATE READ SYSTEM STATE * RPN NJN DOINTC INTBOX3 LDC 0 EXN 0 LJM DOINT-1 THIS INTERRUPT ATTEMPT FAILED * DOINTC LDN 0 STM INTFLAGS,X1 CLEAR THIS INT FLAG LDM CLOCKNEW CORRECT INCREMENTING OG MASTER CLOCK STM CLOCKOLD TO INCLUDE ONLY INTERRUPT TIME LDN 2 CWD INTSTATE WRITE INTERUPT RUNNING STATE * DOINTA LDN 20 STD X1 DOINTA1 EJM DOINTA2,INTCHAN RJM GETINT DOINTA2 RPN 0 FIX GAZE ON P COUNTER NJN *+3 LJM DOINTX DONE WHEN GOES TO ZERO SOD X1 NJN DOINTA1 RJM GETCM KEEP ESSENTIAL ITEMS RJM MCLOCK IN PROGRESS UJN DOINTA * DOINTX EQU * INTBOX2 LDC 0 EXN 0 EXCHANGE BACK RJM MCLOCK ONE FINAL STEP OF MASTER CLOCK FOR LDM CLOCKOLD FOR INTERRUPTS ONLY, FOLLOWED BY SBM SPCLOCK CORRECTION OF OLD TIME TO INCLUDE TIME PJN *+3 IGNORED JUST PREVIOUS TO INTERRUPT ADC 10000B STM CLOCKOLD LDN 2 CWD SYSSTATE RESTRE SYSTEM STATE LJM DOINT-1 * SPCLOCK BSSZ 1 EJECT * * STEP A 60 BIT CLOCK WORD IN CM0 * * * NOTE, ON GOING FROM NEG TO POS VALUES, THERE WILL * BE A 1 MICROSECOND ERROR * * LJM 0 STEPCLK EQU *-1 LDM CLOCKINC RAD CM4 SHN -12 ZJN STEPCLK-1 RAD CM3 SHN -12 ZJN STEPCLK-1 RAD CM2 SHN -12 ZJN STEPCLK-1 RAD CM1 SHN -12 ZJN STEPCLK-1 RAD CM0 UJN STEPCLK-1 * * CLOCKNEW BSSZ 1 CLOCKOLD BSSZ 1 CLOCKINC BSSZ 1 EJECT * * SET UP ABSOLUTE ADDRESSES * SETUP IAN CLOCKCHN STM CLOCKOLD PREVENT HICKUP AT START LDC I.POINTS CRD CM0 LDD CM3 LPN 77B STD CM3 LDD CM4 STM SETUP1+1 LDM SETUP1 LPC 7700B ADD CM3 STM SETUP1 LDC 7777B STD X1 LDC PAIRCNT-2+1 STD X2 * SETUPL SOD X2 LDM PAIRLIST,X2 SBD X1 ZJN SETUPL2 LDM PAIRLIST,X2 STD X1 SETUP1 ADC 0 CRD CM0 LDD CM3 LPN 77B STD CM3 SETUPL2 LDM PAIRLIST+1,X2 STD X3 LDI X3 LPC 7700B ADD CM3 STI X3 LDD CM4 STM 1,X3 SOD X2 PJN SETUPL * ACN INTCHAN * LJM MLOOP EJECT * PAIR MACRO I1,I2 VFD 12/I1 VFD 12/I2 ENDM * * ABSOLUTE ADDRESSES TO BE SET UP * * 1ST NUMBER IS LOCATION RELATIVE TO I.MAST IN CM * OF THE DESIRED ABSOLUTE ADDRESS * PAIRLIST EQU * PAIR 0,CLOCKM1 PAIR 0,CLOCKM2 PAIR 1,CLOCKQ1 PAIR 1,CLOCKQ2 PAIR 2,CLOCKC1 PAIR 2,CLOCKC2 PAIR 3,ARITH1 PAIR 4,CHIP1 PAIR 5,FSWAP1 PAIR 6,INTBOX1 PAIR 6,INTBOX2 PAIR 6,INTBOX3 PAIR 7,USERRA1 PAIR 8,WAKEUP1 PAIR 8,WAKEUP2 PAIR 9,INTLIST1 * PAIRCNT EQU *-PAIRLIST EJECT * * LIST OF INTERRUPT FLAGS * INTFLAG DATA 0 INTFLAGS DATA 0 BSSZ 15 * NUMBINTS EQU *-INTFLAGS-1 * END