F_CPU = 16000000
DEVICE = atmega8
+
# BOOTLOADER_ADDRESS is 1800 for 8k devices, 3800 for 16k and 7800 for 32k.
BOOTLOADER_ADDRESS = 1800
-FUSEOPT = $(FUSEOPT_8)
-LOCKOPT = -U lock:w:0x2f:m
-PROGRAMMER = -c pony-stk200
# PROGRAMMER contains AVRDUDE options to address your programmer
+# PROGRAMMER = -c pony-stk200
+PROGRAMMER = -c usbasp
+
+# since USBaspLoader supports HAVE_BLB11_SOFTW_LOCKBIT...
+LOCKOPT = -U lock:w:0x3f:m
+FUSEOPT = $(FUSEOPT_8)
+
+
+# standard atmega8 needs BODLEVEL to be programed, since it is a 5V device
+# you may also want to UNprogram SUT1 to get a SLOWER bootup (lfuse then would be 0x3f)
+FUSEOPT_8 = -U hfuse:w:0xc0:m -U lfuse:w:0x1f:m
-FUSEOPT_8 = -U hfuse:w:0xc0:m -U lfuse:w:0x9f:m
FUSEOPT_88 = -U hfuse:w:0xd6:m -U lfuse:w:0xdf:m -U efuse:w:0x00:m
FUSEOPT_168 = -U hfuse:w:0xd6:m -U lfuse:w:0xdf:m -U efuse:w:0x00:m
FUSEOPT_328 = -U lfuse:w:0xf7:m -U hfuse:w:0xda:m -U efuse:w:0x03:m
;MCU dependend RA(MPZ should be transfered within register: r11
;lo8(Z) should be transfered within register: r12
;hi8(Z) should be transfered within register: r13
+;( as definition of SPM low8bit of dataword are stored within r0 )
+;( as definition of SPM hi8bit of dataword are stored within r1 )
;<-->USED/CHANGED:
;temp0 will be register: r11
;temp1 will be register: r12
;temp2 will be register: r13
+;spmcrval (r18) may also be changed due to rww reenable-phase r18
;Z (r31:r30) wil be changed during operation
;<--OUT:
;==================================================================
+; TODO: waitA and waitB could be merged to subroutine saving 2 opc
+;==================================================================
-;load pageaddress (Z) from r13:12 since it may was used for icall
+;load pageaddress (Z) from (r11:)r13:12 since it may was used for icall
mov rampZ, r11
mov r30, r12
mov r31, r13
-waitA: ;check for previous SPM complete
+waitA: ;check for pending SPM complete
in temp0, SPMCR
sbrc temp0, SPMEN
rjmp waitA