<?
string timerName = "Timer"+S("calculator:timer0:num");
string usartName = "USART"+S("calculator:usart0:num");

double s1 = Convert.ToDouble(S("calculator:timer0:sec"));
double s2 = Convert.ToDouble(S("calculator:timer0:realsec"));
string sepd = "" + ((s1 * 60 * 60 * 24) - (s2 * 60 * 60 * 24));
if (sepd.Length > 6) sepd = sepd.Substring(0, 6);
?>CPU
	<?$cpu:cpu?> @ <?$cpu:mhz?> mhz

Memory
	RAM    <?$cpu:ramstart?> .. <?$cpu:ramend?> : <?$cpu:ramsize?> bytes
	ROM    <?$cpu:romstart?> .. <?$cpu:romend?> : <?$cpu:romsize?> bytes
	EEPROM <?$cpu:eepromstart?> .. <?$cpu:eepromend?> : <?$cpu:eepromsize?> bytes

Timer<?$calculator:timer0:num?> (<?$calculator:timer0:bits?> bits)
	<?$calculator:timer0:ticks?> ticks / <?$calculator:timer0:time?>
<?if (S("calculator:timer0:err") != "0") show(); else hide();?>	<?$calculator:timer0:realticks?> real ticks / <?$calculator:timer0:realtime?>, err=<?$calculator:timer0:err?>%
	epd (ErrorPerDay) = <?P(sepd);?> sec !
<?show();?>	prescaler: <?$calculator:timer0:prescaler?> (range: <?$calculator:timer0:min?> .. <?$calculator:timer0:max?>)
	counter: <?$calculator:timer0:counter?>
	interrupts:<?if (S("calculator:timer0:irq_ovf").Length>0) show(); else hide();?>
		<?$calculator:timer0:irq_ovf?>: <?P(timerName);?> Overflow<?if (S("calculator:timer0:irq_capt").Length>0) show(); else hide();?>
		<?$calculator:timer0:irq_capt?>: <?P(timerName);?> Capture<?if (S("calculator:timer0:irq_compa").Length>0) show(); else hide();?>
		<?$calculator:timer0:irq_compa?>: <?P(timerName);?> Compare A<?if (S("calculator:timer0:irq_compb").Length>0) show(); else hide();?>
		<?$calculator:timer0:irq_compb?>: <?P(timerName);?> Compare B<?if (S("calculator:timer0:irq_compc").Length>0) show(); else hide();?>
		<?$calculator:timer0:irq_compc?>: <?P(timerName);?> Compare C<?show();?>

USART<?$calculator:usart0:num?>
	settings: <?$calculator:usart0:baud?> baud, <?$calculator:usart0:databits?>-<?$calculator:usart0:parity?>-<?$calculator:usart0:stopbits?>
<?if (S("calculator:usart0:err") != "0") show(); else hide();?>	realbaud: <?$calculator:usart0:realbaud?>, err=<?$calculator:usart0:err?>%
<?show();?>	<?$calculator:usart0:cpu_ubrr?>: <?$calculator:usart0:v_ubrr?> <?if (B("calculator:usart0:v_u2x")) P(" (use U2X !)");?>
	interrupts:<?if (S("calculator:usart0:irq_rx").Length>0) show(); else hide();?>
		<?$calculator:usart0:irq_rx?>: <?P(usartName);?> RX Complete<?if (S("calculator:usart0:irq_tx").Length>0) show(); else hide();?>
		<?$calculator:usart0:irq_tx?>: <?P(usartName);?> TX Complete<?if (S("calculator:usart0:irq_de").Length>0) show(); else hide();?>
		<?$calculator:usart0:irq_de?>: <?P(usartName);?> Data Register Empty<?show();?>

Interrupts
<?
string rjmp = CPU.Attributes["reset"].InnerText;
int p = 0;
int i = rjmp=="jmp" ? 2 : 1;
P("\t"+hex16(p)+"\tRESET\r\n"); p+=i;
XmlNodeList irqs = CPU.SelectNodes("irqs/irq");
foreach (XmlNode irq in irqs)
{
	P("\t"+hex16(p)+"\t"+irq.Attributes["name"].InnerText+": "+irq.Attributes["desc"].InnerText+"\r\n");
	p += i;
}
?>

<?show();P("\r\n\r\n-- generated by AvrWiz on "+System.DateTime.Now);?>