**********
* Program LOGIC_4 (6811)
*
* Simulates Ring Counter
*
*
*
*
*
*
*
*
*
*
* Ring Counter seeded with switches.  Goes into continuous loop
* outputting each succesive pattern.
*
* P. H. Anderson, MSU, 11 Oct 90; 15 Jan 93
**********

PSCT	EQU  $C000
DSCT	EQU  $D000
IDSCT	EQU  $D300

STACKTP 	EQU  $0045
REG_BASE	EQU  $1000

PORTB	EQU  $04	* output
PORTC	EQU  $03	* input
DDRC	EQU  $07

	ORG PSCT

	LDS #STACKTP
	LDY #REG_BASE

	CLR DDRC,Y	* port c configured as 8-bit input

	LDAA PORTC,Y	* get seed
	STAA PATT	* save in PATT
AGN
	LDAA PATT	* display PATT
	STAA PORTB,Y
	BSR GEN_NEW	* generate new pattern
	BSR TIME	* delay
	BRA AGN 	* continue

GEN_NEW
* takes PATT and generates new pattern and saves in PATT

	PSHA		* save A
	LDAA PATT
	STAA TEMP_1	* Q7 in ms bit
	STAA TEMP_2
	STAA TEMP_3

	ASL TEMP_2	* Q6 in ms bit

	ASL TEMP_3
	ASL TEMP_3
	ASL TEMP_3	* Q4 in ms bit

	LDAA PATT
	ANDA TEMP_2
	ANDA TEMP_3	* Q7 * Q6 * Q4 now in ms bit of A
	COMA		* /(Q7 * Q6 * Q4) in ms bit
	ASLA		* now in CY

	ROL PATT       * shift PATT, CY to ls bit

	PULA		* restore A
	RTS

TIME
* subroutine time provides a nominal 0.25 sec delay

	PSHX		* save X on stack

	LDX #50000
DECR
	DEX
	BNE DECR

	PULX		* restore X
	RTS

	ORG DSCT

PATT	RMB 1
TEMP_1	RMB 1
TEMP_2	RMB 1
TEMP_3	RMB 1

