Ich versuche grade einen Bootloader selber zu schreiben für den Atmega16 als Hilfe habe ich mir einen BL für den Atmega8 besorgt um mir quasi alles anzugucken und zu lernen wie es geht
http://home.planet.nl/~winko001/ <== da habe ich den her
Folgende Sachen versteh ich net/ net so ganz:

Code:
	ldi temp1, 0x01                  //interruptvektoren-tabelle
	out IO_REG(GICR), temp1  // ins boot loader flash verschieben
	ldi temp1, 0x02
	out IO_REG(GICR), temp1
Hier werden denke ich mal der die Interrupts Init. aber warum 0x01
ich kenn wohl zb. 0b010101000 um ein bitMuster ins Register zu laden
Könnte Hex sein aber warum dann zweimal rein laden???
Ach ja
IO_REG ist:
#define IO_REG(n) _SFR_IO_ADDR(n)

So dann wird in dem Bootlaoder ein Spannungstest durchgeführt
in dem auf den high wert der r1 hinzugefügt wird Carry wert da das mit adc passiert so nun die Frage was ist das für ein Register und was ist da drin ?
Code:
batt_loop:
	sbic	IO_REG(ADCSRA), ADSC
	rjmp	batt_loop
	in	temp1, IO_REG(ADCL)
	in	INT_REG_H, IO_REG(ADCH)
	clr	INT_REG_L
	add	INT_REG_L, temp1
	adc	INT_REG_H, r1
	subi	INT_REG_L, lo8(BATT_MIN)
	sbci	INT_REG_H, hi8(BATT_MIN) 
	brcc	batt_ok
So letzte Frage:
Code:
                ldi ZL, lo8(__vectors)// adresse bootloader-start
	ldi ZH, hi8(__vectors)
	ijmp 							// indirect jump zum programmstart

Z= Zeiger für den ijmp aber wo find ichd ie defs. für lo8 hi8 oder __vectors

Danke an all die freundlichen und netten Menschen die mir hoffentlich helfen werden

MFG
Der Albi