1
0
mirror of synced 2024-11-22 04:54:24 +01:00
avremu/avr.binary.tex
2014-09-27 00:49:58 +02:00

74 lines
1.8 KiB
TeX

\def\avr@ihex@parse@line:#1#2#3#4#5#6#7#8#9;{%
\avr@hex@tobin{#1#2}{\avr@ihex@bytes}%
\avr@hex@tobin{#3#4#5#6}{\avr@ihex@address}%
\def\avr@ihex@type{#7#8}%
\def\avr@ihex@data{#9}%
}
\def\avr@ihex@readop#1#2#3{%
\def\avr@ihex@readop@helper##1##2##3##4##5\@nnil{%
\avr@hex@tobin{##3##4##1##2}{#2}%
\xdef#3{##5}%
}%
\edef\@tempa{#1}%
\expandafter\avr@ihex@readop@helper\@tempa\@nnil%
}
\newcount\avr@ihex@addr
\newcount\avr@ihex@count
\newcount\avr@ihex@instrs
\def\avr@ihex@load#1{%
\newread\avr@input%
\avr@ihex@instrs=0\relax%
\openin\avr@input=#1\relax%
\@whilesw\unless\ifeof\avr@input\fi{%
\endlinechar59% 59==;
\readline\avr@input to \avr@line \relax%
\endlinechar=-1%
\expandafter\ifstrequal\expandafter{\avr@line}{;}{}{%
\expandafter\avr@ihex@parse@line \avr@line%
\ifdefstring{\avr@ihex@type}{00}{%
\avr@bin@tocount{\avr@ihex@bytes}{\avr@ihex@count}%
\avr@bin@tocount{\avr@ihex@address}{\avr@ihex@addr}%
\divide\avr@ihex@addr by 2\relax%
\divide\avr@ihex@count by 2\relax%
\loop \ifnum \avr@ihex@count > 0%
\avr@ihex@readop{\avr@ihex@data}{\avr@ihex@opcode}{\avr@ihex@data}%
\avr@code@set{\avr@ihex@opcode}{\the\avr@ihex@addr}%
%\avr@debug{=\avr@ihex@opcode}%
\advance \avr@ihex@count by -1\relax%
\advance \avr@ihex@addr by 1\relax%
\repeat
}{}%
}%
}%
\closein\avr@input%
}
\def\avr@compile#1#2{%
\ifnum\pdfshellescape=1%
\immediate\write18{avr-gcc -o #1.elf #1 #2}%
\immediate\write18{avr-objcopy -O ihex -R .eeprom #1.elf #1.hex}%
\else%
\typeout{avr@compile: --shell-escape is disabled}%
\fi%
}
\newcommand{\avrloadc}[2][-Os -mmcu=atmega8]{%
\avr@init%
\avr@compile{#2}{#1}%
\avr@ihex@load{#2.hex}%
}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End: