************
* Program STEP_1 (6811)
*
* Moves stepping motor in direction determined by S7.
* Speed is controlled by switches S6-S0.
*
* Note that index register is used to get patterns rather than
* the technique used in the Lab 3 exercise.
*
* P. H. Anderson, 16 Oct 90; 14 Oct '91; 15 Jan 93
**************

PSCT    EQU $C000
DSCT    EQU $D000
IDSCT	EQU $D300

STACKTP 	EQU $0045
REG_BASE	EQU $1000

PORTB   EQU $04
PORTC   EQU $03
DDRC    EQU $07

        ORG PSCT

        LDS #STACKTP
	LDY #REG_BASE
        CLR DDRC,Y

	LDX #PATS

AGAIN
        LDAA PORTC,Y              * read switches
        STAA SWITCHES
        ANDA #$80               * ms bit
        BEQ L1                  * if zero then cw
        BRA L2                  * otherwise ccw

L1      BSR CW
        BRA AGAIN

L2      BSR CCW
        BRA AGAIN

CW
* subr - to turn cw increase adr of pattern, if at PATS+8 set back to
* PATS.

        INX             * next adr
        CPX #PATS+8
        BNE ARND_1      * if at PATS + 8 reset to PATS
        LDX #PATS
ARND_1
        LDAA 00,X
        STAA PORTB,Y
        BSR TIME
        RTS

CCW
* subr - to turn ccw decrease adr of pattern, if at PATS-1 set back to
* PATS+7.

        DEX             * next adr
        CPX #PATS-1
        BNE ARND_2      * if at PATS -1 reset to PATS+7
        LDX #PATS+7
ARND_2
        LDAA 00,X
        STAA PORTB,Y
        BSR TIME
        RTS

TIME
        PSHX		* uses nested loop
        PSHA
	LDAA SWITCHES
	ANDA #$7F
T2
        LDX #5000
T1
        NOP
        DEX
        BNE T1
        DECA
        BNE T2

        PULA
        PULX
        RTS

        ORG DSCT

SWITCHES        RMB 1

	ORG IDSCT

PATS            FCB $01, $03, $02, $06, $04, $0C, $08, $09
