;****** PunktMatrix 1.0 (c) Oliver Mezger 6.7.2009
; Balken wandert von Spalte 1 bis Spalte 5

.include "m16def.inc"

.def tmp = R16		;tmp-Register zum Arbeiten
.def tmp2 = R17
.def spalte = R18	;Spalte für Darstellung

	jmp reset		;Einsprung nach Reset
	.org $2a		;folgender Code ab Adresse $2a
reset:
	ldi tmp,high(RAMEND);Oberste RAM-Adresse holen
	out	SPH, tmp		;Stack-Pointer initialisieren
	ldi tmp,low(RAMEND)	
	out	SPL, tmp
	ldi tmp,$ff
	out DDRA,tmp	;PA als Ausgang
	out DDRC,tmp	;PC als Ausgang
spalte1:
	ldi spalte,1	;Spalte1 initialisieren
	ldi ZH, high(daten*2)	;Datenzeiger initialisieren
	ldi ZL, low(daten*2)
nspalte:
	lpm tmp, z+		;lade Daten aus Flash
	out PORTA,tmp	;ausgeben Spalte
	out PORTC,spalte;Spalte einschalten
	rcall wait		;warte zum Anzeigen
	rol spalte		;naechste Spalte
	sbrc spalte,5	;wenn Spalte 6
	rjmp spalte1	;dann wieder Spalte 1
	rjmp nspalte	;sonst naechste Spalte

wait:
	ldi tmp,10		;aeusseren Zaehler laden 10 ms
wl1:
	ldi tmp2,250	;inneren Zaehler 1ms bei 1Mhz
wl2:
	nop
	dec tmp2		;tmp2--
	brne wl2		;Sprung wenn nicht null
	dec tmp			;tmp--
	brne wl1		;Sprung wenn nicht null
	ret

daten:
	.db $08,$04,$7E,$04,$08
