ASMB,R,L,C,B HED ISA FREQUENCY MEASUREMENT 92413-16001 NAM FREQ,7 92413-16001 REV A 24APR75 ENT FREQ EXT EXEC,#GET!,.ENTR SUP * * * FREQUENCY MEASUREMENT * * CALLING SEQUENCES: * * NORMAL CALL FREQ(NUM,ICHAN,IDATA,IERR) * * OPTION CALL FREQ(NUM,ICHAN,IDATA,IDUR,IERR) * * WHERE: NUM IS THE NUMBER OF READINGS * ICHAN IS A ARRAY OF CHANNEL NUMBERS * IDATA IS THE ARRAY IN WHICH DATA IS TO BE PUT * IDUR IS THE NUMBER OF INCREMENTS FOR THE TIMER CARD * IERR= 1 NORMAL OPERATION * 2 DEVICE ERROR * 3 PARAMETER ERROR * * SOURCE 92413-18001 REV A * RELOC 92413-16001 REV A * * * SKP * * FREQUENCY * FREQ NOP ENTRY CLA FIX ERROR STA IERR ADDRESS LDA FREQ GET RETURN ADDR STA ENTRY AND SAVE IT JMP ENTRY+1 GET CALLING PARAMETERS * * CALLING PARAMETERS * NUM NOP CHAN NOP VALUE NOP IDUR NOP IERR NOP * ENTRY NOP JSB .ENTR FETCH CALLING DEF NUM PARAMETERS * LDA IERR GET ERROR ADDR SZA AND IF NOT ZERO, JMP *+5 SKIP A FEW. LDA IDUR FIX PARAMETERS STA IERR TO DEFAULT LDA ..M1 IDUR TO STA IDUR 1000 * LDA .1 CLEAR ERROR STA IERR,I TO ONE LDA NUM,I MAKE NUM CMA,INA NEGATIVE SSA IF NOW POSITIVE SZA,RSS OR ZERO JMP ERR3 GIVE,ERROR#3 STA NUM SAVE NUMBER OF READINGS * AGAIN LDA CHAN,I GET SLOT AND JSB GET2 UNIT OF CTR CARD * LDA TYPE IF CPA .8 WRONG RSS TYPE JMP ERR3 ERR3 * LDA =B170140 USE UNIT IOR UNIT TO BUILD STA BUFF1 FIRST CNTL WORD XOR =B300 ALSO MAKE INPUT STA BUFF3+3 CONTROL WORD FOR LATER * LDA SLOT PLACE COUNTER STA BUFF1+1 SLOT INTO THE PROPER STA BUFF3+4 BUFFER LOCATIONS SKP * * NOW FIND OUT ABOUT TIMER CARD * CCA ADA REL# GET THE ADA ADR ASSOCIATED TIMER LDA 0,I CHAN NUMBER JSB GET2 GET SLOT AND UNIT * LDA =B170140 BUILD UP SECOND IOR UNIT CNTL WORD STA BUFF1+2 WITH TME = 0 STA BUFF3+1 AND SAVE IN BUFFERS XOR =B300 CHANGE IT TO AN INPUT STA BUFF1+4 STA BUFF2+1 ONE AND SAVE ALSO * LDA IDUR,I GET DURATION CPA .M1 AND IF = -1 LDA .1000 DEFAULT TO 1000 AND M7777 IOR SLOT STICK IN SLOT STA BUFF1+3 AND SAVE IN BUFFER LDA SLOT PLACE TIMER SLOT STA BUFF1+5 STA BUFF2+2 INTO THE PROPER STA BUFF3+2 BUFFER LOCATIONS * * CLEAR COUNTER, START TIMER, ENABLE TIMER FLAG CIRCUITS? * JSB EXEC DEF *+6 DEF .2 DEF LU DEF BUFF1 DEF .6 DEF .1 * AND =B204 SZA,RSS CHECK FOR BAD STATUS BITS SZB,RSS OR ZERO XMISSION LOG JMP ERR2 GIVE DEVICE ERROR * * IS TIMER DONE? * READ JSB EXEC DEF *+6 DEF .1 DEF LU DEF BUFF2 DEF .5 DEF .2 * AND =B204 SZA,RSS CHECK FOR BAD STATUS BITS SZB,RSS OR ZERO XMISSION LOG JMP ERR2 GIVE ERROR 2 * LDA BUFF2+4 IS THE IRQ BIT SSA,RSS SET????? JMP READ NOPE, TRY AGAIN * * DISARM TIMER, READ COUNTER * JSB EXEC DEF *+6 DEF .1 DEF LU DEF BUFF3 DEF .7 DEF .6 * AND =B204 SZA,RSS CHECK FOR BAD STATUS BITS SZB,RSS OR A ZERO XMISSION LOG JMP ERR2 GIVE ERROR 2 LDA BUFF3+6 GIVE THE DATA AND =B137777 STA VALUE,I TO THE CALLER * ISZ CHAN BUMP ISZ VALUE ADDRESSES LDA IDUR,I GET DURATION CPA .M1 IF NEGATIVE RSS SKIP ISZ IDUR OTHERWISE, BUMP POINTER ISZ NUM DONE?? JMP AGAIN JMP ENTRY,I SKP * * GET TABLE VALUES * GET2 NOP JSB #GET! GET TABLE VALUES LU NOP STORAGE TYPE NOP FOR REL# NOP TABLE ADR NOP VALUES SSB ERROR? JMP ERR3 CHAN OUT OF RANGE * CLB ADA .M1 DIV .15 STA UNIT BLF,BLF MOVE SLOT BLF TO MSB'S STB SLOT AND STORE JMP GET2,I * * ERRORS * ERR3 ISZ IERR,I BAD PARAMETER ERR2 ISZ IERR,I DEVICE ERROR JMP ENTRY,I SKP * * CONSTANTS AND THINGS * .M1 DEC -1 .0 DEC 0 .5 DEC 5 .6 DEC 6 .7 DEC 7 .8 DEC 8 .15 DEC 15 .1000 DEC 1000 * M7777 OCT 7777 * UNIT NOP SLOT NOP ..M1 DEF .M1 * * OUTPUT AND INPUT BUFFERS * BUFF1 NOP 170140 WITH CTR UNIT NOP COUNTER SLOT NOP 170140 WITH TMR UNIT NOP TMR SLOT WITH DUR NOP 170240 WITH TMR UNIT NOP TMR SLOT * BUFF2 OCT 2 NOP 170240 WITH TMR UNIT NOP TMR SLOT OCT 1 NOP DATA RETURNED FROM TMR * BUFF3 OCT 4 NOP 170140 WITH TMR UNIT NOP TIMER SLOT NOP 170240 WITH CTR UNIT NOP CTR SLOT .1 OCT 1 NOP DATA RETURNED FORM CTR * .2 EQU BUFF2 * END