15 #include <sys/types.h>
17 #include <sys/ioctl.h>
19 #include "gpio/gpio.h"
20 #include "platforms/amiga/gayle-ide/ide.h"
22 uint8_t garbege_datas[2 * 1024 * 1024];
30 void sigint_handler(int sig_num) {
32 //cpu_emulation_running = 0;
35 printf("Received sigint %d, exiting.\n", sig_num);
43 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &f2);
44 srand((unsigned int)f2.tv_nsec);
46 signal(SIGINT, sigint_handler);
49 printf("Enable 200MHz GPCLK0 on GPIO4\n");
61 // printf("Status Reg%x\n",read_reg());
66 write8(0xbfe201, 0x0101); //CIA OVL
67 write8(0xbfe001, 0x0000); //CIA OVL LOW
69 printf("Writing garbege datas.\n");
70 for (uint32_t i = 0; i < 512 * 1024; i++) {
71 while(garbege_datas[i] == 0x00)
72 garbege_datas[i] = (uint8_t)(rand() % 0xFF);
73 write8(i, (uint32_t)garbege_datas[i]);
76 printf("Reading back garbege datas, read8()...\n");
77 for (uint32_t i = 0; i < 512 * 1024; i++) {
78 uint32_t c = read8(i);
79 if (c != garbege_datas[i]) {
81 printf("READ8: Garbege data mismatch at $%.6X: %.2X should be %.2X.\n", i, c, garbege_datas[i]);
85 printf("read8 errors total: %d.\n", errors);
89 printf("Reading back garbege datas, read16(), even addresses...\n");
90 for (uint32_t i = 0; i < (512 * 1024) - 2; i += 2) {
91 uint32_t c = be16toh(read16(i));
92 if (c != *((uint16_t *)&garbege_datas[i])) {
94 printf("READ16_EVEN: Garbege data mismatch at $%.6X: %.4X should be %.4X.\n", i, c, *((uint16_t *)&garbege_datas[i]));
98 printf("read16 even errors total: %d.\n", errors);
102 printf("Reading back garbege datas, read16(), odd addresses...\n");
103 for (uint32_t i = 1; i < (512 * 1024) - 2; i += 2) {
104 uint32_t c = be16toh((read8(i) << 8) | read8(i + 1));
105 if (c != *((uint16_t *)&garbege_datas[i])) {
107 printf("READ16_ODD: Garbege data mismatch at $%.6X: %.4X should be %.4X.\n", i, c, *((uint16_t *)&garbege_datas[i]));
111 printf("read16 odd errors total: %d.\n", errors);
115 printf("Reading back garbege datas, read32(), even addresses...\n");
116 for (uint32_t i = 0; i < (512 * 1024) - 4; i += 2) {
117 uint32_t c = be32toh(read32(i));
118 if (c != *((uint32_t *)&garbege_datas[i])) {
120 printf("READ32_EVEN: Garbege data mismatch at $%.6X: %.8X should be %.8X.\n", i, c, *((uint32_t *)&garbege_datas[i]));
124 printf("read32 even errors total: %d.\n", errors);
128 printf("Reading back garbege datas, read32(), odd addresses...\n");
129 for (uint32_t i = 1; i < (512 * 1024) - 4; i += 2) {
130 uint32_t c = read8(i);
131 c |= (be16toh(read16(i + 1)) << 8);
132 c |= (read8(i + 3) << 24);
134 if (c != *((uint32_t *)&garbege_datas[i])) {
136 printf("READ32_ODD: Garbege data mismatch at $%.6X: %.8X should be %.8X.\n", i, c, *((uint32_t *)&garbege_datas[i]));
140 printf("read32 odd errors total: %d.\n", errors);
144 printf("Clearing 512KB of Chip again\n");
145 for (uint32_t i = 0; i < 512 * 1024; i++) {
146 write8(i, (uint32_t)0x0);
149 printf("[WORD] Writing garbege datas to Chip, unaligned...\n");
150 for (uint32_t i = 1; i < (512 * 1024) - 2; i += 2) {
151 uint16_t v = *((uint16_t *)&garbege_datas[i]);
152 write8(i, (v & 0x00FF));
153 write8(i + 1, (v >> 8));
154 //write16(i, *((uint16_t *)&garbege_datas[i]));
158 printf("Reading back garbege datas, read16(), odd addresses...\n");
159 for (uint32_t i = 1; i < (512 * 1024) - 2; i += 2) {
160 //uint32_t c = be16toh(read16(i));
161 uint32_t c = be16toh((read8(i) << 8) | read8(i + 1));
162 if (c != *((uint16_t *)&garbege_datas[i])) {
164 printf("READ16_EVEN: Garbege data mismatch at $%.6X: %.4X should be %.4X.\n", i, c, *((uint16_t *)&garbege_datas[i]));
168 printf("read16 even errors total: %d.\n", errors);
171 printf("Clearing 512KB of Chip again\n");
172 for (uint32_t i = 0; i < 512 * 1024; i++) {
173 write8(i, (uint32_t)0x0);
176 printf("[LONG] Writing garbege datas to Chip, unaligned...\n");
177 for (uint32_t i = 1; i < (512 * 1024) - 4; i += 4) {
178 uint32_t v = *((uint32_t *)&garbege_datas[i]);
179 write8(i , v & 0x0000FF);
180 write16(i + 1, htobe16(((v & 0x00FFFF00) >> 8)));
181 write8(i + 3 , (v & 0xFF000000) >> 24);
186 printf("Reading back garbege datas, read32(), even addresses...\n");
187 for (uint32_t i = 1; i < (512 * 1024) - 4; i += 4) {
188 uint32_t c = read8(i);
189 c |= (be16toh(read16(i + 1)) << 8);
190 c |= (read8(i + 3) << 24);
191 //uint32_t c = be32toh(read32(i));
192 if (c != *((uint32_t *)&garbege_datas[i])) {
194 printf("READ32_EVEN: Garbege data mismatch at $%.6X: %.8X should be %.8X.\n", i, c, *((uint32_t *)&garbege_datas[i]));
198 printf("read32 even errors total: %d.\n", errors);
204 void m68k_set_irq(unsigned int level) {
207 struct ide_controller *get_ide(int index) {