org 100h

MAIN:
	XOR A			;CLEAR REGISTERS
	LD B, A
	LD C, A
	LD D, A
	LD E, A
	LD H, A
	LD L, A

	IN A, (01h)		;LOAD KEY INPUT
	LD B, A

	LD HL, (1F1Eh)		;LOAD CORRECT CODES
				;LOADS (1F1Eh) INTO L ACCESS CODE
				;LOADS (1F1Fh) INTO H ADMIN CODE

	LD A, L			;LOAD ACCESS CODE TO ACCUMULATOR
	XOR B			;COMPARE INPUT TO CORRECT CODE
	JR NZ, MAIN		;IF NOT ZERO, LOOP

	LD A, H			;LOAD ADMIN CODE TO ACCUMULATOR
	XOR B			;COMPARE INPUT TO CORRECT CODE
	JR NZ, ADMIN		;IF NOT ZERO, LOOP

TIMER_SET:
	LD D, 255		;SET TIMER
	RET			;RETURN

GRANTED:
	SET 6, A		;SET BIT 6 TO OPEN LOCK
	OUT (01h), A		;OUTPUT BIT

	CALL TIMER

	JR MAIN			;IF ELSE, LOOP TO MAIN

SETUP_ADMIN:
	CALL TIMER_SET		;SET TIMER

ADMIN:
	SET 7, A 		;SET BIT 7 TO OPEN REFLASH
	OUT (01h), A		;OUTPUT BIT

	IN A, (01h)		;INPUT NEW CODE FROM ADMIN
	LD B, A			;LOAD INPUT CODE INTO B REGISTER
	LD A, (1F1Dh)		;LOAD CHECK VALUE FROM MEMORY
	XOR B			;VALIDATE NEW CODE
	JR NZ, WRITE		;IF NEW CODE IS SENSED, JUMP TO WRITE
	CALL TIMER		;CHECK TIMER
	JR ADMIN		;LOOP
WRITE:

	RES 7, A		;RESET BIT 7 TO ZERO
	LD (1F1Eh), A		;WRITE CODE TO MEMORY
	JR MAIN			;LOOP TO MAIN

TIMER:
	DEC D			;DECREMENT TIMER
	JR Z, MAIN		;CHECK FOR ZERO
	RET			;RETURN


