From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/avremu/simple-testsuite.tex | 511 +++++++++++++++++++++++
 1 file changed, 511 insertions(+)
 create mode 100644 macros/latex/contrib/avremu/simple-testsuite.tex

(limited to 'macros/latex/contrib/avremu/simple-testsuite.tex')

diff --git a/macros/latex/contrib/avremu/simple-testsuite.tex b/macros/latex/contrib/avremu/simple-testsuite.tex
new file mode 100644
index 0000000000..23d851a529
--- /dev/null
+++ b/macros/latex/contrib/avremu/simple-testsuite.tex
@@ -0,0 +1,511 @@
+\documentclass{article}
+\usepackage[debug]{avremu}
+
+\begin{document}
+\makeatletter
+% Hook Macro for the tests
+\def\avr@test{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\avr@test@ADD{%
+  \def\avr@test@helper##1##2{%
+     \avr@test@setup{ADD: ##1+##2}%
+     \avr@instr@LDI{0}{\csuse{avr@r31}}{##1}%
+     \avr@instr@LDI{1}{\csuse{avr@r17}}{##2}%
+     \avr@instr@ADD{2}{\csuse{avr@r17}}{\csuse{avr@r31}}%
+     \avr@instr@stepn{3}%
+  }%
+  \avr@test@helper{00000000}{00000001}%
+  \avr@test@SREG{00000000}%
+  \avr@test@REG{r17}{00000001}%
+  % Test Zero Flag
+  \avr@test@helper{00000000}{00000000}%
+  \avr@test@SREG{00000010}%
+  \avr@test@REG{r17}{00000000}%
+  % Test Carry and Half Carry
+  \avr@test@helper{11111111}{00000010}%
+  \avr@test@SREG{00100001}%
+  \avr@test@REG{r17}{00000001}%
+  % Test V
+  \avr@test@helper{10000000}{10000000}%
+  \avr@test@REG{r17}{00000000}%
+  \avr@test@SREG{00011011}%
+}
+\appto\avr@test{\avr@test@ADD}
+
+\def\avr@test@ADC{%
+  \def\avr@test@helper##1##2##3##4{%
+     \avr@test@setup{ADD: (##1:##2) + (##3:##4)}%
+     \avr@instr@LDI{0}{\csuse{avr@r30}}{##1}%
+     \avr@instr@LDI{1}{\csuse{avr@r31}}{##2}%
+     \avr@instr@LDI{2}{\csuse{avr@r17}}{##3}%
+     \avr@instr@LDI{3}{\csuse{avr@r18}}{##4}%
+     \avr@instr@ADD{4}{\csuse{avr@r18}}{\csuse{avr@r31}}%
+     \avr@instr@ADC{5}{\csuse{avr@r17}}{\csuse{avr@r30}}%
+     \avr@instr@stepn{6}%
+  }%
+  \avr@test@helper{00000000}{10000001}{00000000}{10000000}%
+  \avr@test@REG{r17}{00000001}%
+  \avr@test@SREG{00000000}%
+
+  \avr@test@helper{00000011}{10000001}{00001100}{10000000}%
+  \avr@test@REG{r17}{00010000}%
+  \avr@test@SREG{00100000}%
+
+}
+\appto\avr@test{\avr@test@ADC}
+
+\def\avr@test@SUB{%
+  \def\avr@test@helper##1##2{%
+     \avr@test@setup{SUB: ##1 - ##2}%
+     \avr@instr@LDI{0}{\csuse{avr@r17}}{##1}%
+     \avr@instr@LDI{1}{\csuse{avr@r31}}{##2}%
+     \avr@instr@SUB{2}{\csuse{avr@r17}}{\csuse{avr@r31}}%
+     \avr@instr@stepn{3}%
+  }%
+  \avr@test@helper{00001111}{00000010}%
+  \avr@test@REG{r17}{00001101}%
+  \avr@test@SREG{00000000}%
+
+  \avr@test@helper{00001111}{00010000}%
+  \avr@test@REG{r17}{11111111}%
+  \avr@test@SREG{00010101}%
+}
+\appto\avr@test{\avr@test@SUB}
+
+\def\avr@test@SBC{%
+  \def\avr@test@helper##1##2##3##4{%
+     \avr@test@setup{SBC: (##1:##2) - (##3:##4)}%
+     \avr@instr@LDI{0}{\csuse{avr@r30}}{##3}%
+     \avr@instr@LDI{1}{\csuse{avr@r31}}{##4}%
+     \avr@instr@LDI{2}{\csuse{avr@r17}}{##1}%
+     \avr@instr@LDI{3}{\csuse{avr@r18}}{##2}%
+     \avr@instr@SUB{4}{\csuse{avr@r18}}{\csuse{avr@r31}}%
+     \avr@instr@SBC{5}{\csuse{avr@r17}}{\csuse{avr@r30}}%
+     \avr@instr@stepn{6}%
+  }%
+  \avr@test@helper{00000000}{10000001}{00000000}{10000001}%
+  \avr@test@REG{r17}{00000000}%
+  \avr@test@REG{r18}{00000000}%
+  \avr@test@SREG{00000010}%
+
+  \avr@test@helper{00000000}{00000000}{00000000}{00000001}%
+  \avr@test@REG{r17}{11111111}%
+  \avr@test@REG{r18}{11111111}%
+  \avr@test@SREG{00110101}%
+
+  \avr@test@helper{00000000}{10000000}{00000000}{00000001}%
+  \avr@test@REG{r17}{00000000}%
+  \avr@test@REG{r18}{01111111}%
+  \avr@test@SREG{00000010}%
+}
+\appto\avr@test{\avr@test@SBC}
+
+\def\avr@test@BRB{%
+  \def\avr@test@helper##1##2##3{%
+     \avr@test@setup{BRB: ##1+##2 => PC+2}%
+     \avr@instr@LDI{0}{\csuse{avr@r30}}{##1}%
+     \avr@instr@LDI{1}{\csuse{avr@r31}}{##2}%
+     \avr@instr@ADD{2}{\csuse{avr@r30}}{\csuse{avr@r31}}%
+     \@@BRB{3}{##3}{1}%
+     \avr@instr@LDI{4}{\csuse{avr@r31}}{11001100}%
+     \avr@instr@LDI{5}{\csuse{avr@r20}}{00000000}%
+     \avr@instr@stepn{5}%
+  }%
+  % Check for cleared flag
+  \def\@@BRB{\avr@instr@BRBC}
+
+  \avr@test@helper{10000000}{10000000}{000}%
+  \avr@test@REG{r31}{11001100}%
+
+  \avr@test@helper{10000000}{00000001}{000}%
+  \avr@test@REG{r31}{00000001}%
+
+  % Check for SET flag
+  \def\@@BRB{\avr@instr@BRBS}
+
+  \avr@test@helper{10000000}{10000000}{000}%
+  \avr@test@REG{r31}{10000000}%
+
+  \avr@test@helper{10000000}{10000001}{100}%
+  \avr@test@REG{r31}{10000001}%
+}
+\preto\avr@test{\avr@test@BRB}
+
+\def\avr@test@fibonacci{%
+  \avr@test@setup{Fibonacci -- fib(8)=21}%
+  \avr@instr@LDI{0}{\csuse{avr@r30}}{00000001}%
+  \avr@instr@LDI{1}{\csuse{avr@r31}}{00000001}%
+  \avr@instr@LDI{2}{\csuse{avr@r20}}{00000101}%
+  \avr@instr@LDI{3}{\csuse{avr@r21}}{00000001}%
+  % tmp = x
+  \avr@instr@MOV{4}{\csuse{avr@r29}}{\csuse{avr@r30}}%
+  % x = x + y
+  \avr@instr@ADD{5}{\csuse{avr@r30}}{\csuse{avr@r31}}%
+  % y = tmp
+  \avr@instr@MOV{6}{\csuse{avr@r31}}{\csuse{avr@r29}}%
+  % i--
+  \avr@instr@SUB{7}{\csuse{avr@r20}}{\csuse{avr@r21}}%
+  \avr@instr@BRPL{8}{-5}
+  \avr@instr@BREAK{9}
+
+  \avr@instr@stepn{100}%
+  \avr@test@REG{r30}{00010101}
+}
+\preto\avr@test{\avr@test@fibonacci}
+
+\def\avr@test@BITOPS{%
+  \avr@test@setup{Bit Operations}%
+  \avr@instr@LDI{0}{\csuse{avr@r30}}{00111100}%
+  \avr@instr@LDI{1}{\csuse{avr@r31}}{00001111}%
+  \avr@instr@AND{2}{\csuse{avr@r30}}{\csuse{avr@r31}}%
+
+  \avr@instr@stepn{3}%
+  \avr@test@REG{r30}{00001100}
+
+  \avr@instr@ANDI{3}{\csuse{avr@r30}}{00001000}%
+  \avr@instr@stepn{1}%
+  \avr@test@REG{r30}{00001000}
+
+  \avr@instr@ORI{4}{\csuse{avr@r20}}{10101010}%
+  \avr@instr@stepn{1}%
+  \avr@test@REG{r20}{10101010}
+
+  \avr@instr@EOR{5}{\csuse{avr@r30}}{\csuse{avr@r20}}%
+  \avr@instr@TST{6}{\csuse{avr@r30}}%
+  \avr@instr@stepn{2}%
+  \avr@test@REG{r30}{10100010}
+}
+\preto\avr@test{\avr@test@BITOPS}
+
+\def\avr@test@SUBI{%
+  \avr@test@setup{SUBI}%
+  \avr@instr@LDI{0}{\csuse{avr@r30}}{00001111}%
+  \avr@instr@SUBI{1}{\csuse{avr@r30}}{00010000}%
+  \avr@instr@SBCI{2}{\csuse{avr@r30}}{00000001}%
+
+  \avr@instr@stepn{2}%
+  \avr@test@REG{r30}{11111111}
+  \avr@test@SREG{00010101}
+
+  \avr@instr@stepn{1}%
+  \avr@test@REG{r30}{11111101}
+  \avr@test@SREG{00010100}
+}
+\preto\avr@test{\avr@test@SUBI}
+
+\def\avr@test@CPI{%
+  \avr@test@setup{CPI}%
+  \avr@instr@LDI{0}{\csuse{avr@r30}}{00001111}%
+  \avr@instr@CPI{1}{\csuse{avr@r30}}{00001111}%
+
+  \avr@instr@stepn{2}%
+  \avr@test@REG{r30}{00001111}
+  \avr@test@SREG{00000010}
+}
+\preto\avr@test{\avr@test@CPI}
+
+\def\avr@test@MOVW{%
+  \avr@test@setup{MOVW}%
+  \avr@instr@LDI{0}{\csuse{avr@r30}}{00001111}%
+  \avr@instr@LDI{1}{\csuse{avr@r31}}{11110000}%
+  \avr@instr@MOVW{2}{\csuse{avr@r2}}{\csuse{avr@r30}}%
+
+  \avr@instr@stepn{3}%
+  \avr@test@REG{r2}{00001111}
+  \avr@test@REG{r3}{11110000}
+  \avr@test@SREG{00000000}
+}
+\preto\avr@test{\avr@test@MOVW}
+
+\def\avr@test@BSET{%
+  \avr@test@setup{BSET}%
+  \avr@instr@SEI{0}%
+  \avr@instr@SEC{1}%
+  \avr@instr@CLI{2}%
+
+  \avr@instr@stepn{2}%
+  \avr@test@SREG{10000001}
+  \avr@instr@stepn{1}%
+  \avr@test@SREG{00000001}
+
+}
+\preto\avr@test{\avr@test@BSET}
+
+\def\avr@test@BST{%
+  \avr@test@setup{BST}%
+  \avr@instr@LDI{0}{\csuse{avr@r31}}{00010000}%
+  \avr@instr@BST{1}{\csuse{avr@r31}}{100}%
+  \avr@instr@BLD{2}{\csuse{avr@r31}}{000}%
+  \avr@instr@CLT{3}
+  \avr@instr@BLD{4}{\csuse{avr@r31}}{100}%
+
+  \avr@instr@stepn{2}%
+  \avr@test@SREG{01000000}
+ 
+  \avr@instr@stepn{1}
+  \avr@test@REG{r31}{00010001}
+
+  \avr@instr@stepn{2}%
+  \avr@test@SREG{00000000}
+  \avr@test@REG{r31}{00000001}
+}
+\preto\avr@test{\avr@test@BST}
+
+\def\avr@test@NEG{%
+  \avr@test@setup{NEG}%
+  \avr@instr@LDI{0}{\csuse{avr@r20}}{00000001}%
+  \avr@instr@NEG{1}{\csuse{avr@r20}}%
+  \avr@instr@NEG{2}{\csuse{avr@r20}}%
+
+
+  \avr@instr@stepn{2}%
+  \avr@test@REG{r20}{11111111}
+  \avr@test@SREG{00110101}
+
+  \avr@instr@stepn{1}%
+  \avr@test@REG{r20}{00000001}
+  \avr@test@SREG{00100001}
+}
+\preto\avr@test{\avr@test@NEG}
+
+\def\avr@test@COM{%
+  \avr@test@setup{COM}%
+  \avr@instr@LDI{0}{\csuse{avr@r20}}{00000001}%
+  \avr@instr@COM{1}{\csuse{avr@r20}}%
+  \avr@instr@COM{2}{\csuse{avr@r20}}%
+
+
+  \avr@instr@stepn{2}%
+  \avr@test@REG{r20}{11111110}
+  \avr@test@SREG{00010101}
+
+  \avr@instr@stepn{1}%
+  \avr@test@REG{r20}{00000001}
+  \avr@test@SREG{00000001}
+}
+\preto\avr@test{\avr@test@COM}
+
+\def\avr@test@SBR{%
+  \avr@test@setup{SBR[CS]}%
+  \avr@instr@LDI{0}{\csuse{avr@r20}}{00001000}%
+  \avr@instr@SBRS{1}{\csuse{avr@r20}}{011}%
+  \avr@instr@LDI{2}{\csuse{avr@r20}}{00001111}%
+  \avr@instr@NOP{3}
+
+  \avr@instr@stepn{3}%
+  \avr@test@REG{r20}{00001000}
+
+  \avr@instr@SBRS{4}{\csuse{avr@r20}}{010}%
+  \avr@instr@LDI{5}{\csuse{avr@r20}}{00001111}%
+  \avr@instr@NOP{6}
+
+  \avr@instr@stepn{2}%
+  \avr@test@REG{r20}{00001111}
+}
+\preto\avr@test{\avr@test@SBR}
+
+\def\avr@test@ASR{%
+  \avr@test@setup{ASR}%
+  \avr@instr@LDI{0}{\csuse{avr@r20}}{00001001}%
+  \avr@instr@ASR{1}{\csuse{avr@r20}}%
+  \avr@instr@LDI{2}{\csuse{avr@r20}}{10001001}%
+  \avr@instr@ASR{3}{\csuse{avr@r20}}%
+
+  \avr@instr@stepn{2}%
+  \avr@test@REG{r20}{00000100}
+  \avr@test@SREG{00011001}
+
+  \avr@instr@stepn{2}%
+  \avr@test@REG{r20}{11000100}
+  \avr@test@SREG{00010101}
+}
+\preto\avr@test{\avr@test@ASR}
+
+\def\avr@test@LSR{%
+  \avr@test@setup{LSR}%
+  \avr@instr@LDI{0}{\csuse{avr@r20}}{00001001}%
+  \avr@instr@LSR{1}{\csuse{avr@r20}}%
+  \avr@instr@LDI{2}{\csuse{avr@r20}}{10001001}%
+  \avr@instr@LSR{3}{\csuse{avr@r20}}%
+
+
+  \avr@instr@stepn{2}%
+  \avr@test@REG{r20}{00000100}
+  \avr@test@SREG{00011001}
+
+  \avr@instr@stepn{2}%
+  \avr@test@REG{r20}{01000100}
+  \avr@test@SREG{00011001}
+}
+\preto\avr@test{\avr@test@LSR}
+
+\def\avr@test@ROR{%
+  \avr@test@setup{ROR}%
+  \avr@instr@LDI{0}{\csuse{avr@r20}}{00000001}%
+  \avr@instr@ROR{1}{\csuse{avr@r20}}%
+  \avr@instr@ROR{2}{\csuse{avr@r20}}%
+  \avr@instr@ROR{3}{\csuse{avr@r20}}%
+
+
+  \avr@instr@stepn{2}%
+  \avr@test@REG{r20}{00000000}
+  \avr@test@SREG{00011011}
+
+  \avr@instr@stepn{1}%
+  \avr@test@REG{r20}{10000000}
+  \avr@test@SREG{00001100}
+
+  \avr@instr@stepn{1}%
+  \avr@test@REG{r20}{01000000}
+  \avr@test@SREG{00000000}
+}
+\preto\avr@test{\avr@test@ROR}
+
+
+\def\avr@test@LDX{%
+  \avr@test@setup{LDX}%
+  \avr@mem@set{11110111}{257}%
+  \avr@mem@set{11110000}{258}%
+  \avr@mem@set{11110001}{259}%
+
+  \avr@instr@LDI{0}{\csuse{avr@r27}}{00000001}%
+  \avr@instr@LDI{1}{\csuse{avr@r26}}{00000010}%
+  \avr@instr@LDX{2}{\csuse{avr@r20}}%
+  \avr@instr@LDXp{3}{\csuse{avr@r21}}%
+  \avr@instr@LDmX{4}{\csuse{avr@r22}}%
+  \avr@instr@LDmX{5}{\csuse{avr@r23}}%
+  \avr@instr@LDmX{6}{\csuse{avr@r24}}%
+  \avr@instr@LDmX{7}{\csuse{avr@r24}}%
+
+  \avr@instr@stepn{8}%
+  \avr@test@REG{r20}{11110000}
+  \avr@test@REG{r21}{11110000}
+  \avr@test@REG{r22}{11110000}
+  \avr@test@REG{r23}{11110111}
+  \avr@test@REG{r24}{00000000}
+  \avr@test@REG{r26}{11111111}
+  \avr@test@REG{r27}{00000000}
+}
+\preto\avr@test{\avr@test@LDX}
+
+\def\avr@test@STZ{%
+  \avr@test@setup{STZ}%
+
+  \avr@instr@LDI{0}{\csuse{avr@r31}}{00000001}%
+  \avr@instr@LDI{1}{\csuse{avr@r30}}{00000010}%
+  \avr@instr@STZ{2}{\csuse{avr@r30}}%
+  \avr@instr@STmZ{3}{\csuse{avr@r30}}%
+  \avr@instr@STZp{4}{\csuse{avr@r0}}%
+  \avr@instr@STZp{5}{\csuse{avr@r0}}%
+
+  \avr@instr@stepn{4}%
+  \avr@test@MEM{258}{00000010}
+  \avr@test@MEM{257}{00000010}
+
+  \avr@instr@stepn{2}%
+  \avr@test@MEM{258}{00000000}
+  \avr@test@MEM{257}{00000000}
+}
+\preto\avr@test{\avr@test@STZ}
+
+\def\avr@test@SWAP{%
+  \avr@test@setup{SWAP}%
+  \avr@instr@LDI{0}{\csuse{avr@r20}}{00001001}%
+  \avr@instr@SWAP{1}{\csuse{avr@r20}}%
+
+  \avr@instr@stepn{2}%
+  \avr@test@REG{r20}{10010000}
+}
+\preto\avr@test{\avr@test@SWAP}
+
+\def\avr@test@LDSS{%
+  \avr@test@setup{LDS - STS (short)}%
+  \avr@instr@LDI{0}{\csuse{avr@r20}}{00001001}%
+  \avr@instr@STSS{1}{\csuse{avr@r20}}{1101001}%
+  \avr@instr@LDSS{2}{\csuse{avr@r21}}{1101001}%
+
+  \avr@instr@stepn{3}%
+  \avr@test@REG{r21}{00001001}
+}
+\preto\avr@test{\avr@test@LDSS}
+
+\def\avr@test@LDS{%
+  \avr@test@setup{LDS - STS (long)}%
+  \avr@instr@LDI{0}{\csuse{avr@r20}}{00001001}%
+  \avr@instr@STS{1}{\csuse{avr@r20}}{0000000011111111}%
+  \avr@instr@LDS{3}{\csuse{avr@r21}}{0000000011111111}%
+  \avr@instr@SBRC{5}{\csuse{avr@r0}}{011}% Skip always
+  \avr@instr@LDS{6}{\csuse{avr@r20}}{0000000011110000}%
+  \avr@instr@NOP{8}%
+
+  \avr@instr@stepn{5}%
+  \avr@test@REG{r21}{00001001}
+}
+\preto\avr@test{\avr@test@LDS}
+
+\def\avr@test@CPSE{%
+  \avr@test@setup{CPSE}%
+  \avr@instr@LDI{0}{\csuse{avr@r20}}{00001001}%
+  \avr@instr@LDI{1}{\csuse{avr@r21}}{00001001}%
+  \avr@instr@CPSE{2}{\csuse{avr@r20}}{\csuse{avr@r21}}% Skip always
+  \avr@instr@LDI{3}{\csuse{avr@r21}}{00001111}%
+  \avr@instr@NOP{4}%
+
+  \avr@instr@stepn{4}%
+  \avr@test@REG{r21}{00001001}
+}
+\preto\avr@test{\avr@test@CPSE}
+
+\def\avr@test@SBIC{%
+  \avr@test@setup{SBIC}%
+  \avr@instr@LDI{0}{\csuse{avr@r20}}{11110000}%
+  \avr@instr@OUT{1}{001111}{\csuse{avr@r20}}%
+  \avr@instr@SBIC{2}{01111}{111}% Skip never
+  \avr@instr@LDI{3}{\csuse{avr@r21}}{00001111}%
+  \avr@instr@NOP{4}%
+
+  \avr@instr@stepn{5}%
+  \avr@test@REG{r21}{00001111}
+}
+\preto\avr@test{\avr@test@SBIC}
+
+\def\avr@test@ADIW{%
+  \avr@test@setup{SBIC}%
+  \avr@instr@LDI{0}{\csuse{avr@r31}}{11111111}%
+  \avr@instr@LDI{1}{\csuse{avr@r30}}{11000000}%
+  \avr@instr@ADIW{2}{11}{111111}%
+  \avr@instr@ADIW{3}{11}{000001}%
+  \avr@instr@SBIW{4}{11}{000010}%
+
+
+
+  \avr@instr@stepn{3}%
+  \avr@test@REG{r30}{11111111}
+  \avr@test@REG{r31}{11111111}
+  \avr@test@SREG{00010100}
+
+  \avr@instr@stepn{1}%
+  \avr@test@REG{r30}{00000000}
+  \avr@test@REG{r31}{00000000}
+  \avr@test@SREG{00000011}
+
+  \avr@instr@stepn{1}%
+  \avr@test@REG{r30}{11111110}
+  \avr@test@REG{r31}{11111111}
+  \avr@test@SREG{00000101}
+
+}
+\preto\avr@test{\avr@test@ADIW}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Run the test-suite
+
+\avr@test
+
+\end{document}
+%%% Local Variables: 
+%%% mode: latex
+%%% TeX-master: t
+%%% End: 
+
-- 
cgit v1.2.3

