|
|
|
@@ -0,0 +1,174 @@ |
|
|
|
uint8_t A[13][13] = {{28, 122, 80, 42, 54, 122, 98, 42, 99, 58, 124, 29, 21}, |
|
|
|
{113, 85, 30, 35, 41, 98, 103, 68, 15, 50, 31, 80, 54}, |
|
|
|
{47, 37, 23, 96, 59, 47, 84, 26, 84, 72, 51, 118, 119}, |
|
|
|
{38, 121, 45, 21, 87, 91, 20, 69, 98, 119, 15, 89, 47}, |
|
|
|
{40, 71, 105, 76, 31, 65, 109, 30, 127, 110, 17, 64, 64}, |
|
|
|
{45, 20, 113, 86, 86, 51, 104, 115, 61, 103, 60, 113, 44}, |
|
|
|
{101, 107, 33, 63, 39, 47, 120, 20, 41, 64, 102, 59, 86}, |
|
|
|
{9, 42, 118, 26, 83, 123, 10, 82, 47, 108, 127, 4, 66}, |
|
|
|
{75, 26, 117, 80, 47, 111, 38, 22, 98, 101, 92, 100, 48}, |
|
|
|
{90, 9, 71, 36, 90, 95, 4, 94, 72, 29, 77, 118, 78}, |
|
|
|
{81, 75, 97, 127, 22, 8, 96, 80, 100, 88, 69, 114, 16}, |
|
|
|
{25, 109, 74, 3, 126, 56, 99, 15, 69, 73, 76, 19, 97}, |
|
|
|
{59, 84, 102, 53, 30, 34, 33, 105, 75, 102, 60, 121, 93}}; |
|
|
|
|
|
|
|
uint8_t B[13][13] = {{102, 61, 111, 79, 99, 3, 25, 50, 33, 48, 5, 94, 28}, |
|
|
|
{106, 89, 35, 37, 112, 51, 13, 70, 3, 110, 31, 7, 99}, |
|
|
|
{65, 115, 94, 68, 95, 114, 34, 34, 64, 1, 11, 66, 126}, |
|
|
|
{114, 37, 42, 3, 88, 35, 124, 50, 74, 95, 25, 34, 24}, |
|
|
|
{25, 111, 4, 116, 54, 90, 11, 32, 121, 20, 26, 62, 60}, |
|
|
|
{45, 41, 20, 33, 89, 75, 89, 2, 28, 19, 96, 46, 119}, |
|
|
|
{39, 68, 87, 59, 33, 82, 94, 14, 115, 0, 0, 92, 85}, |
|
|
|
{58, 62, 122, 106, 93, 39, 86, 80, 75, 23, 57, 89, 7}, |
|
|
|
{119, 75, 20, 42, 1, 120, 83, 24, 62, 78, 20, 25, 126}, |
|
|
|
{121, 42, 78, 45, 8, 17, 52, 38, 44, 13, 104, 57, 62}, |
|
|
|
{29, 96, 0, 64, 47, 50, 22, 17, 88, 63, 108, 78, 101}, |
|
|
|
{70, 108, 69, 12, 0, 80, 115, 107, 71, 54, 5, 57, 3}, |
|
|
|
{123, 72, 56, 5, 30, 45, 2, 11, 124, 84, 63, 47, 104}}; |
|
|
|
uint32_t C[13][13] ={{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
|
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
|
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
|
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
|
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
|
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
|
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
|
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
|
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
|
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
|
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
|
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, |
|
|
|
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}; |
|
|
|
|
|
|
|
#define LOADCOLUMN \ |
|
|
|
"ld r13,Y+;\n"\ |
|
|
|
"out 0x0A,r28; write to IOregister \n"\ |
|
|
|
"out 0x0B,r29; write to IOregister \n"\ |
|
|
|
"ldd r14,Y+(12);\n"\ |
|
|
|
"ldd r15,Y+25;\n"\ |
|
|
|
"ldd r16,Y+38;\n"\ |
|
|
|
"adiw Y,(51);\n"\ |
|
|
|
"ld r17, Y;\n"\ |
|
|
|
"ldd r18,Y+13;\n"\ |
|
|
|
"ldd r19,Y+26;\n"\ |
|
|
|
"ldd r20,Y+39;\n"\ |
|
|
|
"adiw Y,52;\n"\ |
|
|
|
"ld r21,Y;\n"\ |
|
|
|
"ldd r22,Y+13;\n"\ |
|
|
|
"ldd r23,Y+26;\n"\ |
|
|
|
"ldd r24,Y+39;\n"\ |
|
|
|
"ldd r25,Y+52;\n"\ |
|
|
|
"in r28,0x0A; read from IOregister \n"\ |
|
|
|
"in r29,0x0B; read from IOregister \n" |
|
|
|
|
|
|
|
#define MULROW \ |
|
|
|
"ld r12,X+; eerste\n"\ |
|
|
|
"mul r13,r12;\n"\ |
|
|
|
"movw r2,r0; copy naar sum1\n"\ |
|
|
|
"ld r12,X+; tweede\n"\ |
|
|
|
"mul r14,r12;\n"\ |
|
|
|
"add r2,r0;\n"\ |
|
|
|
"adc r3,r1;\n"\ |
|
|
|
"ld r12,X+; drie\n"\ |
|
|
|
"mul r15,r12; \n"\ |
|
|
|
"add r2,r0;\n"\ |
|
|
|
"adc r3,r1;\n"\ |
|
|
|
"ld r12,X+; vier\n"\ |
|
|
|
"mul r16,r12;\n"\ |
|
|
|
"add r2,r0;\n"\ |
|
|
|
"adc r3,r1;\n"\ |
|
|
|
"ld r12,X+; vijf\n"\ |
|
|
|
"mul r17,r12;\n"\ |
|
|
|
"movw r4,r0; copy naar sum2\n"\ |
|
|
|
"ld r12,X+; zes\n"\ |
|
|
|
"mul r18,r12;\n"\ |
|
|
|
"add r4,r0;\n"\ |
|
|
|
"adc r5,r1;\n"\ |
|
|
|
"ld r12,X+; load 7\n"\ |
|
|
|
"mul r19,r12;\n"\ |
|
|
|
"add r4,r0;\n"\ |
|
|
|
"adc r5,r1;\n"\ |
|
|
|
"ld r12,X+; load 8\n"\ |
|
|
|
"mul r20,r12;\n"\ |
|
|
|
"add r2,r0;\n"\ |
|
|
|
"adc r3,r1;\n"\ |
|
|
|
"ld r12,X+; load9\n"\ |
|
|
|
"mul r21,r12; \n"\ |
|
|
|
"movw r6,r0; copy naar sum3\n"\ |
|
|
|
"ld r12,X+; load 10\n"\ |
|
|
|
"mul r22,r12;\n"\ |
|
|
|
"add r6,r0;\n"\ |
|
|
|
"adc r7,r1;\n"\ |
|
|
|
"ld r12,X+;load 11\n"\ |
|
|
|
"mul r23,r12; \n"\ |
|
|
|
"add r6,r0;\n"\ |
|
|
|
"adc r7,r1;\n"\ |
|
|
|
"ld r12,X+; load 12\n"\ |
|
|
|
"mul r24,r12;\n"\ |
|
|
|
"add r6,r0;\n"\ |
|
|
|
"adc r7,r1;\n"\ |
|
|
|
"ld r12,X+; load 13\n"\ |
|
|
|
"mul r25,r12;\n"\ |
|
|
|
"movw r8,r0; copy naar sum4\n" |
|
|
|
|
|
|
|
#define SUBSUM \ |
|
|
|
"add r2,r4;\n"\ |
|
|
|
"adc r3,r5;\n"\ |
|
|
|
"clr r4;\n"\ |
|
|
|
"clr r5;\n"\ |
|
|
|
"adc r4,r4;\n"\ |
|
|
|
"add r2,r6;\n"\ |
|
|
|
"adc r3,r7;\n"\ |
|
|
|
"adc r4,r5;\n"\ |
|
|
|
"add r2,r8;\n"\ |
|
|
|
"adc r3,r9;\n"\ |
|
|
|
"adc r4,r5;\n" |
|
|
|
|
|
|
|
|
|
|
|
#define DOROW \ |
|
|
|
LOADCOLUMN \ |
|
|
|
MULROW \ |
|
|
|
SUBSUM |
|
|
|
|
|
|
|
void print_mat(uint32_t mat[13][13]) { |
|
|
|
int i, j; |
|
|
|
for (i = 0; i < 13; i++) |
|
|
|
{ |
|
|
|
for (j = 0; j < 13; j++) |
|
|
|
{ |
|
|
|
Serial.print(mat[i][j]); |
|
|
|
Serial.print(" "); |
|
|
|
} |
|
|
|
Serial.println(""); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void setup() { |
|
|
|
Serial.begin(115200); |
|
|
|
uint8_t *B_ptr = &B[0][0]; |
|
|
|
uint8_t out = 0; |
|
|
|
//print_mat(C); |
|
|
|
// Serial.println(B_ptr); |
|
|
|
asm volatile( //"ld r2,Y+;\n" |
|
|
|
//"ld r1,Y+;\n" |
|
|
|
//"mov %0,r4;\n" |
|
|
|
DOROW |
|
|
|
"st Z, r2;\n" |
|
|
|
"std Z+1,r3;\n" |
|
|
|
"std Z+2,r4;\n" |
|
|
|
: |
|
|
|
: "z"(&(C[0][0])),"y" (&(B[0][0])), "x"(&(A[0][0])) |
|
|
|
: "memory","r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","r11","r12","r13","r14","r15","r16","r17","r18","r19","r20","r21","r22","r23","r24","r25"); |
|
|
|
|
|
|
|
Serial.println(out); |
|
|
|
Serial.println("test\n"); |
|
|
|
Serial.println(out); |
|
|
|
Serial.println("dit werkt:\n"); |
|
|
|
print_mat(C); |
|
|
|
Serial.println("\n\n"); |
|
|
|
Serial.println(out,HEX); |
|
|
|
Serial.println(out,DEC); |
|
|
|
} |
|
|
|
|
|
|
|
void loop() {} |