**********
* Program 2_TN_PL (6811)
*
* Generates 1000 Hz square wave on output PA6 (OC2) and 440 Hz on PA5 (OC3).
* Also reads switches on I/O Box on Cable #1 and echos to LEDs.
*
* Illustrates the use of two simultaneous output captures while performing
* another function.
*
* Peter H. Anderson, MSU, 5 Nov 90; 18 Jan 93
**********

PSCT            EQU $C000
DSCT            EQU $D000
IDSCT		EQU $D300

STACKTP         EQU $0045

OC2_VECTOR      EQU $00DC
OC3_VECTOR      EQU $00D9

REG_BASE        EQU $1000       * indexed addressing of page $10

PORTB		EQU $04
PORTC		EQU $03
DDRC		EQU $07

TCNT            EQU $0E         * free running 16-bit counter
TOC2            EQU $18         * 16-bit compare pattern
TOC3            EQU $1A
TMSK1           EQU $22
* int mask, OC2, OC3 corresponds to bit 6 and 5
TFLG1           EQU $23
* logic 1 on bit 6 when OC2, bit 5 when OC3
TCTL1           EQU $20         * config of connection to Port A


        ORG PSCT

        SEI
        LDS #STACKTP
        LDY #REG_BASE

	CLR DDRC,Y		* configure for input

        BSET TMSK1,Y %01100000  * set mask for OC_2 and OC_3

        BCLR TCTL1,Y %10100000  * on interrupt, toggle PA6 and PA5
        BSET TCTL1,Y %01010000

* the following 6 statements are not really required
        LDD TCNT,Y              * get the time counter
        ADDD #500*2             * 500 usecs
        STD TOC2,Y              * save in TOC
        LDD TCNT,Y
        ADDD #1136*2            * 1136 usecs
        STD TOC3,Y

L1
        CLI
	LDAA PORTC,Y		* get switches
	STAA PORTB,Y		* output to LEDs
        BRA L1


OC2_INTSERV

        BSET TFLG1,Y %01000000  * clear the interrupt flag

        LDD TOC2,Y              * get the current TOC2
* there is an advantage to doing this rather than fetching TCNT
        ADDD #500*2             * add 500 usecs
        STD TOC2,Y              * save in TOC2

        RTI

OC3_INTSERV

        BSET TFLG1,Y %00100000  * clear the interrupt flag

        LDD TOC3,Y              * get the current TOC3
        ADDD #1136*2            * add 1136 usecs
        STD TOC3,Y              * save in TOC3

        RTI

        ORG OC2_VECTOR

        JMP OC2_INTSERV

        ORG OC3_VECTOR

        JMP OC3_INTSERV

