diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 65 |
1 files changed, 5 insertions, 60 deletions
@@ -13,6 +13,7 @@ WITH REGARD TO THIS SOFTWARE. | |||
13 | 13 | ||
14 | #include "filesystem.c" | 14 | #include "filesystem.c" |
15 | #include "renderer.c" | 15 | #include "renderer.c" |
16 | #include "sequencer.c" | ||
16 | 17 | ||
17 | // | 18 | // |
18 | // Config parameters. | 19 | // Config parameters. |
@@ -37,11 +38,14 @@ WITH REGARD TO THIS SOFTWARE. | |||
37 | txt_position((PROF_SHOW_X), (PROF_SHOW_Y)+1);\ | 38 | txt_position((PROF_SHOW_X), (PROF_SHOW_Y)+1);\ |
38 | txt_printf("FLIP: %lu ", flip_cycles);\ | 39 | txt_printf("FLIP: %lu ", flip_cycles);\ |
39 | txt_position((PROF_SHOW_X), (PROF_SHOW_Y)+2);\ | 40 | txt_position((PROF_SHOW_X), (PROF_SHOW_Y)+2);\ |
41 | txt_printf("INPUT: %lu ", input_cycles);\ | ||
42 | txt_position((PROF_SHOW_X), (PROF_SHOW_Y)+3);\ | ||
40 | txt_printf("FRAME: %lu ", frame_counter);\ | 43 | txt_printf("FRAME: %lu ", frame_counter);\ |
41 | frame_counter++;\ | 44 | frame_counter++;\ |
42 | } while (0) | 45 | } while (0) |
43 | #define PROF_INIT() \ | 46 | #define PROF_INIT() \ |
44 | u32 frame_counter = 0;\ | 47 | u32 frame_counter = 0;\ |
48 | u32 input_cycles = 0;\ | ||
45 | u32 eval_cycles = 0;\ | 49 | u32 eval_cycles = 0;\ |
46 | u32 flip_cycles = 0; | 50 | u32 flip_cycles = 0; |
47 | #else | 51 | #else |
@@ -50,66 +54,6 @@ WITH REGARD TO THIS SOFTWARE. | |||
50 | #define PROF_INIT() | 54 | #define PROF_INIT() |
51 | #endif | 55 | #endif |
52 | 56 | ||
53 | #define TRIG_W 15 | ||
54 | #define TRIG_H 24 | ||
55 | #define TRIG_START_X 66 | ||
56 | #define TRIG_START_Y 90 | ||
57 | #define TRIG_OFFSET_X (TRIG_W + 4) | ||
58 | #define TRIG_OFFSET_Y (TRIG_H + 7) | ||
59 | |||
60 | void | ||
61 | draw_triggers(void) { | ||
62 | for (size_t i = 0; i < 8; i++) { | ||
63 | size_t x0 = TRIG_START_X + TRIG_OFFSET_X * i; | ||
64 | size_t x1 = TRIG_START_X + TRIG_W + TRIG_OFFSET_X * i; | ||
65 | size_t y0 = TRIG_START_Y; | ||
66 | size_t y1 = TRIG_START_Y + TRIG_H; | ||
67 | draw_rect(x0, y0, x1, y1, 1); | ||
68 | } | ||
69 | for (size_t i = 0; i < 8; i++) { | ||
70 | size_t x0 = TRIG_START_X + TRIG_OFFSET_X * i; | ||
71 | size_t x1 = TRIG_START_X + TRIG_W + TRIG_OFFSET_X * i; | ||
72 | size_t y0 = TRIG_START_Y + TRIG_OFFSET_Y; | ||
73 | size_t y1 = TRIG_START_Y + TRIG_H + TRIG_OFFSET_Y; | ||
74 | draw_rect(x0, y0, x1, y1, 1); | ||
75 | } | ||
76 | } | ||
77 | |||
78 | #define CHAN_START_X 35 | ||
79 | #define CHAN_START_Y 90 | ||
80 | #define CHAN_OFFSET_Y 12 | ||
81 | |||
82 | void | ||
83 | draw_channels(void) { | ||
84 | // Contains 5 channel buttons: Ch. 1-4 + FM. We are only drawing the DMG | ||
85 | // channels for now, since FM may take some time to develop. | ||
86 | u32 channel_buttons[] = { | ||
87 | 0xff017111, 0x117101ff, 0xff008585, 0x879500ff, | ||
88 | 0x0f080808, 0x0808080f, 0xff01b989, 0x89b901ff, | ||
89 | 0xff004242, 0x434a00ff, 0x0f080909, 0x0909080f, | ||
90 | 0xff015d45, 0xc55d01ff, 0xff00a1a1, 0xa1a500ff, | ||
91 | 0x0f080a0a, 0x0a0a080f, 0xff015d45, 0xc55d01ff, | ||
92 | 0xff00a1a1, 0xa12500ff, 0x0f080a0a, 0x0a0b080f, | ||
93 | 0xff01c141, 0xc14101ff, 0xff00151c, 0x141400ff, | ||
94 | 0x0f080808, 0x0808080f, | ||
95 | }; | ||
96 | Tile channel_tiles[3 * 4] = {0}; | ||
97 | unpack_tiles(channel_buttons, channel_tiles, 3 * 4); | ||
98 | size_t k = 0; | ||
99 | for (size_t i = 0; i < 4; i++) { | ||
100 | size_t y = CHAN_START_Y + i * CHAN_OFFSET_Y; | ||
101 | draw_tile(CHAN_START_X, y, channel_tiles + k++, false); | ||
102 | draw_tile(CHAN_START_X + 8, y, channel_tiles + k++, false); | ||
103 | draw_tile(CHAN_START_X + 16, y, channel_tiles + k++, false); | ||
104 | } | ||
105 | } | ||
106 | |||
107 | void | ||
108 | sequencer_init(void) { | ||
109 | draw_triggers(); | ||
110 | draw_channels(); | ||
111 | } | ||
112 | |||
113 | int main(void) { | 57 | int main(void) { |
114 | // Adjust system wait times. | 58 | // Adjust system wait times. |
115 | SYSTEM_WAIT = SYSTEM_WAIT_CARTRIDGE; | 59 | SYSTEM_WAIT = SYSTEM_WAIT_CARTRIDGE; |
@@ -132,6 +76,7 @@ int main(void) { | |||
132 | while (true) { | 76 | while (true) { |
133 | bios_vblank_wait(); | 77 | bios_vblank_wait(); |
134 | PROF(flip_buffer(), flip_cycles); | 78 | PROF(flip_buffer(), flip_cycles); |
79 | PROF(handle_sequencer_input(), input_cycles); | ||
135 | PROF_SHOW(); | 80 | PROF_SHOW(); |
136 | } | 81 | } |
137 | 82 | ||