      ; Reset Vector
	RJMP	Reset
	RJMP	Event
	RJMP	Event
	NOP	; TIMER
	NOP	; EEPROM
	NOP	; Analog
	NOP	; Timer 0 Compare A
	NOP	; Timer 0 Compare B
	NOP	; Watch
	NOP	; ADC Conversion
;	.ORG	0x0010
;====================================================================
; CODE SEGMENT
;====================================================================
Event:
Reset:
	LDI	R16,LOW(RAMEND)
	OUT	SPL,R16
	LDI	R16,HIGH(RAMEND)
	OUT	SPH,R16
	LDI	R16,1 << PUD
	OUT	MCUCR,R16
Phase_1:; Vertical Out - Horizontal In
	LDI	R17,(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4)
	OUT	PORTB,R17	; ???11111
	LDI	R16,(1 << DDB0) | (1 << DDB1) | (1 << DDB2)
	OUT	DDRB,R16	; ???ZZ111
	LDI	R17,(1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4)
	OUT	PORTB,R17	; ???11110 - Scan for D4, D11
	IN	R20,PINB	; ???HG??? - D11(H) D4(G)
	LDI	R17,(1 << PB0) | (1 << PB2) | (1 << PB3) | (1 << PB4)
	OUT	PORTB,R17	; ???11101 - Scan for D2, D8
	IN	R21,PINB	; ???JI??? - D8(J) D2(I)
	LDI	R17,(1 << PB0) | (1 << PB1) | (1 << PB3) | (1 << PB4)
	OUT	PORTB,R17	; ???11011 - Scan for D6, D12
	IN	R22,PINB	; ???LK??? - D12(L) D6(K)
Phase_2:; Horizontal Out - Vertical In
	LDI	R17,(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4)
	OUT	PORTB,R17	; ???11111
	LDI	R16,(1 << DDB3) | (1 << DDB4)
	OUT	DDRB,R16	; ???11ZZZ
	LDI	R17,(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB4)
	OUT	PORTB,R17	; ???10111 - Scan for D1, D3, D5
	IN	R23,PINB	; ?????CBA - D3(C) D5(B) D1(A)
	LDI	R17,(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3)
	OUT	PORTB,R17	; ???01111 - Scan for D7, D9, D10
	IN	R24,PINB	; ?????FED - D9(F) D10(E) D7(D)
Phase_3:; Pack the bits
	ANDI	R24,(1 << PB0) | (1 << PB1) | (1 << PB2)
	LSL	R24
	LSL	R24
	LSL	R24
	ANDI	R23,(1 << PB0) | (1 << PB1) | (1 << PB2)
	OR	R23,R24		; ??FEDCBA - D9 D10 D7 D3 D5 D1
	ANDI	R20,(1 << PB3) | (1 << PB4)
	LSR	R20
	LSR	R20
	LSR	R20
	ANDI	R21,(1 << PB3) | (1 << PB4)
	LSR	R21
	OR	R21,R20
	ANDI	R22,(1 << PB3) | (1 << PB4)
	LSL	R22
	OR	R22,R21		; ??LKJIHG - D12 D6 D8 D2 D11 D4
	LDI	R21,0x3F
	EOR	R22,R21
	EOR	R23,R23
	; Now is code in R23 and R22
Phase_4:
	LDI	R17,(1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4)
	OUT	PORTB,R17
	LDI	R16,(1 << DDB0) | (1 << DDB2) | (1 << DDB4)
	OUT	DDRB,R16
	LDI	R17,(1 << PB4)	; Flashing for LEDs
	OUT	PORTB,R17
	LDI	R17,255
Pause:
	DEC	R17
	BRNE	Pause
	SBRC	R23,4		; D10(E)
	RCALL	Key_0
	SBRC	R23,0		; D1(A)
	RCALL	Key_1
	SBRC	R22,2		; D2(I)
	RCALL	Key_2
	SBRC	R23,2		; D3(C)
	RCALL	Key_3
	SBRC	R22,0		; D4(G)
	RCALL	Key_4
	SBRC	R23,1		; D5(B)
	RCALL	Key_5
	SBRC	R22,4		; D6(K)
	RCALL	Key_6
	SBRC	R23,3		; D7(D)
	RCALL	Key_7
	SBRC	R22,3		; D8(J)
	RCALL	Key_8
	SBRC	R23,5		; D9(F)
	RCALL	Key_9
Stopped:RJMP	Phase_1
Key_0:	NOP
Key_1:	NOP
Key_2:	NOP
Key_3:	NOP
Key_4:	NOP
Key_5:	NOP
Key_6:	NOP
Key_7:	NOP
Key_8:	NOP
Key_9:	NOP
	RET