******
** LOCK_1.ASM  (68HC11)
**
** Comination lock.
**
** Combination is $0F $70
**
** When S7 at zero, user keys in number on the lower switches.
** When ready, user switches S7 to 1 and back to zero.  Number on 7
** lower switches read.  If in agreement, goes to second number.
** If wrong, returns to start again.
**
**
** P. H. Anderson, MSU, 6 Feb 93
*******

PSCT            EQU $C000
DSCT            EQU $D000
IDSCT           EQU $D300

REG_BASE        EQU $1000

PORTB   EQU $04
PORTC   EQU $03
DDRC    EQU $07

        ORG PSCT

        LDY #REG_BASE
        CLR DDRC,Y      * portc configured as input

FIRST
        BCLR PORTB,Y %11111111
        BSET PORTB,Y %00000001  * prompt for first number
WAIT_1A
        BRCLR PORTC,Y %10000000 WAIT_1A
        BSR DELAY
WAIT_1B
        BRSET PORTC,Y %10000000 WAIT_1B
        BSR DELAY

FIRST_TST_1
        BRSET PORTC,Y %00001111 FIRST_TST_0  * $0F
        BRA FIRST
FIRST_TST_0
        BRCLR PORTC,Y %01110000 SECOND
        BRA FIRST

SECOND
        BCLR PORTB,Y %11111111
        BSET PORTB,Y %00000010 * prompt for second
WAIT_2A
        BRCLR PORTC,Y %10000000 WAIT_2A
        BSR DELAY
WAIT_2B
        BRSET PORTC,Y %10000000 WAIT_2B
        BSR DELAY

SECOND_TST_1
        BRSET PORTC,Y %01110000 SECOND_TST_0   * $70
        BRA FIRST
SECOND_TST_0
        BRCLR PORTC,Y %00001111 SUCCESS
        BRA FIRST

SUCCESS
        BSET PORTB,Y $FF        * light all LEDs
        SWI

DELAY
        PSHX            * to debounce switch
        LDX #$FFFF
T1
        DEX
        BNE T1
        PULX
        RTS



