SayoriOS 0.3.3

main.c
1 #include "lib/stdio.h"
2 #include "timer.h"
3 #include "rom.h"
4 #include "mem.h"
5 #include "cpu.h"
6 #include "lcd.h"
7 #include "sdl.h"
8 #include "drv/input/keyboard.h"
9 #include "io/tty.h"
10
11 int gb_main(int argc, char *argv[]) {
12 int r;
13 const char usage[] = "Usage: %s <rom>\n";
14
15 if(argc != 2) {
16 printf(usage, argv[0]);
17 return 0;
18 }
19
20 r = rom_load(argv[1]);
21 if(!r)
22 return 0;
23
24 printf("ROM OK!\n");
25
26 r = lcd_init();
27 if(r)
28 return 0;
29
30 printf("LCD OK!\n");
31
32 mem_init();
33 printf("Mem OK!\n");
34
35 cpu_init();
36 printf("CPU OK!\n");
37
38 keyboardctl(KEYBOARD_ECHO, false);
39 set_cursor_enabled(false);
40
41 r = 0;
42
43 while(1)
44 {
45 int now;
46
47 if(!cpu_cycle())
48 break;
49
50 now = cpu_get_cycles();
51
52 while(now != r)
53 {
54 int i;
55
56 for(i = 0; i < 4; i++)
57 if(!lcd_cycle())
58 goto out;
59
60 r++;
61 }
62
63 timer_cycle();
64
65 r = now;
66 }
67 out:
68 sdl_quit();
69
70 keyboardctl(KEYBOARD_ECHO, true);
71 set_cursor_enabled(true);
72
73 return 0;
74 }