; redFrik 050803

.nolist
.include "c:\program files\atmel\avr tools\avrassembler\appnotes\tn26def.inc"
.list

.def temp= r16
.def index= r17
.def lastindex= r18
.def flags= r19

.cseg
.org 0x00

;--
start:
	ldi r16, RAMEND					;Init Stack Pointer
	out SP, r16
	ldi temp, 255					;port as output
	out DDRA, temp
	ldi index, 0
	ldi lastindex, 255				;force output at startup
	rcall updateflag
	;ldi flags, 0b00000001
	;out portA, flags

;--	
main:
	rcall buttons
	;rcall network
	cpc index, lastindex
	breq main
	mov lastindex, index
	out portA, flags
	rjmp main

;--	
buttons:
	sbis pinB, 4
	rcall but0
	sbis pinB, 5
	rcall but1
	sbis pinB, 6
	rcall but2
	sbis pinB, 3
	rcall but3
	ret
	
but0:
	sbrc flags, 4
	ret
	ldi index, 0
	rcall updateflag
	ret
but1:
	sbrc flags, 5
	ret
	ldi index, 1
	rcall updateflag
	ret
but2:
	sbrc flags, 6
	ret
	ldi index, 2
	rcall updateflag
	ret
but3:
	sbrc flags, 7
	ret
	ldi index, 3
	rcall updateflag
	ret

;--
updateflag:
	cpi index, 0
	brne updateflag2
	ldi flags, 0b00010000		;0-1 max454, 2-3 max454, 4-7 leds
	ret
updateflag2:
	cpi index, 1
	brne updateflag3
	ldi flags, 0b00100101
	ret
updateflag3:
	cpi index, 2
	brne updateflag4
	ldi flags, 0b01001010
	ret
updateflag4:
	ldi flags, 0b10001111
	ret

