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 
                                                                                                                                                                                                                                                        