;
                ; REGISTER B   = CURRENT LIGHT CONTENTS
                ; REGISTER C   = SWITCH DEBOUNCE INDICATOR
                ;		 (HAVE SWITCHES CHANGED SINCE LAST LIGHT SHIFT)
                ;		  0 = NO, HAVE NOT CHANGED, CHANGES WILL BE RECOGNIZED
                ;		  1 = YES, ONE CHG OCCURED, FURTHER CHANGES IGNORED
                ; REGISTER D   = LAST SWITCH SETTING
                ; REGISTER E   = CURRENT SWITCH SETTING
                ; REGISTER H,L = DELAY COUNTER
                ; REGISTER SP  = DELAY COUNTER INCREMENT
                ;
 0000           	ORG	0
                ;
 0000 AF        START:  XRA	A		;A=0
 0001 67        	MOV	H,A		;SET DELAY COUNTER TO ZERO
 0002 DBFF      	IN	0FFH		;READ THE SWITCHES
 0004 6F        	MOV	L,A		;SAVE THE INCREMENT VALUE AS INITIAL VALUE
 0005 F9        	SPHL			;SAVE THE INCREMENT IN SP
                ;
                ; SEE IF SWITCHES HAVE CHANGED SINCE LAST LIGHT SHIFT (BASED ON FLAG IN C)
                ;
                ; ONLY ONCE SWITCH CHANGE (THE FIRST) PER LIGHT SHIFT IS RECOGNIZED, 
                ; FURTHER SWITCH CHANGES ARE IGNORED
                ;
 0006 AF        LOOP:	XRA	A		;A=0
 0007 81        	ADD	C		;A=C, THE DEBOUNCE FLAG
 0008 C21300    	JNZ	TESTROT		;DEBOUNCING, IGNORE SW CHGS, TEST FOR ROTATE
                ;
                ; SWITCHES HAVE NOT CHANGED SINCE LAST LIGHT SHIFT,  GET THE SWITCH VALUE
                ; AND SEE IF THEY HAVE CHANGED
                ;
 000B 53        GETSW:	MOV	D,E		;LAST SWITCH SETTING = CURRENT SWITCH SETTING
 000C DBFF      	IN	0FFH		;READ SWITCHES
 000E 5F        	MOV	E,A		;NEW CURRENT SWITCH SETTING
 000F AA        	XRA	D		;IS NEW SAME AS LAST ?
 0010 C22100    	JNZ	CHANGED		;NO, SWITCHES HAVE CHANGED
                ;
                ; SWITCHE CHGS BEING IGNORED, SEE IF IT'S TIME TO ROTATE THE LIGHTS
                ;
 0013 39        TESTROT:DAD	SP		;ADD INCREMENT IN SP TO COUNTER IN H,L
 0014 D20600    	JNC	LOOP		;DID THE COUNTER OVERFLOW ?
                ;
                ; IT'S TIME TO SHIFT THE LIGHTS LEFT
                ;
 0017 78        ROTATE:	MOV	A,B		;GET THE LIGHT PATTERN
 0018 07        	RLC			;SHIFT IT LEFT
 0019 47        	MOV	B,A		;SAVE IT AS THE NEW LIGHT PATTERN
 001A D3FF      	OUT	0FFH		;WRITE THE LIGHTS
 001C AF        	XRA	A		;GET A ZERO
 001D 4F        	MOV	C,A		;SHOW NO SWITCH CHGS SINCE LAST SHIFT
 001E C30600    	JMP	LOOP		;CONTINUE
                ;
                ;THE SWITCHES HAVE CHANGED, REVISE THE DISPLAY AND CONTINUE
                ;
 0021 A8        CHANGED:XRA	B		;FORM THE NEW DISPLAY
 0022 47        	MOV	B,A		;SAVE IT
 0023 D3FF      	OUT	0FFH		;WRITE IT TO THE LIGHTS
 0025 AF        	XRA	A		;NOW A=0
 0026 67        	MOV	H,A		;CLEAR DELAY COUNTER
 0027 2F        	CMA			;NOW A=0FFH
 0028 4F        	MOV	C,A		;SHOW THAT SWITCHES JUST CHANGED
 0029 C30600    	JMP	LOOP		;GO TO DEBOUNCE LOOP
                ;
 002C           	END	START