Fixed several bugs, imported math library.
[sphoot.git] / src / ewrap / main.c
1 #include <stdint.h>
2 #include <stdio.h>
3
4 #include "e-hal.h"
5 #include "e-loader.h"
6
7 #include "../ecommon.h"
8
9 shm_region_t *shm_region;
10
11 int main() {
12     e_platform_t platform;
13     e_epiphany_t dev;
14     e_mem_t mem;
15
16     e_init(NULL);
17     e_reset_system();
18     e_get_platform_info(&platform);
19
20     e_set_host_verbosity(H_D0);
21
22     int r = e_shm_alloc(&mem, "raytrace_shm", 1<<20);
23     if(r != E_OK) r = e_shm_attach(&mem, "raytrace_shm");
24     if(r != E_OK) {
25         printf("Failed to attach to shared memory!\n");
26         return 1;
27     }
28     shm_region = mem.base;
29
30     shm_region->generation = 0;
31
32     e_open(&dev, 0, 0, platform.rows, platform.cols);
33     printf("rows, cols: %i, %i\n", platform.rows, platform.cols);
34
35     uint8_t finished[platform.rows * platform.cols];
36     for(int i = 0; i < platform.rows * platform.cols; i ++) finished[i] = 0;
37     r = e_write(&mem, 0,0, 0, finished, platform.rows * platform.cols);
38     if(r == E_ERR) { printf("Failed to write\n"); }
39
40     /* ensure that core (0,0) is loaded first; it needs to finish initialization
41         strictly before the others do.
42
43         XXX: guarantee this?
44     */
45     e_load("ecore.srec", &dev, 0, 0, E_TRUE);
46
47     for(int i = 0; i < platform.rows; i ++) {
48         for(int j = 0; j < platform.cols; j ++) {
49             if(i == 0 && j == 0) continue;
50             e_load("ecore.srec", &dev, i, j, E_TRUE);
51         }
52     }
53
54     // rendering loop
55
56     // pseudo-code:
57     // - wait for shm_region->finished == 1
58     // 
59     while(shm_region->finished == 0) {}
60     printf("Finished!\n");
61     shm_region->width = 0x40;
62     shm_region->height = 0x40;
63     shm_region->data_end = 0x100;
64     shm_region->generation = 1;
65     shm_region->fb_off = 0x200;
66     //for(int i = 0; i < 30; i ++) printf("finished: %lx\n", shm_region->finished);
67     /*for(int i = 0; i < 30; i ++) {
68         printf("state: [%lx, %2lx, %2lx, %lx]", shm_region->finished, shm_region->interrupts_fired, shm_region->range_end, shm_region->messages_received);
69         for(int j = 0; j < 16; j ++) printf(" %lx", shm_region->msg[j]);
70         printf("\n");
71     }*/
72     //while(shm_region->finished == 1) {}
73     //while(shm_region->finished == 0) {}
74
75     /*printf("fb: ");
76     for(int i = 0; i < 0x1000; i ++) {
77         printf("%lx ", *((uint32_t *)shm_region + 0x200/4 + i));
78     }
79     printf("\n");*/
80
81     e_close(&dev);
82     e_shm_release("raytrace_shm");
83     e_finalize();
84
85     return 0;
86 }