+ printf("Clearing %d KB of Chip again\n", test_size / SIZE_KILO);
+ for (uint32_t i = 0; i < test_size; i++) {
+ write8(i, (uint32_t)0x0);
+ }
+
+ printf("[WORD] Writing garbege datas to Chip, unaligned...\n");
+ for (uint32_t i = 1; i < (test_size) - 2; i += 2) {
+ uint16_t v = *((uint16_t *)&garbege_datas[i]);
+ write8(i, (v & 0x00FF));
+ write8(i + 1, (v >> 8));
+ }
+
+ sleep (1);
+ printf("Reading back garbege datas, read16(), odd addresses...\n");
+ for (uint32_t i = 1; i < (test_size) - 2; i += 2) {
+ uint32_t c = be16toh((read8(i) << 8) | read8(i + 1));
+ if (c != *((uint16_t *)&garbege_datas[i])) {
+ if (errors < 512)
+ printf("READ16_ODD: Garbege data mismatch at $%.6X: %.4X should be %.4X.\n", i, c, *((uint16_t *)&garbege_datas[i]));
+ errors++;
+ }
+ }
+ printf("read16 odd errors total: %d.\n", errors);
+ total_errors += errors;
+ errors = 0;
+
+ printf("Clearing %d KB of Chip again\n", test_size / SIZE_KILO);
+ for (uint32_t i = 0; i < test_size; i++) {
+ write8(i, (uint32_t)0x0);
+ }
+
+ printf("[LONG] Writing garbege datas to Chip, unaligned...\n");
+ for (uint32_t i = 1; i < (test_size) - 4; i += 4) {
+ uint32_t v = *((uint32_t *)&garbege_datas[i]);
+ write8(i , v & 0x0000FF);
+ write16(i + 1, htobe16(((v & 0x00FFFF00) >> 8)));
+ write8(i + 3 , (v & 0xFF000000) >> 24);
+ }
+
+ sleep (1);
+ printf("Reading back garbege datas, read32(), odd addresses...\n");
+ for (uint32_t i = 1; i < (test_size) - 4; i += 4) {
+ uint32_t c = read8(i);
+ c |= (be16toh(read16(i + 1)) << 8);
+ c |= (read8(i + 3) << 24);
+ if (c != *((uint32_t *)&garbege_datas[i])) {
+ if (errors < 512)
+ printf("READ32_ODD: Garbege data mismatch at $%.6X: %.8X should be %.8X.\n", i, c, *((uint32_t *)&garbege_datas[i]));
+ errors++;
+ }
+ }
+ printf("read32 odd errors total: %d.\n", errors);
+ total_errors += errors;
+ errors = 0;
+
+ if (loop_tests) {
+ printf ("Loop %d done. Begin loop %d.\n", cur_loop + 1, cur_loop + 2);
+ printf ("Current total errors: %d.\n", total_errors);
+ goto test_loop;
+ }
+