//
//  Low-level routines to read lock and fuse-bytes
//
//  Copyright (C) 2/2005 Martin Thomas, Kaiserslautern, Germany
//

#include "lowlevel.h"

unsigned char read_fuse_lock(unsigned short addr, unsigned char mode)
{
	unsigned char retval;
	
	asm volatile
	(
		"movw r30, %3\n\t" /* Z to addr */ \
		"sts %0, %2\n\t" /* set mode in SPM_REG */ \
		"lpm\n\t"  /* load fuse/lock value into r0 */ \
		"mov %1,r0\n\t" /* save return value */ \
		: "=m" (SPM_REG),
		  "=r" (retval)
		: "r" (mode),
		  "r" (addr)
		: "r30", "r31", "r0"
	);
	return retval;
}

